音视频应用基本框架介绍

时间:2024-03-15 18:43:11

    毕业以来,一直在音视频相关行业工作,学过很多东西,也做过很多东西,但是从来没有系统的做过总结,现在回头想想,好多都快忘了,为此想写一系列博客,把自己的对音视频理解和想法记录下来,以便将来可以查阅,同时也希望能给其他同仁一些启发和帮助,也希望大家能对我的看法不妥之处提出宝贵意见,帮助我提高水平。

    我打算先总体介绍一下音视频应用框架,并对其中的各模块进行简述,在后续的博客里面在对每个模块具体技术做详细介绍。

    在让我们融入世界的感知系统中,视觉和听觉无疑是最重要的,视觉通过的视频信号来感知信息,听觉通过音频信号来感知信息。将音视频信号进行存储和传输,可以克服信号的时间和空间局限,以便于信息更广的传播。在我看来,音视频主要涉及模块和框架图如下:

    音视频应用基本框架介绍

    音视频采集模块:负责产生音视频信号,将场景转换成视频信号输出,声波转换成音频信号输出。在移动设备领域,信号采集设备主要有摄像头,麦克风,采集到的数据主要音视频裸数据,视频主要为RGB和YUV数据,音频主要PCM数据。

    信号处理模块:将采集到的信号进行一些运算,使得有用信息更为突出(信噪比更高),视频的主要处理包括白平衡,滤镜等,视频处理运算量大一般,一般尽量用GPU处理,可以参照GPUImage开源框架。音频的处理主要有降噪,回声抑制,自增强等,这些算法可以参照webrtc开源框架。

    编码模块:将信号的冗余去除,用最小的数据量来存储和传递信号,以便节省硬盘和带宽资源。视频信号在时间和空间上都有很大的冗余,通过正交变换和帧内预测,去除空间上的冗余度,通过帧间预测去除时间上的冗余度;音频信号短时平稳信号,通,变换到频谱域,再结合人耳的掩蔽效应,可以消除大部分信号的冗余度。主要的视频编码格式有mpeg4,h264,h265,vp8,vp9和av1等,主要音频编码格式有mp3,aac,flac和opus等。

    封装模块:在编码后的信号上面加一层协议,让信号便于理解,方便传输、存取和资源复用,比如支持随机存取和多套节目同时传输等,封装模块包括两部分,一部分主要用于存储的文件封装协议,如ps,mp4,flv和avi等协议,另一部分主要用于传输的封装协议,如ts,rtsp,rtmp等协议。

    存储模块:将信号存储起来,克服了信号时间的局限,在时间维度得以延续,比如经典影视和安防录像证据,还有人类第一段被记录声音。

    传输模块:将信号传输到他处,克服了信号的空间局限,比如视频监控和直播,主要是通过网络传输。

    解封装模块:将封装的信号复原编码后的信号。

    播放模块:再现视频和音频信号。

    成熟音视频播放器比较多,像vlc和ijkplayer,内核都是基于ffmpeg,ijkplayer基于ffplay改造,使用与android和ios上。

相关文章