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

    xiaoxiao2021-03-25  94

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

    转载请注明原文地址: https://ju.6miu.com/read-20830.html

    最新回复(0)