WebRTC 开发:如何改变浏览器

WebRTC 是一个把 RTC 实时通讯带给开放浏览器平台的项目,同时也是 IETF 标准。WebRTC 也是 C++ 库的一个名字,并在 Chrome 和其他浏览器中部署实现。WebRTC 原生库有超过 100 万行 C++ 代码,源于 2004 年的 libjingle,和额外的 GIPS 音视频引擎和 On2’s libvpx 等。它是完全开源的,是 Chrome 的一部分,且广泛应用于移动设备应用。

Philipp 展示了 WebRTC 库框架图:

图片

其中包含了 RTP, RTCP 的实现,DTLS,音视频处理、渲染和编解码,以及 jitter buffer,回声消除等功能。

在 Chrome 上有两类 WebRTC 类,分别是 JavaScript 和 C++,两者也有着不同的采集、渲染和编解码器,且 UI 也不同。WebRTC 和 Chrome 之间耦合非常紧密,WebRTC 需要 Chrome 作为依赖,而 Chrome 也十分频繁地更新 WebRTC,且还有通用的第三方库如 libvpx,libsrtp, boringssl 等。但是两种 WebRTC 的基本流程是相同的,如编译流程,架构等。获取 WebRTC 代码并编译需要一点时间和成本,但是已经是 WebRTC 学习中简单的一部分了。

WebRTC 在近几年十分活跃,在 2017 年位于顶峰。

图片

向 WebRTC 贡献代码

接下来 Philipp 展示了两个 WebRTC 代码贡献的例子:

修复简单的小问题

修复问题的流程如下:

  1. 修复问题;
  2. 写一个好的 commit 记录;
  3. 通过 git cl 上传,等待检查;
  4. 找到一个 git cl 管理员来检查上传并修复;
  5. 最后解释修复的原因。

整个升级的生命周期是很标准的:

  • 首先升级你的特性;
  • 使用 git cl 上传;
  • 获取审核;
  • 上传完毕;
  • 等待 WebRTC 更新新版本。

冗余音频

音频质量在通话体验中是十分重要的,Zoom 说的比它的实际表现要好,其发送的音频包要比 WebRTC 的包大得多,且使用 SILK 编解码,会产生冗余机制。而 WebRTC 使用的是 Opus 编解码,是一种混合编解码并融合了 SILK,且包含前向纠错模式。然后 Opus 的 FEC 表现并不是特别好,它会发送当前帧和部分之前帧的信息,且之前帧的大小占比会随着丢包率而变化,因此实际的新内容的码率是从设定的码率减下来的,导致质量的降低。

WebRTC 在 2011 年将这种 FEC 机制部署到音频编解码中,Philipp 当时为了提出解决这个音频冗余的问题去找了谷歌的 WebRTC 团队来寻求方向,并讨论如何解决这个问题。

相对于直接写新的代码,可能重新使用已有的代码更容易一些,但是尽管如此整个项目还是十分复杂。简而言之,冗余音频编码器(RED)包装了实际上的 Opus 编码器,根据 RFC2198 标准把当前和之前的帧都放到 RTP 包中,且这个功能是可以在setCodecPreferencesAPI 中开启的,默认关闭,因为它还是一个权衡选项。getStatsAPI 可以提供很好的衡量标准,且 Philipp 和他的伙伴提出了”concealment percentage”的概念,在丢包率 20% 时,没有 RED 的情况下,concealment 分数为 18%,且仍可以理解语音内容,而有 RED 的情况下,concealment 分数为 0.7%,音频质量非常好。而在 60% 丢包率的情况下,没有 RED 时 concealment 分数为 60%,基本上音频内容都是无效的,而有 RED 时分数则为 18%,仍可以理解音频内容。Philipp 继续展示了一个 POLQA-MOS 音频分数实验结果(Perceptual Objective Listening Quality Analysis).

图片

可以看到在有 RED 的情况下,其质量分数一直都比没有的情况下要高。

为了得到更接近真实情况的结果,Philipp 还做了 Orginal Trials,这是一种来测试新的平台功能的实验。然而自从 2020 年 10 月开始实验卡住了,Google 的伙伴在调研如何运行这个 Trials 的过程中没回信了,因此 RED 没有得到部署,Philipp 也去寻找别的方法。

WebRTC 很复杂

WebRTC 的 C++ 库的开发过程十分复杂,如果想要加功能,就必须要对整个过程有充分的理解。WebRTC 还需要很多贡献者,目前的贡献量对于 WebRTC 作为一个项目来说还是略少了,Google 获得的回报和目前的投入还不成正比。要让贡献的过程变得简单,可能需要这个社区进一步的发展。

来源:Engineering Semester
主讲人:Philipp Hancke
内容整理:李昊勇

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论