本文是音视频工程师系列的第一篇文章。
学习音视频的过程中发现,网络上高质量的音视频技术博客不是很多。具有代表性的是
因为笔者是一名普通的软件开发人员,一向不喜欢高高在上或者晦涩难懂的理论,我们向来喜欢通俗易懂的东西。我认为知识的本身也应该是通俗易懂的东西。知识用晦涩难懂的东西描述出来,是对人类进步的阻碍,是知识垄断。
音视频的很多标准都是国外制定的,而且很多音视频开发基础库也是国外的,国内外技术差距是存在的。
笔者希望此系列教程能够以工程实现为出发点和落脚点,简化理论知识,化繁为简地解析音视频技术,为音视频技术的发展,为各位读者成为音视频工程师贡献一点微不足道的力量。
音视频数据内容从本质上讲,分为两种:
音视频内容包含了音视频数据和音视频参数两种信息,这两种信息打包放在一个文件中采用的格式,就叫做封装格式,也叫容器。个人觉得叫封装格式更容易理解。
目前,人们已经发明了很多种视频文件格式。当然发明这些格式并不是一拍大腿想起来的,而是在特定的使用场景下,对应的视频格式,可以更高效地存储和处理音视频数据。
由于封装格式在开发中基本上都是由库来处理,不需要我们自己封装和解析,所以可以先不做细致了解。在初学阶段的首要任务是把握音视频的整体工作框架,某些技术细节可以先放一放,后面再研究。这也是笔者建议的学习方法:学习精力分配要遵循二八定律,大部分领域中,只有大约20%的知识最重要,在这20%上面我们要花80%的时间,剩下80%不是那么重要的,只需要花20%的时间即可。
不经过压缩的音视频数据是很大的。例如:
1920x1080的RGB24图像,1秒25帧,不压缩,1小时的视频总大小约为 1920 * 1080 * 3 * 25 * 60 * 60 = 521G。 这种情况下,500G的电脑硬盘,最多只能存1个小时的电影;刷小视频会变得很卡;百度网盘128KB/s的速度下载一部电影需要一两个月.....
所以,音视频 「必须被压缩后存储或者传输」。
采用某种编码格式(即压缩格式)对音视频数据进行压缩,压缩后的音视频数据和音视频参数一起按照某种封装格式,被打包放入到音视频文件中,这样就生成了视频文件。
首先要明白采样/抽样的概念。 视频采样是指:以某一速度对物体连续拍照,不断记录物体在某一瞬间的画面。 音频采样是指:以某一速度连续记录声音在某一瞬间的震动幅度。 采样是对原事物的一种反映手段。对于采样后的音视频数据,计算机可以进行播放和加工处理。
每一个时刻拍的那张照片,就叫视频帧,它是视频的基本数据单位。
每一个时刻获取到的声音振幅,就叫PCM采样点,它是音频的基本数据单位。
了解这些基本够用了,不需要深入地去研究过多的细节。最主要的是要了解,通过采样可以将现实世界的事物反映到计算机中,变成可处理的数据。
既然音视频数据是经过采样得到的,那么我们想要播放音视频数据,就必须用到采样过程中使用到的一些参数,这样音视频数据才能正确的反应原事物的状态。
音频有三个基本参数:
上面三个是最基本的三个参数,只要知道了这三个参数,就可以将声音记录下来,而且可以播放出来。
这三个参数怎么记忆呢?按照从小到大、从少到多的逻辑记忆即可:
为什么要说网络参数呢,由于互联网的发展,音视频成为一种服务,逐渐出现在互联网上。在线看电影,刷短视频,上网课等等都已经成为了一种新的生活方式。把音视频搬到网络上,必然会有一些和网络相关的技术参数,来实现对音视频服务的控制。有如下几种:
视频有三个基本参数:
对视频基本参数,也可以采用从小到大的逻辑记忆:
视频的网络参数和音频类似,主要有:
本文主要是梳理了一下音视频中的必须了解的基本知识。笔者对本系列文章的定位是既要精简又要通俗易懂。现代社会每个人都很忙,尽量降低学习成本,才是一个优秀的教程应该做的事情,而不是把简单的东西用一些专业术语和公式把它复杂化。后面的文章会陆续在公众号及网站更新,希望大家多多关注。
本文原创发布于微信公众号Qt未来工程师。