老样子,资料杂乱老旧
1,下载exoplayer 源码
SENRSL:ExoPlayer senrsl$ git clone git@github.com:senRsl/ExoPlayer.git
2. 写编译脚本
SENRSL:ExoPlayer senrsl$ touch make_ffmpeg_21.sh
SENRSL:ExoPlayer senrsl$ cat make_ffmpeg_21.sh
#!/bin/bash
EXOPLAYER_ROOT="$(pwd)"
FFMPEG_EXT_PATH="${EXOPLAYER_ROOT}/extensions/ffmpeg/src/main"
# 1.配置看自己需求
COMMON_OPTIONS="
--target-os=android
--disable-static
--enable-shared
--disable-doc
--disable-programs
--disable-everything
--disable-avdevice
--disable-avformat
--disable-swscale
--disable-postproc
--disable-avfilter
--disable-symver
--disable-avresample
--enable-swresample
--enable-avresample
--enable-decoder=vorbis
--enable-decoder=opus
--enable-decoder=flac
--enable-decoder=alac
--enable-decoder=pcm_mulaw
--enable-decoder=pcm_alaw
--enable-decoder=mp3
--enable-decoder=amrnb
--enable-decoder=amrwb
--enable-decoder=aac
--enable-decoder=ac3
--enable-decoder=eac3
--enable-decoder=dca
--enable-decoder=mlp
--enable-decoder=truehd
--extra-ldexeflags=-pie
"&& \
# 2.NDK路径,记得修改
NDK_PATH="/Users/senrsl/android/sdkas/ndk/21.3.6528147"
# HOST_PLATFORM="linux-x86_64"
HOST_PLATFORM="darwin-x86_64"
TOOLCHAIN_PREFIX="${NDK_PATH}/toolchains/llvm/prebuilt/${HOST_PLATFORM}/bin"
# 3.FFMPEG路径,记得修改
cd "${FFMPEG_EXT_PATH}/jni" && \
git clone git://source.ffmpeg.org/ffmpeg && \
cd ffmpeg && \
git checkout release/4.2 && \
FFMPEG_PATH="$(pwd)"
./configure \
--libdir=android-libs/armeabi-v7a \
--arch=arm \
--cpu=armv7-a \
--cross-prefix="${TOOLCHAIN_PREFIX}/armv7a-linux-androideabi16-" \
--nm="${TOOLCHAIN_PREFIX}/arm-linux-androideabi-nm" \
--strip="${TOOLCHAIN_PREFIX}/arm-linux-androideabi-strip" \
--extra-cflags="-march=armv7-a -mfloat-abi=softfp" \
--extra-ldflags="-Wl,--fix-cortex-a8" \
${COMMON_OPTIONS}
make -j4
make install-libs
make clean
./configure \
--libdir=android-libs/arm64-v8a \
--arch=aarch64 \
--cpu=armv8-a \
--cross-prefix="${TOOLCHAIN_PREFIX}/aarch64-linux-android21-" \
--nm="${TOOLCHAIN_PREFIX}/aarch64-linux-android-nm" \
--strip="${TOOLCHAIN_PREFIX}/aarch64-linux-android-strip" \
${COMMON_OPTIONS}
make -j4
make install-libs
make clean
./configure \
--libdir=android-libs/x86 \
--arch=x86 \
--cpu=i686 \
--cross-prefix="${TOOLCHAIN_PREFIX}/i686-linux-android16-" \
--nm="${TOOLCHAIN_PREFIX}/i686-linux-android-nm" \
--strip="${TOOLCHAIN_PREFIX}/i686-linux-android-strip" \
--disable-asm \
${COMMON_OPTIONS}
make -j4
make install-libs
make clean
./configure \
--libdir=android-libs/x86_64 \
--arch=x86_64 \
--cpu=x86_64 \
--cross-prefix="${TOOLCHAIN_PREFIX}/x86_64-linux-android21-" \
--nm="${TOOLCHAIN_PREFIX}/x86_64-linux-android-nm" \
--strip="${TOOLCHAIN_PREFIX}/x86_64-linux-android-strip" \
--disable-asm \
${COMMON_OPTIONS}
make -j4
make install-libs
make clean
SENRSL:ExoPlayer senrsl$
3. 编译生成
SENRSL:ExoPlayer senrsl$ sh make_ffmpeg_21.sh
SENRSL:ExoPlayer senrsl$ tree extensions/ffmpeg/src/main/jni/ffmpeg/android-libs/
extensions/ffmpeg/src/main/jni/ffmpeg/android-libs/
├── arm64-v8a
│ ├── libavcodec.so
│ ├── libavresample.so
│ ├── libavutil.so
│ └── libswresample.so
├── armeabi-v7a
│ ├── libavcodec.so
│ ├── libavresample.so
│ ├── libavutil.so
│ └── libswresample.so
├── x86
│ ├── libavcodec.so
│ ├── libavresample.so
│ ├── libavutil.so
│ └── libswresample.so
└── x86_64
├── libavcodec.so
├── libavresample.so
├── libavutil.so
└── libswresample.so
4 directories, 16 files
SENRSL:ExoPlayer senrsl$
编完了才发现,这个文件 exoplayer里直接就有现成的。。。。
4,使用
复制extensions/ffmpeg/src/main/java/下的几个java文件,和编译生成的so....
修改
//音轨选择器 // TrackSelection.Factory trackSelectionFactory = new AdaptiveTrackSelection.Factory(); // DefaultTrackSelector trackSelector = new DefaultTrackSelector(this, trackSelectionFactory); ExoTrackSelection.Factory trackSelectionFactory = new AdaptiveTrackSelection.Factory(); DefaultTrackSelector defaultTrackSelector = new DefaultTrackSelector(getApplicationContext(), trackSelectionFactory); //渲染 DefaultRenderersFactory defaultRenderersFactory = new DefaultRenderersFactory(getApplicationContext()); defaultRenderersFactory.setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_PREFER); // defaultRenderersFactory.setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON);
player = new SimpleExoPlayer.Builder(this, defaultRenderersFactory) .setLoadControl(loadControl) .setTrackSelector(defaultTrackSelector) // .setTrackSelector(trackSelector) .build();
运行即可。。。。
按照文档所说,播放视频时输出 Loaded FFmpeg 大概这行字的日志就说明成功了。。。。
问题:
exoplayer ffmpeg C.FormatSupport
修改 exoplayer version 为2.13.2。。。。
Failed to resolve: core-1.3.0
google()移动到第一位
TrackSelection.Factory trackSelectionFactory = new
AdaptiveTrackSelection.Factory();
^
符号: 类 Factory
位置: 接口 TrackSelection
哪里报错注释哪里,exoplayer版本一变动,好多api没了。。。。
最终试了下,应该是可以了,以前不能播的 AC-3、flac都能播了。。。。
senRsl
2021年04月02日11:29:10
没有评论 :
发表评论