主要给大家简单介绍一下基本的音视频知识和概念,以便大家能够更好的理解后续FFMPEG的开发流程。
一、媒体文件容器
我们通常所说的.mp4、.mp3、.aac是一种特定的文件格式,这些文件中以特定的格式来保存压缩有的音视频数据。例如通常 .mp4文件格式的组成:
头信息 + { 交错存放的音视频数据包 } + 尾信息
这里的音视频包是压缩后的数据包,在整个文件中一般是交错存放的(通常一个视频包 和 几个音频包),其中所有的视频包构成的数据我们称为一个视频数据流;所有音频包构成的的数据我们称为音频数据流。 每个视频包和音频包中有两个时间戳:PTS(显示时间戳) 和 DTS(解码时间戳),其中PTS用来标记一帧视频图像或音频显示的时刻点,DTS用来标记解码的时刻点,有了这两个时间戳,我们可以用来进行视频播放 和 音频播放的 时间同步。
当然,这个是宏观的文件格式,mp4具体的文件格式是采用一层层moov和box等进行封装组织的
1、DTS(Decoding Time Stamp):即解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。
2、PTS(Presentation Time Stamp):即显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。
3、Duration: 当前视频帧显示时长。以30FPS帧率为例,显示时长为33ms
常见的媒体文件格式有:
音视频开发学习地址:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【文章福利】:小编整理了一些个人觉得比较好的学习书籍、视频资料共享在文件里面,有需要的可以自行添加哦!~点击832218493加入(需要自取)
三、音频基础知识
音频数据在计算机中是经过采样、量化、归一化后保存为PCM数据的。PCM(Pulse Code Modulation,脉冲编码调制)音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样、量化、编码转换成的标准数字音频数据。 通常有3个参数来描述PCM数据:
1、采样率:是指每秒钟使用多少个样本来表示音频。通常采样率有:8kHz(电话)、16kHz、44.1kHz(CD)、48kHz(DVD)
2、通道数:常见的音频有立体声(stereo)和单声道(mono)两种类型,立体声包含左声道和右声道。另外还有环绕立体声等其它不太常用的类型。我们常见的mono是只有1个声道;stereo通常是2个声道。
3、样本格式:每个样本使用什么样的表达数值来进行表达,通常有8位、16位、32位,可以是浮点数,也可以是整型。
这部分详细在音频格式转换时有讲解。