美文网首页webrtc
WebRTC M66~M88关键更新

WebRTC M66~M88关键更新

作者: 王沐凡 | 来源:发表于2021-12-03 14:16 被阅读0次

    原文: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关键更新

        本文链接:https://www.haomeiwen.com/subject/bjopxrtx.html