视频播放器原理
步骤:
解封装格式, 音频解码 + 视频解码 ,音视频同步 ;
码流这些数据是不能直接显示的,必须解码成显示器可以显示的格式。YUV数据和PCM数据分别是视频和音频数据。
封装格式
mp4、rmvb、flv、avi、ts 。
MPEG-4是一套音频、视频信息的压缩编码标准。
AVI 压缩标准可以任意选择,现在用的少了,都向mp4和mov转。
FLV 流媒体格式,看视频时常用到
作用
视频码流和音频码流按照一定的格式存储在一个文件中。封装格式是容器。
视频编码格式
H.264 , MPEG2 , VC-1,
H.264 当前主流最好的,压缩大,跳帧seek需要关键帧。
wmv,有运动补偿
mjpeg,压缩率低,每一帧都是完整的图像,好多录像机的原始视频是这个格式。
视频都是有损压缩因为太大了。
作用
将视频像素数据压缩成视频码流,从而降低视频的数据量。工具:Elecard Stream Eye。
主流是H.264。是视频的核心,直接影响清晰,带宽,存储。
NALU,
I帧,P帧,B帧 ,体积依次增大, P帧,B帧有运动矢量。
I帧全部信息,P帧前参考,B帧 前后参考。
音频编码格式
MP3 , AAC , 这两个都是有损压缩
ape 是无损压缩的格式,
这里提一下无损压缩,zip,rar压缩文件格式都是无损压缩,因为还原回来要是完全能用的文件。
AC-3
作用
将音频采样数据PCM等,压缩成音频码流,从而降低音频的数据量。
在音视频里作用不是很大,因为它占用空间小。
wav格式是未经压缩的音频。数据量也不大30M一首歌。
AAC 是最先进的视频编码,声道特别多一半用于电影。压缩的小,取代mp3。
视频像素数据
YUV420P , RGB
作用
保存了屏幕每个像素的像素值。体积特别大。
音频采样数据
PCM
作用
保存了音频中每个采样点的值。
采样率为44.1千赫兹。
FFmpeg
使用FFmpeg作为内核的视频播放器。
FFmpeg.exe
ffplay.exe
FFmpeg基于命令行,无界面操作复杂,但更灵活,方便批处理。开源。
视频编解码知识
解码
VC开发
拷贝FFmpeg开发文件
头文件 *.h 拷贝到项目文件夹的include子文件夹下。
导入库文件 *.lib 拷贝到项目文件夹的lib子文件夹下
动态库文件 *.dll 拷贝纸项目文件夹下。
ffmpeg八大类库
avcodec :编解码,最重要的库。
avformat : 封装格式处理。
avfilter : 滤镜特效处理。
avdevice : 各种设备的输入输出。
avutil : 工具库,其他库都需要这个库的支持。
postproc : 后加工
swresample :音频采样数据格式转换
swscale :视频像素数据格式转换。
播放过程
视频文件 ---> YUV ----> 屏幕
使用ffmpeg把视频文件转化为YUV,使用SDL把YUV渲染到屏幕。