android硬件编码,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$.
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下进行编译。
更多推荐
所有评论(0)