音视频完整解码播放流程分析
封装格式
名称 | 推出机构 | 流媒体 | 支持的视频编码 | 支持的音频编码 | 目前使用领域 |
---|---|---|---|---|---|
AVI | Microsoft Inc. | 不支持 | 几乎所有格式 | 几乎所有格式 | BT下载影视 |
MP4 | MPEG | 支持 | MPEG-2, MPEG-4, H.264, H.263等 | AAC, MPEG-1 Layers I, II, III, AC-3等 | 互联网视频网站 |
TS | MPEG | 支持 | MPEG-1, MPEG-2, MPEG-4, H.264 | MPEG-1 Layers I, II, III, AAC, | IPTV,数字电视 |
FLV | Adobe Inc. | 支持 | Sorenson, VP6, H.264 | MP3, ADPCM, Linear PCM, AAC等 | 互联网视频网站 |
MKV | CoreCodec Inc. | 支持 | 几乎所有格式 | 几乎所有格式 | 互联网视频网站 |
RMVB | Real Networks Inc. | 支持 | RealVideo 8, 9, 10 | AAC, Cook Codec, RealAudio Lossless | BT下载影视 |
...... |
流媒体协议
名称 | 推出机构 | 传输层协议 | 客户端 | 目前使用领域 |
---|---|---|---|---|
RTSP+RTP | IETF | TCP+UDP | VLC, WMP | IPTV |
RTMP | Adobe Inc. | TCP | Flash | 互联网直播 |
RTMFP | Adobe Inc. | UDP | Flash | 互联网直播 |
MMS | Microsoft Inc. | TCP/UDP | WMP | 互联网直播+点播 |
HTTP-FLV | WWW+IETF | TCP | Flash | 互联网直播 |
HLS(http live stream) | APPLE | TCP/UDP | Flash | 互联网直播+点播 |
视频编码格式
名称 | 推出机构 | 推出时间 | 目前使用领域 |
---|---|---|---|
HEVC(H.265) | MPEG/ITU-T | 2013 | 使用较少 |
H.264 | MPEG/ITU-T | 2003 | 各个领域 |
MPEG2 | MPEG | 1994 | 数字电视 |
VP9 | 2013 | 不普及 | |
VP8 | 2008 | 不普及 | |
VC-1 | Microsoft Inc. | 2006 | 微软平台 |
...... | ...... | ...... | ...... |
音频编码格式
名称 | 推出机构 | 推出时间 | 目前使用领域 |
---|---|---|---|
AAC | MPEG | 1997 | 各个领域(新) |
AC-3 | Dolby Inc. | 1992 | 电影 |
MP3 | MPEG | 1993 | 各个领域(旧) |
WMA | Microsoft Inc. | 1999 | 微软平台 |
...... | ...... | ...... | ...... |
YUV简介
YUV定义:分为三个分量,
“Y”表示明亮度也就是灰度值,而“U”和“V” 表示的则是色度和饱和度,作用是描述影像色彩及饱和度,用于指定像素的颜色。
H.264 I,P,B帧和PTS,DTS
I frame :帧内编码帧,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。I帧可以看成是一个图像经过压缩后的产物。
自身可以通过视频解压算法解压成一张单独的完整的图片。
P frame: 前向预测编码帧,通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫预测帧;
需要参考其前面的一个I frame 或者P frame来生成一张完整的图片。
B frame: 双向预测内插编码帧,既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像,也叫双向预测帧;
要参考其前一个I或者P帧及其后面的一个P帧来生成一张完整的图片。
PTS:Presentation Time Stamp。PTS主要用于度量解码后的视频帧什么时候被显示出来
DTS:Decode Time Stamp。DTS主要是标识读入内存中的帧数据在什么时候开始送入解码器中进行解码。
在没有B帧存在的情况下DTS的顺序和PTS的顺序应该是一样的。
DTS主要用于视频的解码,在解码阶段使用。PTS主要用于视频的同步和输出.在显示的时候使用。
PCM
通常所说的音频裸数据就是PCM(Pulse Codec Modulation脉冲编码调制)
PCM数据涉及四个概念:
1、sampleFormat(采样格式):可理解为一多少字节存储声音,典型的量化格式为16bit。
2、sampleRate(采样率):这就不用说了吧,典型的采样率为44.1KHz。
3、channel(声道数):为了造成立体声效果,数字声音分为左、右两个声道。
4、比特率:对于数字音频而言,比特率是个关键概念。定义为:一秒时间内的比特数,用于衡量单位时间音频数据量的大小。
FFmpeg核心模块
libavformat
用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能;音视频的格式解析协议,为 libavcodec 分析码流提供独立的音频或视频码流源。
libavcodec
用于各种类型声音/图像编解码;该库是音视频编解码核心,实现了市面上可见的绝大部分解码器的功能,libavcodec 库被其他各大解码器 ffdshow,Mplayer 等所包含或应用。
libavfilter
filter(FileIO、FPS、DrawText)音视频滤波器的开发,如水印、倍速播放等。
libavutil
包含一些公共的工具函数的使用库,包括算数运算 字符操作。
libswresample
原始音频格式转码。
libswscale
(原始视频格式转换)用于视频场景比例缩放、色彩映射转换;图像颜色空间或格式转换,如 rgb565,rgb888 等与 yuv420 等之间转换。