注:
- 走马观花,只列出一些自认为比较关键的更新,可能有所遗漏;
- 修复的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的数据通道作为默认数据通道。