WebRTC[11]-WebRTC如何通过SDP信息设置音频码率

目录

前言

正文


前言

WebRTC除了通过API接口控制某些参数外,还能通过SDP信息进行音视频参数的控制,特别是在进行JS SDK开发时,这种情况是非常普遍的。

《WebRTC工作原理精讲》系列-总览

正文

本文以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等,需要一点点深入理解其中的奥秘。

全部评论

相关推荐

吴offer选手:下午mt一来就告警说项目来不及,估计明天拿了权限就要参与开发了 已老实
实习生的蛐蛐区
点赞 评论 收藏
分享
仁者伍敌:实习生要工作经验,工作要实习经验
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务