WebRTC M66~M88关键更新

原文:https://blog.csdn.net/sonysuqin/article/details/112235095
注:
走马观花,只列出一些自认为比较关键的更新,可能有所遗漏;
修复的bug没有列出;
基本上下列所有版本的更新记录中AEC3都有一些提交,说明近年AEC3一直是WebRTC的重点内容,这里也没有列出。
M66
2018-03-21

修正Opus编码使用DTX出现的长延时,影响音视频同步;
DTMF从RTCPeerConnection转移到RTCRtpSender;
增加MediaStreamTrack.getCapabilities()方法获取MediaStreamTrack的能力
增加RelayPortFactoryInterface用于自定义relay(turn)端口;
RtpSender可以发送app指定的数据;
RTCP的发送间隔可以配置;
为联播的每个子流增加RTCRtpEncodingParamers.active字段;
CreateAnswer验证信令状态,必须是"have-remote-offer"或者"have-local-pranswer",否则拒绝;
新增一些丢帧相关的度量信息;
fec控制器插件化,PeerConnectionFactory可以使用外部fec控制器;
VoE API重构;
STUN binding消息发送间隔可以配置,并收集状态。
M67
2018-05-22

Chrome自动播放策略影响本地和远端媒体流的播放;
Android MIPS架构将被移除;
默认SRTP认证tag长度从32位改为80位。
getStats新API可以根据selector分别获取sender、receiver的stats;
更新Android、iOS端PeerConnection API,可以使用Unified Plan和RtpTransceivers;
NetEQ中为expand rate(丢包隐藏比例)增加UMA直方图;
减小fec表的尺寸,降低为fec控制器计算packet loss mask的复杂性;
默认使能round-robin包发送队列;
TurnPort类可以调用新增接口发送自定义stun消息;
支持一个sender/receiver中包含多个stream;
媒体流名从label变为到id,以支持多流;
getStats新增googHugeFramesSent,发送的巨型帧数;
允许清除VideoFormat,允许摄像头、抓屏之间的编码参数切换。
M68
2018-06-29

iOS默认去掉软编;
抓屏联播,需要SFU、MCU自行区别子流,不能仅仅依赖分辨率,不同子流可能分辨率一样,但是码率和帧率不一样;
MacOS和Windows支持实验性质的系统级回声消除;
ICE中支持VPN接口类型。
M69
2018-08-27

开始推进Unified Plan,RtpTransceivers;
数据通道的closing步骤修改,不向下兼容;
联播每层可以单独设置最大码率,通过调用RTCSender.setParameters()。
M70
2018-10-10

Android SDK默认不包含视频编解码器,需要的时候需要传递DefaultVideoEnoderFactory给createPeerConnectionFactory;
允许使用PlanB创建联播的offer、answer;
实现并评估PCC拥塞控制算法。
M71
2018-10-30

Unified Plan还处于试验阶段,预计M72升级为正式版,firefox已经使用Unified Plan;
增加MacOS framework;
集成测试BBR(后面版本被移除);
允许配置开关FrameDropper;
PacedSender中实现round-robin发送队列;
增加"number of video freezes per minute" metrics,也就是每分钟卡顿帧数。
M72
2018-12-22

Unified plan默认启用;
JS方法getDisplayMedia默认启用,用于获取屏幕,不用再安装扩展;
JS的resizeMode constrainable属性可以用于控制是否自动修改分辨率;
内网环境下可以使用mDNS建立P2P连接,隐藏私有内网地址;
抓屏模式下,可以设置较大的播放延迟,用于平滑突发较大的视频流;
未确认但是已经发送的流量,也加入带宽估计;
自适应的丢包-退避阈值,LossBasedBandwidthEstimation类实现,默认不打开;
RtpSender增加FrameEncryptorInterface,用户可以自定义加密算法;
正确支持VPN接口类型;
可以分别设置音、视频流的RTCP包发送间隔;
联播可以单独设置每个空间层的帧间隔;
收到乱序包后,延迟一段时间再发送NACK,期望空洞尽量被填充;
支持2字节RTP头扩展;
支持配置音频JitterBuffer最小延迟。
M73
2019-02-26

支持mDNS作为local candidate;
JS的一些WebRTC1.0的API;
JS在tab页共享的时候,会话可以不用停止;
SDP支持RID。
M74
2019-03-27

ICEConnectionState connected状态上报时机修改成打洞成功,而不等待dtls握手成功;
移除RTP扩展头IDs;
桌面平台移除AEC2,AEC3作为默认的回声消除引擎;
Host candidate混淆;
基于RID、MID的联播;
联播空间层分辨率降低系数scale_resolution_down_by。
M75
2019-05-16

开放RTCIceTransport和RTCDtlsTransport接口,用于访问底层ICE、DTLS信息;
chrome://webrtc-internal使用标准getStats;
联播中每个FIR对所有空间层只发送一个关键帧。
M76
2019-07-01

更多标准getStats度量信息;
实现RTCRtpTrasceiver.setCodecPreferences,可以设置用于协商的默认编码参数,也可以用于禁用RTX、RED、FEC等;
实现RTCSctpTransport,允许检查数据通道的传输状态;
实现RTCRtpSender.setStreams,允许将媒体流设置到Sender的Track中。
M77
2019-09-02

收到对应RTP流的反馈包后,MID、RSID扩展头不再继续在每个RTP包中携带,降低带宽;
改进浏览器Tab Capture UI;
新增RTCPeerConnection.restartIce可以在下次交换sdp重协商的时候重启Ice,可以不用管offer、answer的信令交换状态,随时安全调用;
新增RTCPeerConnection.oniceandidateerror,可以报告收集ICE candidate失败;
启用RTCRtpSender.setStreams,允许将媒体流设置到sender的track中;
音频支持输入输出16kHz采样率,之前都是48K;
网络拥塞控制插件化,可以自定义拥塞控制模块。
M78
2019-10-09

增加一些Stats;
编码器最小目标码率可以配置;
如果app未设置,自动设置最大码率上限。
M79
2019-11-15

Stats信息中的RTCSentRtpStreamStats->bytesSent和RTCInboundRtpStreamStats->byteReceived不再统计RTP头,只统计RTP负载的数据;
Chrome新增一个名为"WebRtcLocalIpsAllowedUrls"的企业策略,这个策略定义一个白名单,如果白名单上的URL匹配,Ice Candidate中会使用本地地址,否则会被mDNS地址隐藏;
联播时间层启用重传。
M80
2020-01-15

从该版本开始,代码中的分支名称从M80改成了分支号(80是Chromium版本, 分支号是一个单调递增的Chromium分支号码,例如M80对应3987);
setLocalDescription和setRemoteDescription可以被回滚,以实现"完美协商";
setLocalDescription可以不带参数,该调用会自动调用CreateOffer、CreateAnswer,防止异步回调过程中产生的失步竞争,以实现"完美协商";
增加AV1打包。
M81
2020-02-28

Chrome在没有获得权限的时候enumerateDevices不再暴露用户设备ID。
M82
该版本被取消。

M83
2020-04-23

增加标记测试DTLS1.0的移除;
ice-ufrag和ice-pwd语法增加一些限制,符合ice语法标准;
可插入流试验,用户可以自定义数据流的处理,用于端到端加密等应用;
JS:RTCPeerConnection.canTrickleIceCandidates用于设置服务端是否支持trickling ice candidate;
JS:RTCRtpSendParameters.degradationPreference用于设置质量调整策略,可以设置为"maintain-framerate", “maintain-resolution”, “balance”;
Opus升级到1.3;
MID、RID扩展头是否在每个RTP包中携带可以配置。
M84
2020-06-03

getStats接口获得联播下每个子流的信息,用SSRC区分;
VoIP纯语音引擎API,只包含音频编解码、NetEQ、RTP/RTCP处理,网络IO交给APP。
M85
2020-07-17

默认视频质量分析接口,允许增加多个peer;
增加HEVC编码名"H265X"到media/base/media_constants.h。
M86
2020-09-16

修复堆栈溢出攻击漏洞CVE-2020-6514,允许攻击者通过一个SCTP流从网络中以特权进行堆栈溢出攻击;
增加H264的sdp参数,fmtp=sps-pps-idr-in-keyframe,设置是否每个关键帧携带sps、pps。
M87
2020-11-06

提前警告,RTP数据通道即将被移除,基于SCTP的数据通道作为默认数据通道;
支持SDP完美协商;
Transceiver增加新方法stop。
M88
2020-12-16

VPX支持NV12,无需转换成I420;
RTP数据通道被移除,基于SCTP的数据通道作为默认数据通道。
————————————————
版权声明:本文为CSDN博主「一朵喇叭花压海棠」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sonysuqin/article/details/112235095

你可能感兴趣的:(WebRTC M66~M88关键更新)