如何使用GSM编解码器构建Exoplayer ffmpeg扩展?

我想使用Exoplayer播放音频文件,但是在尝试时出现了此异常:

2019-12-13 10:08:14.827 28972-29388/com.XXX.XXX E/ExoPlayerImplInternal: Source error.
    com.google.android.exoplayer2.ParserException: Expected block alignment: 0; got: 65
        at com.google.android.exoplayer2.extractor.wav.WavHeaderReader.peek(WavHeaderReader.java:81)
        at com.google.android.exoplayer2.extractor.wav.WavExtractor.sniff(WavExtractor.java:50)
        at com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractorHolder.selectExtractor(ProgressiveMediaPeriod.java:1061)
        at com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:952)
        at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:394)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
        at java.lang.Thread.run(Thread.java:764)

我要播放的音频文件是wav文件(GSM_MS,13kb / s)

我试图按照教程构建Exoplayer Ffmpeg扩展: https://github.com/google/ExoPlayer/tree/release-v2/extensions/ffmpeg

我克隆了Exoplayer存储库,并下载了Android NDK版本r20b。

我修改了构建脚本build_ffmpeg.sh以启用libgsm:

COMMON_OPTIONS=“
…
   —enable-libgsm
"

我定义了必需的环境变量:

然后我使用提供的命令行来构建库:

cd "${FFMPEG_EXT_PATH}" && \
./build_ffmpeg.sh \
 "${FFMPEG_EXT_PATH}" "${NDK_PATH}" "${HOST_PLATFORM}" "${ENABLED_DECODERS[@]}"

但是在构建过程中出了点问题:

remote: Enumerating objects: 38,done.
remote: Counting objects: 100% (38/38),done.
remote: Compressing objects: 100% (26/26),done.
remote: Total 26 (delta 20),reused 0 (delta 0)
Unpacking objects: 100% (26/26),done.
From git://source.ffmpeg.org/ffmpeg
  377a095dc3..bd83191271  master     -> origin/master
Already up to date.
Already on 'release/4.2'
Your branch is up to date with 'origin/release/4.2'.
ERROR: libgsm not found

If you think configure made a mistake,make sure you are using the latest
version from Git.  If the latest version fails,report the problem to the
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
Include the log file "ffbuild/config.log" produced by configure as this will help
solve the problem.
GEN libavutil/libavutil.version
GEN libswresample/libswresample.version
GEN libavresample/libavresample.version
GEN libavcodec/libavcodec.version
CC  libavcodec/aac_ac3_parser.o
CC  libavcodec/aacdec.o
CC  libavcodec/aacps_float.o
CC  libavcodec/aacpsdsp_float.o
CC  libavcodec/aacsbr.o
CC  libavcodec/aactab.o
CC  libavcodec/ac3.o
CC  libavcodec/ac3_parser.o
CC  libavcodec/ac3dec_data.o
CC  libavcodec/ac3dec_float.o

这是ffmpeg签出库(/extensions/ffmpeg/src/main/jni/ffmpeg/ffbuild/config.log:

中位于config.log文件中的内容的一部分
…
/Users/USER/Documents/Android/android-ndk-r20b/toolchains/llvm/prebuilt/darwin-x86_64/bin/i686-linux-android16-clang -march=i686 -Wl,--as-needed -Wl,-z,noexecstack -pie -fPIE -pie -o /var/folders/9l/trkjpc091_79vk3krfpykbsh0000gn/T//ffconf.hv2yROG1/test /var/folders/9l/trkjpc091_79vk3krfpykbsh0000gn/T//ffconf.hv2yROG1/test.o
/var/folders/9l/trkjpc091_79vk3krfpykbsh0000gn/T//ffconf.hv2yROG1/test.o:test.c:function foo: error: undefined reference to 'cexp'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
check_lib libgsm gsm.h gsm_create -lgsm
check_func_headers gsm.h gsm_create -lgsm
test_ld cc -lgsm
test_cc
BEGIN /var/folders/9l/trkjpc091_79vk3krfpykbsh0000gn/T//ffconf.hv2yROG1/test.c
    1   #include <gsm.h>
    2   #include <stdint.h>
    3   long check_gsm_create(void) { return (long) gsm_create; }
    4   int main(void) { int ret = 0;
    5    ret |= ((intptr_t)check_gsm_create) & 0xFFFF;
    6   return ret; }
END /var/folders/9l/trkjpc091_79vk3krfpykbsh0000gn/T//ffconf.hv2yROG1/test.c
/Users/USER/Documents/Android/android-ndk-r20b/toolchains/llvm/prebuilt/darwin-x86_64/bin/i686-linux-android16-clang -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Dstrtod=avpriv_strtod -DPIC -march=i686 -std=c11 -fPIE -fomit-frame-pointer -fPIC -pthread -c -o /var/folders/9l/trkjpc091_79vk3krfpykbsh0000gn/T//ffconf.hv2yROG1/test.o /var/folders/9l/trkjpc091_79vk3krfpykbsh0000gn/T//ffconf.hv2yROG1/test.c
/var/folders/9l/trkjpc091_79vk3krfpykbsh0000gn/T//ffconf.hv2yROG1/test.c:1:10: fatal error: 'gsm.h' file not found
…

gsm.h文件位于此处:/ extensions / ffmpeg / src / main / jni / ffmpeg / libavcodec

我假定此路径已配置为由构建脚本使用。

非常感谢您的帮助。

adaci 回答:如何使用GSM编解码器构建Exoplayer ffmpeg扩展?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2899699.html

大家都在问