FFmpeg編譯MediaCodec
阿新 • • 發佈:2019-01-24
從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); }
到此即可使用了,其他地方不需要修改