之前写过一篇“webrtc开启h.264编码功能”的博客,不过并不能成功开启h.264的解码,编码H.264是OK的,但一直没有及时纠正错误,因为当时也没找到简单直接的方法,而是通过手动修改ffmpeg目录下的BUILD.gn及其它脚本 来实现开启h.264解码的功能,相对来说太过复杂,偶然间在webrtc的讨论组里看到一篇文章,算是找到了简单的方法了,自己也按照相关的步骤执行了一遍,确实有效,所以做个笔记,以备不时之需,同时也希望帮助到有需要的你。详细步骤如下(以webrtc m70为例):

使用build_ffmpeg.py脚本

使用过ffmpeg的读者应该都清楚,在编译ffmpeg时,第一步就是要执行configure来开启或者关闭某些功能。该脚本就是执行configure,只不过它使用python脚本来实现交叉编译,参数更复杂一些而已。
 - 进入ffmpeg源码目录
   cd src/third_party/ffmpeg
   
2.执行build_ffmpeg.py脚本,并传入相关参数(根据不同的android平台传入不同的参数)
   ./chromium/scripts/build_ffmpeg.py android arm64 -- --enable-jni --enable-mediacodec --enable-decoder=h264_mediacodec,h264,h264_cuvid,h264_v4l2m2m,h264_qsv,h264_crystalhd --enable-hwaccel=h264_mediacodec --enable-parser=h264 --enable-demuxer=h264 --enable-cross-compile 

使用./chromium/scripts/copy_config.sh脚本
把生成的config.h等相关文件copy到相关目录,执行以下命令:

./chromium/scripts/copy_config.sh

使用./chromium/scripts/generate_gn.py脚本
生成编译ffmpeg的BUILD.gn脚本,执行以下命令:

./chromium/scripts/generate_gn.py

相关错误
如果一切正常,请忽略此步骤(我在执行以上步骤出现了下面两个错误)

1 如果出现/usr/bin/ld相关错误,把系统中的ld临时改成别的名称
2. 如果出现GNU assembler not found, install/updadte gas-preprocessor错误,在build_ffmpeg.py参数的最后面加上--disable-asm

编译webrtc

回到webrtc的源码目录(./src),进行相关的配置及编译(执行如下命令即可):

gn gen out/arm-v8a --args='target_os="android" target_cpu="arm64" is_debug=true rtc_include_tests=false rtc_build_examples=false use_rtti=true rtc_use_h264=true proprietary_codecs=true ffmpeg_branding="Chrome"'
ninja -C out/arm-v8a

这样,最终生成了libwebrtc.a即能正常编码、解码h.264。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐