FFMPEG Android(4)打开Android硬件编码

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下进行编译。


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值