如何更改WebRTC中使用的默认编解码器?

Ton*_*ony 11 sdp webrtc

我一直在谷歌搜索改变Chrome的WebRTC实现中的编解码器的方法,但似乎没有办法.

如何更改Chrome中WebRTCpeer连接中使用的默认编解码器(音频或视频)?

Ben*_*ent 10

是的,只要Chrome支持,您就可以将编解码器更改为您想要的任何内容.现在,音频方面,唯一支持的编解码器是PCMA,PCMU,ISAC和OPUS(默认).对于视频,你有VP8(在一些FireFox系统上也是H264).

要将这些编解码器中的任何一个用作默认值,您必须先修改SDP,然后再在对等连接中进行本地设置并发送您的报价/答案.我已成功测试,强制Chrome默认发送PCMA而不是OPUS.

举个例子:

假设您的默认音频SDP部分如下所示(括号中的注释不是sdp的一部分)

m=audio<media> 49353<port> RTP/SAVPF<proto> 111 103 104 0 8 106 105 13 126 <rtpformats>

c=IN<nettype> IP4<addrtype> 192.168.0.13<address>

a=rtcp:49353<port> IN<nettype> IP4<addresstype> privateIP<connection address>

a=candidate:1204296370 1 udp 2122260223 privateIP 49353 typ host generation 0 <audioIceCandidate>
a=candidate:1204296370 2 udp 2122260223 privateIP 49353 typ host generation 0
a=candidate:155969090 1 tcp 1518280447 privateIP  0 typ host generation 0
a=candidate:155969090 2 tcp 1518280447 privateIP  0 typ host generation 0
a=ice-ufrag:E7VFzFythTIOaQ6X <ice username>
a=ice-pwd:ZMHFqqXEA8JLjItZcRN4FZDJ <ice-password>
a=ice-options:google-ice <iceoptions>
a=fingerprint:sha-256<encryptType> 66:2D:43:3A:31:7B:46:56:50:D7:CC:75:80:79:5D:88:7D:5D:1B:0E:C7:E6:F9:C4:68:6D:51:7F:4B:32:97:A1<print>
a=setup:actpass <dtls setup mode>
a=mid:audio   
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level <extention map>
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=sendrecv <mediamode>
a=rtcp-mux <says rtcp mux>
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:126 telephone-event/8000
a=maxptime:60
Run Code Online (Sandbox Code Playgroud)

如果您只想使用PCMA,则可以将m=audio线路更改为以下内容: m=audio 49353 RTP/SAVPF 8这样只考虑PCMA有效负载.然后你需要删除所有与该有效负载不对应的rtpmap行,即a=rtpmap:下一个字符不是8的任何一行.如果你在本地设置修改后的sdp并将其发送给你的同行(如果他们支持PCMA ......不必是默认他们作为谈判将迫使PCMA,如果你只提供它),然后PCMA将是你的音频编解码器,而不是OPUS.

旁边几个:

  • 我正在谈论的SDP是生成并通过对createOffer等连接的createAnswer功能和成功回调的SDP
  • 这种想法会添加你知道通过垫层系统(H264,SPEEX等)都支持的编解码工作.只需确保添加有效负载和适当的映射和选项(fmtph264需要,因为配置文件很重要且可能sprop-parameter-sets).
  • 这适用于任何适当编码的WebRTC系统,即Firefox,Opera等.不仅仅是chrome.

  • Chrome目前还不支持H.264,如果底层系统确实如此,我认为Firefox(我已经看到Firefox在其最新版本中提供了它作为选项). (2认同)
  • @BenjaminTrent:您能否分享一下如何提高Opus或iSac质量的主要文档?哪里可以找到与音频编解码器相关的SDP手册? (2认同)
  • Opus受动态改变比特率的影响,因此浏览器可能会降低其比特率[这里是参考opus的RTP有效载荷格式的rfc](https://tools.ietf.org/html/draft-spittka-payload-rtp- OPUS-03#部分-6.2).我链接的那部分应该给出编解码器的选项.使其成为CBR(恒定比特率)并强制相对较高的特定速率可能会有所帮助. (2认同)
  • 如果您要删除= rtpmap行,还要确保删除相同"编解码器ID"的= rtcp-fb和a = fmtp行,否则浏览器可能会抱怨(例如,如果删除"8" "从m =行然后删除a = rtpmap:8,a = rtcp-fb:8和a = fmtp:8行) (2认同)
  • @bugwheels94 自从我写那条评论以来,在过去 3 年多的时间里,事情发生了变化:)。我认为较新版本的 Chrome 在许多系统上都支持 H264,尽管我不知道确切的列表。我在 chrome 65 中测试了 H264,效果很好。当我写这篇评论时,chrome 中的 H264 刚刚开始一个实验阶段,只能通过浏览器设置中的标志访问。 (2认同)