视频播放器原理
音频编码基础知识
视频编码基础知识
从这篇开始我们进入ffmpeg系列的学习实践,作为开篇,我们先来了解下音视频相关的基础知识。
雷神的这张图很清晰的说明了视频播放的流程:
解封装—》音/视频解压缩—》音视频编码—》音视频裸数据PCM和YUV —》音视频同步处—》音频播放、视频渲染
对声音将模拟信号转为数字信号,要经过三个步骤:采样、量化、编码
人耳能够听到的声音的频率范围是20Hz~20KHz。根据奈奎斯特采样原理,按比声音最高频率高2倍以上的频率对声音进行采样,所以采样率一般是44100Hz(略大于20KHz x 2),即1秒采用44100次。
采样后的数据用二进制信号来表示,一般有8比特、16比特和32比特等。
音频的裸数据格式是脉冲编码调制数据(PCM:Pulse Code Modulation)
描述pcm需要量化格式、采样率以及声道数
我们以常见的值为例来算下对应的比特率和存储空间大小。
量化格式为16比特(2个字节)、采样率为44100HZ、声道数为2,
则对应的比特率= 2x44100x2 x8/1024= 1378kbps
如果是4分钟的音频,对应的文件大小为
1378x60x4/8/1024 = 40MB
这个还是比较大的,为了减少存储空间和传输的流量,需要进行压缩编码,,常见压缩编码有mp3、aac、wav等编码方式。其中wav是在pcm的基础上添加44个字节的头,属于无损压缩、而mp3和aac属于有损压缩,特别是aac压缩率更大些,一般用于低于128Kbit/s以下的音频编码。
本文福利, 免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓
音频采样数据的可以通过Adboe Audition来查看
可以看到我们看到的音频频谱信号,放大后及时一个个采样值。
视频是由一幅幅图像组成的,图像可以由RGB组成。对于1080x1920的像素的手机而言,一张rgba8888的图像占用的内存空间大小是
1080x1920x4 = 7M。
如果是RGB565的方式对应的占用内存是
1080x1920x2 = 3.5M
这也是一张bitmap在内存中在用的大小,由此可见一张图的裸数据是比较大的。图像的压缩常见的有JPEG、PNG。其中JPEG的压缩率能够达到7倍。
但是这种压缩不能直接应用于视频压缩,因为对于视频而言,不仅仅要考虑帧内编码,还要考虑帧间编码,对于视频裸数据,更多的是使用YUV来表示,相比RGB最大的优点是占用极少的频宽(eg yuv420p使用一个字节表示)
YUV,之前的黑白电视只有Y没有UV,YUV彩色模式也兼容了之前的黑白模式。其中Y是是指亮度、UV是色调、饱和度,分别用用Cr和Cb来表示色调和饱和度,其中Cr反应的是输入信号的红色信号与RGB信号亮度之间的差异。Cb反应的是输入信号的蓝色信号与RGB信号亮度之间的差异。
查看视频文件的常用工具有mp4info可以很直观的查看,mp4格式的结构
Elecard StreamEye 在分析视频编码数据
可以很方便的查看IPB帧的信息。
H264Visa可以查看对应每一帧图片的YUV数据
当然ffmpeg提供的ffprobe也是非常强大,可用于视频和音频数据的分析,这块我们下一篇在学习时间ffmpeg常用命令时再一起介绍。
封装格式的作用是将视频码流和音频码流按照一定的格式存储在一个文件(容器)中。
常见的视频封装格式有MP4、MOV、AVI、TS等。
可以通过Elecard Format Analyzer或者ffprobe分析。
I帧即关键帧,可以看作一个图像经过压缩后的产物,压缩比和JPEG差不多,I帧的压缩可以去掉空间的冗余信息
P帧是向前预测编码帧,压缩比可以达到20:1
B帧是双向预测编码帧,即考虑源图像前面的已编码帧,也要考虑图像序列后面的已编码帧之间的冗余信息,压缩比可以达到50:1
GOP是两个I帧之间形成的一组图片(Group Of Picture)、通过设置gop_size可以指定两个I帧之间的帧数目
DTS(Decoding Time Stamp)用于视频的解码,PTS(Presentation Time Stamp)用于解码阶段音视频的同步和输出。在没有B帧的情况下DTS和PTS是一致的。
感谢你的阅读
下一篇我们学习实践ffmpeg的常用命令
本文福利, 免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓