什么是音视频流媒体技术?
这里的音视频流媒体指的是音视频编码解码封装技术,主要解决的是如何将一段音频和视频利用某些手段进行保存或播放。举例古人将一个场景刻录在石壁上,那么石刻刀就是工具,石壁就是存储介质。那么回到现在,编程语言便是工具,磁盘便是存储介质。
为什么音视频编解码采用的编程语言是C/C++,而不是其他语言?
在甜狗的理解里,所有的编程语言都是共通的,理论上使用任何一种语言都可以进行音视频流媒体的开发,只不过C/C++更接近底层,相比其他语言,其效率会高很多,这意味着可以快速处理和传输大量数据,减少延迟,提供更流畅的播放体验。
而且C/C++还支持内存管理控制,可以精确控制内存分配和回收,优化资源使用,避免垃圾回收带来的延迟。
音视频文件一般是怎么存储的,或者说其存储结构是怎么样?
谈到存储结构,我一般会先谈音频和视频的最基础的存储方式,注意音频和视频在这里是分开的,这也是为了方便理解音视频的封装格式,因为音频和视频本质上是两种东西,而大家常见的MP4文件,则是对音频和视频的一种封装格式,就像一个礼品箱把多种不同的礼品放进去,这里的”礼品“可以分很多种,比如音频、视频、弹幕、字幕。
当然把这个礼品拿出来,会发现它还包着一层膜,这层膜便是它的编码格式。而视频常见的编码格式是H264,音频常见的编码格式是AAC,当我们把这层膜拆开,会发现它都有最基础的东西,视频是像素点(像素也分RGB和YUV以及排列,这里先不谈),而音频则是最基础的数字音频存储格式(PCM)。
如图:
上面所展示的是mp4文件中的结构,可以看到这是条状展示的,因为文件就是可以看作一串二进制的数字。有个细节便是可以看到音频和视频的包是分开存储的,这是因为在计算机读取文件的时候不能一下子读取完所有数据(一下子读取会消耗很多计算机资源),所以一般是分段读取,为了能使音频和视频能以相对同步的读取,所以把音频和视频切分成很多段,并把这些段以交错的方式存储在文件里。
然而并不是所有段都是音频和视频交错存储的,这取决于音频和视频的包数量,当其中一个读取完了,那么后面的包则都是剩下没读完的音频或视频。