1:在编译时enable  mediacodec 相关功能。

function build_ffmpeg

{

./configure \

--prefix=$PREFIX \

--pkg-config-flags="--static" \

--extra-libs="-lgcc" \

--extra-cflags="-I$PREFIX/include -static" \

--extra-ldflags="-L$PREFIX/lib -static" \

--disable-shared \

--enable-static \

--disable-doc \

--enable-ffmpeg \

--disable-ffplay \

--disable-ffprobe \

--disable-ffserver \

--disable-avdevice \

--disable-doc \

--disable-symver \

--disable-encoders \

--enable-gpl \

--enable-libx264 \

--enable-encoder=aac \

--enable-encoder=libx264 \

--enable-parser=h264 \

--enable-jni \

--enable-mediacodec \

--disable-decoders \

--enable-decoder=h264_mediacodec \

--enable-decoder=vp8_mediacodec \

--enable-decoder=vp9_mediacodec \

--enable-decoder=mpeg4_mediacodec \

--enable-decoder=hevc_mediacodec \

--enable-decoder=h264 \

--enable-decoder=mpeg4 \

--enable-decoder=aac \

--enable-decoder=mp3 \

--enable-decoder=amr \

--disable-muxers \

--enable-muxer=m4v \

--enable-muxer=mp4 \

--enable-muxer=mov \

--disable-demuxers \

--enable-demuxer=flv \

--enable-demuxer=matroska \

--enable-demuxer=mov \

--enable-demuxer=m4v \

--enable-demuxer=avi \

--disable-parsers \

--enable-parser=aac \

--enable-parser=h264 \

--enable-parser=mpeg4video \

--enable-parser=mpegaudio \

--enable-parser=mpegvideo \

--disable-protocols \

--enable-protocol=file \

--disable-devices \

--enable-small \

--cross-prefix=$TOOLCHAIN/bin/arm-linux-a

ndroideabi- \

--target-os=linux \

--arch=arm \

--enable-cross-compile \

--sysroot=$SYSROOT \

$ADDITIONAL_CONFIGURE_FLAG

make clean

rm build.log

make -j8 | tee build.log

make install

2:enable之后,仍然无法使用硬解码。必须在Android代码中注册JavaVM。

jint JNI_OnLoad(JavaVM* vm, void* reserved)

{

LOGI("ffmpeg JNI_OnLoad");

av_jni_set_java_vm(vm, reserved);

return JNI_VERSION_1_6;

}

完成了这两步,在android 转码过程中,会优先使用mediacodec作为解码。

问题:

1:在部分机器上,加载so失败。

这是由于ndk版本导致,新的ndk会有这部分问题。目前觉得方案是切换到ndk8下进行编译。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐