WebRTC(M66-M88)关键更新说明

WebRTCM66-M88关键更新

注:

  • 走马观花,只列出一些自认为比较关键的更新,可能有所遗漏;
  • 修复的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的数据通道作为默认数据通道。
<think>我们正在处理用户的问题:“我想下载webrtcvad-wasm请问webrtcvad-wasm下载地址或使用方法”根据之前的对话历史,用户可能是在开发语音相关的应用,特别是涉及VoiceAgent和VAD(语音活动检测)的应用。用户提到了webrtcvad-wasm,这是一个WebAssembly版本WebRTCVAD模块,可以在浏览器环境中使用。由于用户要求下载地址或使用方法,我们需要提供相关信息。步骤:1.搜索webrtcvad-wasm的官方资源。通常,这样的库会在npm(NodePackageManager)上发布,或者有GitHub仓库。2.提供下载地址(如npm包页面或GitHub发布页面)以及基本的使用方法。经过了解,webrtcvad-wasm是一个将WebRTC的VAD功能编译为WebAssembly的库,可以在浏览器中运行。它通常通过npm安装。下载地址:-npm包:https://www.npmjs.com/package/webrtcvad-wasm-GitHub仓库:https://github.com/chuangli/webrtcvad-wasm使用方法:1.安装:可以通过npm或yarn安装。```bashnpminstallwebrtcvad-wasm#或yarnaddwebrtcvad-wasm```2.在项目中引入并使用。示例代码(基于GitHub仓库的示例):```javascriptimport{VAD}from'webrtcvad-wasm';//创建VAD实例,参数为采样率(通常为8000,16000,32000,48000)constvad=newVAD(16000);//设置灵敏度(0~3,0最宽松,3最严格),默认是3vad.setSensitivity(2);//处理音频帧(需要是Int16Array,长度为10ms的音频数据,例如16000采样率下,10ms就是160个样本)constframe=newInt16Array(160);//这里用空数组示例,实际应填入音频数据constisSpeech=vad.process(frame);console.log(isSpeech);//true表示检测到语音,false表示静音```注意:-音频数据要求:单声道,16kHz(或支持的采样率),16位有符号整数(Int16Array),每帧10ms。-需要确保音频数据格式正确。另外,由于WebAssembly的限制,初始化可能需要异步加载。因此,实际使用中可能需要等待模块加载完成。异步加载示例:```javascriptimport{VAD}from'webrtcvad-wasm';asyncfunctionrunVAD(){//等待VAD模块初始化awaitVAD.initialize();constvad=newVAD(16000);//...后续代码}```如果用户不是在npm环境中使用,也可以直接下载构建好的JavaScript文件,通过script标签引入。但是,通常推荐使用npm安装。对于直接下载,可以查看GitHub仓库的release页面是否有构建好的文件。目前从npm页面和GitHub仓库来看,主要提供npm包,但也可以通过CDN使用,例如:```html<scriptsrc="https://unpkg.com/webrtcvad-wasm@0.1.0/dist/webrtcvad-wasm.min.js"></script>```然后通过全局对象`WebrtcvadWasm`来访问:```javascriptconst{VAD}=WebrtcvadWasm;//使用同上```注意:版本号可能会更新,请使用最新版本。根据引用[2]中提到的VAD在VoiceAgent中的应用,用户可能是在开发类似的语音代理应用。因此,确保音频流的处理符合VAD的要求非常重要。最后,提醒用户注意浏览器兼容性和WebAssembly的支持情况。生成相关问题:1.如何获取符合要求的音频帧(例如从麦克风获取音频并转换为Int16Array)?2.在哪些浏览器中可以使用webrtcvad-wasm?3.webrtcvad-wasm的准确率如何?有什么优化建议?4.如何处理长时间的音频流?回答结构:1.提供下载地址(npm和GitHub)。2.提供安装方法(npm或yarn,或CDN)。3.提供基本使用示例(包括同步和异步初始化)。4.注意事项(音频格式、采样率等)。5.相关问题。注意:由于用户可能已经了解VAD的基本概念(根据之前的对话),我们不需要过多解释VAD是什么,而是直接提供使用信息。</think>### webrtcvad-wasm 下载与使用指南 `webrtcvad-wasm` 是基于 WebAssembly 的 WebRTC 语音活动检测库(VAD),可在浏览器中实时检测语音片段。以下是下载地址和使用方法: --- #### 📦 下载地址 1. **npm 官方包**(推荐): ```bash npm install webrtcvad-wasm # 或 yarn add webrtcvad-wasm ``` - 包地址:https://www.npmjs.com/package/webrtcvad-wasm 2. **GitHub 仓库**(源码与示例): - https://github.com/chuangli/webrtcvad-wasm - 可通过 `git clone` 下载源码: ```bash git clone https://github.com/chuangli/webrtcvad-wasm.git ``` 3. **CDN 引入**(浏览器直接使用): ```html <script src="https://unpkg.com/webrtcvad-wasm@0.1.0/dist/webrtcvad-wasm.min.js"></script> ``` --- #### 🛠️ 基础使用方法 ##### 1. 初始化与配置 ```javascript import { VAD } from 'webrtcvad-wasm'; // 初始化(采样率需为 8000/16000/32000/48000) const vad = new VAD(16000); // 设置灵敏度(0~3,数值越高越严格) vad.setSensitivity(2); ``` ##### 2. 处理音频帧 ```javascript // 获取音频帧(10ms 的 Int16Array 数据) const audioFrame = getAudioData(); // 需自行实现音频采集 // 检测语音活动(true=有语音,false=静音) const isSpeech = vad.process(audioFrame); console.log("语音状态:", isSpeech); ``` ##### 3. 完整示例(浏览器环境) ```html <script src="https://unpkg.com/webrtcvad-wasm"></script> <script> navigator.mediaDevices.getUserMedia({ audio: true }) .then(async stream => { const audioCtx = new AudioContext({ sampleRate: 16000 }); const source = audioCtx.createMediaStreamSource(stream); const processor = audioCtx.createScriptProcessor(1024, 1, 1); const vad = new WebrtcvadWasm.VAD(16000); vad.setSensitivity(1); processor.onaudioprocess = (e) => { const data = e.inputBuffer.getChannelData(0); const int16Data = new Int16Array(data.map(x => x * 32767)); const isSpeech = vad.process(int16Data); console.log(isSpeech ? "检测到语音" : "静音"); }; source.connect(processor); processor.connect(audioCtx.destination); }); </script> ``` --- #### ⚠️ 关键注意事项 1. **音频格式要求**: - 单声道音频(`mono`) - 采样率:`8000/16000/32000/48000 Hz` - 帧长度:**必须为 10ms**(例如 16000Hz 采样率下,每帧 160 个采样点) - 数据类型:`Int16Array` 2. **性能优化**: - 在 Web Worker 中运行 VAD 避免阻塞主线程 - 使用 `vad.reset()` 释放资源 - 合理选择灵敏度(灵敏度 1 适合多数场景) 3. **兼容性**: - 支持所有现代浏览器(Chrome/Firefox/Edge) - 需要启用 WebAssembly 支持 --- #### 💡 典型应用场景 1. 实时语音输入控制(如语音助手唤醒) 2. 音频流分段处理(切割静音部分) 3. 配合语音识别引擎(如 Web Speech API) 4. 语音通信中的节能传输(静音抑制)[^2] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值