RTC(Real-time Communications),直译或者广义指实时通信,狭义一般称为实时音视频,在这次全球大爆发的新冠肺炎疫情中,作为视频会议、视频通话、远程办公、远程医疗和互动直播等应用的底层技术,为全社会的尽力运转提供了巨大的支持。
WebRTC 中的基本音频处理操作
在 RTC,即实时音视频通信中,要解决的音频相关的问题,主要包括如下这些:
- 音频数据的采集及播放。
- 音频数据的处理。主要是对采集录制的音频数据的处理,即所谓的 3A 处理,AEC (Acoustic Echo Cancellation) 回声消除,ANS (Automatic Noise Suppression) 降噪,和 AGC (Automatic Gain Control) 自动增益控制。
- 音效。如变声,混响,均衡等。
- 音频数据的编码和解码。包括音频数据的编码和解码,如 AAC,OPUS,和针对弱网的处理,如 NetEQ。
- 网络传输。一般用 RTP/RTCP 传输编码后的音频数据。
- 整个音频处理流水线的搭建。
C++ WebSocket 库
WebSocket 是 HTML5 的一个引入注目的特性,它通常用于 Web 端,为构建实时的 Web 应用提供方便。WebSocket 是一个基于 TCP 的协议,它借助于 HTTP 请求,建立客户端与服务器端之间的双向通道,通道建立完成后,客户端和服务器端都可以通过这条通道方便地收发消息,因而 WebSocket 一向有着 “Web 的 TCP” 之称。
WebSocket 不是 JavaScript 的一个接口,而是一个定义良好的基于消息的协议。得益于不同平台对于 WebSocket 协议的广泛实现,它更为跨多种平台的 实时网络应用程序 开发提供了极大的方便。除了可以在前端开发的 JavaScript 中使用 WebSocket 之外,我们也可以在 Java、C++、Go、Rust 等编程语言平台中使用 WebSocket。
Googletest 实现简要分析
借助于 Googletest 测试框架,我们只需编写测试用例代码,并定义简单的 main()
函数,编译之后并运行即可以把我们的测试用例跑起来。(更详细的内容可参考 Googletest 入门)。但 main()
函数调用 RUN_ALL_TESTS()
时,是如何找到并运行我们编写的测试用例代码的呢?本文尝试找寻 Googletest 框架背后隐藏的这些秘密。(代码分析基于 git@github.com:google/googletest.git
的 commit 2134e3fd857d952e03ce76064fad5ac6e9036104 的版本。)
Ogg 封装格式版本 0
Googletest 入门
WebRTC Audio 接收和发送的关键过程
本文基于 WebRTC 中的示例应用 peerconnection_client 分析 WebRTC Audio 接收和发送的关键过程。首先是发送的过程,然后是接收的过程。