WebRTC[11]-WebRTC如何通过SDP信息设置音频码率
目录
前言
WebRTC除了通过API接口控制某些参数外,还能通过SDP信息进行音视频参数的控制,特别是在进行JS SDK开发时,这种情况是非常普遍的。
正文
本文以WebRTC的M76版本为例进行介绍。
首先来看一段SDP信息(只包含音频信息):
v=0 o=- 8275923203002055919 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE audio video a=msid-semantic: WMS 6a6d1509-69e0-4fc2-b447-5b4391f9ad69_STS m=audio 9 UDP/TLS/RTP/SAVPF 111 103 9 102 0 8 105 13 110 113 126 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:QLMT a=ice-pwd:V0cOn+fDmd49138wk42548PU a=ice-options:trickle a=fingerprint:sha-256 6B:CD:36:F6:8D:F1:CB:E7:44:0A:E9:3B:D4:A1:A4:F3:7F:93:99:4C:EF:4A:3A:A2:91:6A:7F:57:50:49:04:1B a=setup:actpass a=mid:audio b=AS:64 a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=extmap:2 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 a=sendonly a=rtcp-mux a=rtpmap:111 opus/48000/2 a=rtcp-fb:111 nack a=rtcp-fb:111 transport-cc a=fmtp:111 minptime=10;useinbandfec=1;maxaveragebitrate=64000
说到音频码率控制,我们可以关注一下参数 “b=AS” ,WebRTC底层就是通过解析 b=AS 参数来设置音频码率的,当然也可以不设置,这样会使用默认值,一般默认值是32kbps。
SDP信息传递到底层时,会被反序列化,这时就会用到一个方法:
// src/pc/webrtc_sdp.h // Deserializes the passed in SDP string to a JsepSessionDescription. // message - SDP string to be Deserialized. // jdesc - The JsepSessionDescription deserialized from the SDP string. // error - The detail error information when parsing fails. // return - true on success, false on failure. // 解析SDP信息的方法 bool SdpDeserialize(const std::string& message, JsepSessionDescription* jdesc, SdpParseError* error);
方法的具体实现:
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
WebRTC工作原理精讲 文章被收录于专栏
WebRTC 作为当下最热门的实时音视频通讯框架,涉及非常多的过程,比如采集、编码、组包、发包、传输、收包、丢包重传、解封装、解码、音视频同步、渲染等,同时还包括很多功能特性,比如ANS、AGC、AEC,REMB、GCC、CNG、FEC、PLI、SVC等,需要一点点深入理解其中的奥秘。