webrtc开启h.264编解码功能

14 篇文章 1 订阅
12 篇文章 1 订阅

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__",
     ]
WebRTC是一种用于实现实时通信的开放标准,而rtc_base是WebRTC中的一个重要模块。rtc_base模块是WebRTC的基础设施,提供了一套通用的功能和工具,用于支持音频、视频、网络传输和数据处理等方面的操作。 rtc_base模块涵盖了许多关键组件和类,如信号传输、网络套接字、线程管理、事件系统、时间戳等。它们提供了实现WebRTC所需的基本功能和工具集,为应用程序开发人员提供了一种简化复杂操作的方式。 其中,信号传输是rtc_base模块的一个重要组件。通过信号传输,WebRTC能够建立和维护连接,进行媒体流的传输和实时通信的交互。网络套接字则负责处理数据包的发送和接收,保证数据的可靠传输。线程管理模块用于管理多线程操作,提高性能和并发能力。事件系统则负责监听和处理各种事件,如连接建立、数据到达等。时间戳模块则用于记录和同步时间戳,确保数据的时序性和一致性。 通过rtc_base模块,开发人员可以借助WebRTC API构建各种实时通信应用,如音视频会议、在线教育、远程协作等。rtc_base提供了一种可靠、高效的底层基础设施,使得开发人员能够更简单、更高效地构建端到端的实时通信系统。 总之,rtc_base模块是WebRTC的基础设施,为实现实时通信提供了一套通用的功能和工具集。它的存在使得WebRTC能够更好地支持丰富的音视频交互和数据处理操作,在实时通信应用的开发中起到了关键作用。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值