书籍有目录,知识也有脉络,有了框架和概念,对我们的工作和学习往往可以起到提纲挈领的作用。今日闲来无事,就来详细梳理一下多媒体开发的知识框架体系。希望能对各位有所帮助。
多媒体体系整体而言比较复杂,我们每一个人可能只是在其中的某一个环节或某一个点深入做下去。本文整体思路,大概从音视频的采集,传输,再到终端接收显示,以及后期处理的角度去把相关知识提炼出来!供大家参考。
PS: FFmpeg是一个涉及所有音视频处理的环节,放哪也不合适,所以就在图中间了
采集
音视频的采集,主要的硬件设备集中在摄像头和麦克风。摄像头用来采集图像数据,本质就是图片。麦克风采集的是声音,声音在计算机中一般是通过波形去模拟。这就要求我们对音频和视频的采样格式要了若指掌。视频对我们而言比较重要的是YUV(YUV格式详解),RGB(RGB格式详解)两种颜色空间格式了,音频我们则要熟悉采样率,sample,精度等概念。
传输
说到传输,指的是通过网络传输音视频数据,我们把网络想象成现实世界中的公路,音视频的传输比作寄快递。那么,这个过程主要两个子过程,一个是对快递的打包,一个是选择哪一家快递。快递的打包就是音视频数据的压缩,选择哪一家快递就是传输协议的一个选择。
(1)压缩
由于网络信道无法承载原始音视频数据的巨大数据量,所以有了压缩的需求,而又因为媒体数据有时间上和空间上的冗余,所以有了压缩的可能。因此,我们要基本掌握压缩的原理,基本了解常见的压缩标准和一些熟悉的框架。对于视频而言,比较主流的压缩标准就是MPEG系列,H26x系列(H261~H266),谷歌的VP8/9系列。比较成熟的编码框架有x264,x265, openh264。
对于音频,主流的压缩标准有G.7XX系列,MP3,微软的WMA,以及FLAC。
(2)协议
传输协议,将压缩后的音视频数据再按照流媒体协议的规则进行封装然后经过网络发送。关于流媒体传输的协议,我们常见的就是Adobe的rtmp(直播的场景用的比较多),RTSP(监控领域用的比较多),苹果公司的HLS。就像不同的快递各有各的特色,不同的协议也各有各的适用场景。
终端的接收显示
终端接收到的数据是经过压缩的,首先要对协议的封装(快递公司的打包盒)进行解封装,之后还要对编码后的数据进行解码(打开货物本身的包装)。这样就得到原始的数据,得到的原始数据最终要呈现,这里主要就涉及到播放器的功能。播放器的功能,主要就是要将解码后的音视频数据的呈现。比较知名的播放器有,vlc,mplayer。
后期的处理
(1)存储
对于音视频文件后期的处理,笔者将其分为两大类,一类是音视频文件的存储。这里主要涉及到的就是视频文件的封装格式,常见的有FLV,MP4,RMVB,MKV等。
(2)处理
关于处理,一般是指根据音视频文件提取信息,如人脸识别,如边缘检测等技术,比较有知名度的就算OpenCV了。除此之外,还有针对视频的游戏额处理,比如加字幕,加个滤镜等等功能。这一部分,使用OpenCV也可以,更多的我们可以用FFmpeg的AVFilter模块去实现。
未来
有人说,在计算机的世界中,人类的通信到视频这一个层级就已经截止了。也许可能真的如此吧,但是随着5G技术的不断成熟和落地,未来视频在空间上的扩展依然有很大的想象空间。VR/MR/AR在未来一定也是大有所为的空间和战场。