https://groups.google.com/a/chromium.org/forum/#!topic/chromium-reviews/YoMQmOBPZn8
自己编译的webrtc库发现无法正常使用h.264编解码器,所以猜测可能是在编译的过程中默认没有开启h.264功能。
首先,我们应该查询一下gn编译的时候是否可以选择h.264。查看gn编译的可选参数命令行为:
#查看帮助
gn help
#查看如何获取参数帮助
gn args
#生成参数集
gn args ./args
#查询可用参数
gn args ./args --list
最终发现,rtc_use_h264默认是false,即不使用h264。
而我之前在编译webrtc的时候使用的是默认的参数,如下:
gn gen out/arm-v8a --args='target_os="android" target_cpu="arm64" is_debug=false use_rtti=true’
故无法正常使用h.264编解码器。
开启h.264编解码功能的编译参数为:
gn gen out/arm-v8a --args='target_os="android" target_cpu="arm64" is_debug=false use_rtti=true rtc_use_h264=true proprietary_codecs=true’
但执行会报错(注:我选择的是release 70版本,较新版本已经解决了该BUG,具体版本不清楚,详情),具体错误如下:
ERROR at //third_party/openh264/BUILD.gn:38:5: Undefined identifier.
defines += [ "ANDROID_NDK" ]
^------
See //modules/video_coding/BUILD.gn:325:7: which caused the file to be included.
"//third_party/openh264:encoder",
引起该错误的原因是由于编译openh264的脚本存在错误,修改一下//third_party/openh264/BUILD.gn即可解决该问题:
config("config") {
cflags = []
+ defines = []
if (is_chromeos && target_cpu == "arm") {
# HAVE_NEON and __chromeos__ are needed for enabling NEON on ChromeOS
# devices.
- defines = [
+ defines += [
"HAVE_NEON",
"__chromeos__",
]