参考:https://blog.csdn.net/leixiaohua1020/article/details/47068015
百度网盘:链接:https://pan.baidu.com/s/1e_hzwXNwnyjCcC_Anm949Q 提取码:gi6t
第一节:视音频基础知识
前言
基于 FFmpeg + SDL 的视频播放器的制作是用FFmpeg作为视频解码工具, SDL作为YUV等像素显示工具,两者整合实现一个播放器,实现“H.264->YUV->电脑屏幕”。
基础知识框架:
• 前言
• 视频播放器原理
• 封装格式(MP4,RMVB,TS,FLV,AVI)
• 视频编码数据(H.264,MPEG2,VC-1)
• 音频编码数据(AAC,MP3,AC-3)
• 视频像素数据(YUV420P,RGB)
• 音频采样数据(PCM)
• 练习
1.视频播放器原理
播放一个视频文件的流程:
1.封装格式数据:就是把音频和视频文件封装成一个文件,常见有AVI、FLV、MP4等
2.解封装:要分别处理音频和视频文件,就要解封装
3.音频压缩数据:解封装后的音频压缩数据(ACC、MP3..)
视频压缩数据:解封装后的视频压缩数据——视频流(码流)(H.264、MPEG2...)
4.音频解码:解码成音频采样数据
视频解码:解码成视频原始数据
5.音频采样数据(音频原始数据):PCM.....
视频像素数据(视频原始数据):YUV(像素采样点)
6.视音频同步:数据在设备同步
• 常用播放器
▫ 跨平台系列(非DirectShow框架)
VLC, Mplayer, ffplay……
▫ Windows系列(DirectShow框架)
完美解码,终极解码, 暴风影音……
• 信息查看工具
▫ 综合信息查看
MediaInfo(在网盘有)
▫ 二进制信息查看
UltraEdit
▫ 单项详细分析
封装格式: Elecard Format Analyzer
视频编码数据: Elecard Stream Eye
视频像素数据: YUV Player
音频采样数据: Adobe Audition
2.封装格式
作用:视频码流和音频码流按照一定的格式存储在一个文件中。
封装格式分析工具:Elecard Format Analyzer(在网盘中有)
下面列举两个:
使用Elecard Format Analyzer查看封装格式:
3.视频编码数据(在视音频技术中举足轻重)
作用:将视频像素数据(RGB, YUV等)压缩成为视频码流,从而降低视频的数据量。
查看视频编码分析工具:Elecard Stream Eye
主流是H.264
H.264格式简介:
数据由大小不固定的NALU构成,就是 1个NALU存一个画面
最常见的情况下, 1个NALU存储了1帧画面的压缩编码后的数据。
H.264压缩方法
▫比较复杂。包含了帧内预测、帧间预测、熵编码、环路滤波等环节
构成。本文不对其中的算法做过多介绍。
▫可以将图像数据压缩100倍以上。
4.音频编码数据
音频编码的作用:将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。
没视频编码数据那么重要,因为所占大小不大。
现在主用AAC
5.视频像素数据
视频像素数据作用
保存了屏幕上每个像素点的像素值。
• 格式
常见的像素数据格式有RGB24, RGB32, YUV420P, YUV422P,YUV444P等。压缩编码中一般使用的是YUV格式的像素数据, 最为常见的格式为YUV420P。
• 特点
视频像素数据体积很大,一般情况下1小时高清视频的RGB24
格式的数据体积为:
3600*25*1920*1080*3=559.9GByte
PS:这里假定帧率为25Hz,取样精度8bit。
• YUV格式像素数据查看工具:YUV Player
6.音频采样数据
作用:保存了音频中每个采样点的值
特点
音频采样数据体积很大,一般情况下一首4分钟的PCM格式的
歌曲体积为:
4*60*44100*2*2=42.3MByte
PS:这里假定采样率为44100Hz,采样精度为16bit。
• 音频采样数据查看工具: Adobe Audition