1. 程式人生 > >FFmpeg編譯MediaCodec

FFmpeg編譯MediaCodec

從ffmpeg的3.1版本開始,加入了對Android的MediaCodec硬解支援,目前支援的格式包括h264、h265、mpeg4、vp8和vp9,下面以h264為例說明一下

1、編譯ffmpeg

在configure階段首需要enable相關的元件,如下所示:

--enable-jni

--enable-mediacodec

--enable-decoder=h264_mediacodec

--enable-hwaccel=h264_mediacodec

此外,必須指定編譯平臺 --target-os=android,否則會報錯:ERROR:jni not found

2、使用MediaCodec

第一步:為ffmpeg設定java虛擬機器

因為用到了jni,所以第一步需要為ffmpeg設定java虛擬機器,在JNI_OnLoad函式中呼叫av_jni_set_java_vm,該函式在libavcodec/jni.h檔案中

第二步:使用MediaCodec

MediaCodec對應的ffmpeg的元件名稱為“h264_mediacodec”,需要通過指定名字來獲得相應的codec,如果獲得硬體解碼器失敗,再通過id來獲得軟體解碼器

AVCodec *codec = avcodec_find_decoder_by_name("h264_mediacodec");
if (codec == NULL) {
     codec = avcodec_find_decoder(id);
}

到此即可使用了,其他地方不需要修改