WebRTC音视频实时互动技术:原理、实战与源码分析
上QQ阅读APP看书,第一时间看更新

2.1.1 拆分音视频模块

接下来,我们就对上面的直播客户端架构图进行逐步细化。细化的第一步就是拆分音视频模块。因为在实际开发中,音频与视频的处理是完全独立的,它们有各自的处理方式。如音频有独立的采集设备(声卡)、独立的播放设备(扬声器)、访问音频设备的系统API、多种音频编解码器(如Opus、AAC、iLBC)等;同样地,视频也有自己的采集设备(摄像头)、渲染设备(显示器)、各种视频编解码器(如H264、VP8)等。细化后的直播客户端架构如图2.2所示。

图2.2中可以看到,细化后的架构中,音频的采集模块与视频的采集模块是分开的,而音频编解码模块与视频的编解码模块也是分开的。也就是说,音频采用了一条处理流程,视频则采用了另外一条处理流程,它们之间并不相交。在音视频处理中,我们一般称每一路音频或每一路视频为一条轨 轨:取两条轨永远不相交的意思,也就是说,音频数据与视频数据是永远不会交叉存放到一起的。

图2.2 拆分音视频的客户端架构

除此之外,我们还可以知道,自研音视频直播客户端要实现的模块远不止5个,至少应该包括音频采集、视频采集、音频编码/音频解码、视频编码/视频解码、网络传输、音频播放以及视频渲染这7个模块。

[1] 轨:取两条轨永远不相交的意思,也就是说,音频数据与视频数据是永远不会交叉存放到一起的。