目录

音视频播放器工作原理

音视频播放器工作原理

参考博客:

播放器播放流程

网络文件:解协议,解封装,解码音视频,音视频同步;本地文件则没有解协议。

https://i-blog.csdnimg.cn/blog_migrate/990e393158cbc436c17748f7420399b7.png

解协议:将Http等流媒体协议传输的文件解析为标准的封装格式数据。如将RTMP协议传输的数据,经过解析操作后输出为FLV格式的数据。

解封装(解复用):将输入的封装格式的数据,分离为音频流压缩编码数据和视频流压缩编码数据,即:分离信道。

解码:将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。通过解码,压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV420P,RGB等等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据。

音视频同步:根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。

如何将声音转化为数字流呢?

音频数据的承载方式最常用的是脉冲编码调制,即PCM。

在自然界中,声音是连续不断的,是一种模拟信号,那怎样才能把声音保存下来呢?那就是把声音数字化,即转换为数字信号。

我们知道声音是一种波,有自己的振幅和频率,那么要保存声音,就要保存声音在各个时间点上的振幅。

而数字信号并不能连续保存所有时间点的振幅,事实上,并不需要保存连续的信号,就可以还原到人耳可接受的声音。

根据奈奎斯特采样定理:为了不失真地恢复模拟信号,采样频率应该不小于模拟信号频谱中最高频率的2倍。

根据以上分析,PCM的采集步骤分为以下步骤:

模拟信号->采样->量化->编码->数字信号

https://i-blog.csdnimg.cn/blog_migrate/420b834e70708112f5515ce902f5f752.webp?x-image-process=image/format,png

采样率,即采样的频率。上面提到,采样率要大于原声波频率的2倍,人耳能听到的最高频率为20kHz,所以为了满足人耳的听觉要求,采样率至少为40kHz,通常为44.1kHz,更高的通常为48kHz。

采样位数,波形振幅在模拟信号上也是连续的样本值,而在数字信号中,信号一般是不连续的,所以模拟信号量化以后,只能取一个近似的整数值,为了记录这些振幅值,采样器会采用一个固定的位数来记录这些振幅值,通常有8位、16位、32位。

编码:将幅度值转化为一系列0和1进行存储,最后得到的数据就是数字信号:一串0和1组成的数据

https://i-blog.csdnimg.cn/blog_migrate/39bbb1b75d1e1416f1641677b88c1c45.webp?x-image-process=image/format,png

通常我们采用的是脉冲代码调制编码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码

PCM中的声音数据没有被压缩,如果是单声道的文件,采样数据按时间的先后顺序依次存入。如果是双声道的文件,采样数据按时间先后顺序交叉的存入,比如:左声道数据、右声道数据、左声道数据、右声道数据…。

在Android中,常用MediaPlayer作为音频播放器,它提供了更好的封装,但它内部实现还是使用了AudioTrack。AudioTrack被用于PCM音频流的播放。

系统提供的Visualizer可以实时获取播放音乐的频率,提供波形数据和FFT后的数据。

而pcm数据一般由播放器提供。

公式:数据量Byte=采样频率Hz×(采样位数/8)× 声道数× 时间s