Android播放器-音视频基础知识

MPEG-4

是一套用于音频、视频信息的压缩编码标准

MPEG-4 Part 14:MPEG-4文件格式
MPEG-4 Part 15:AVC文件格式
MPEG-4 Part 10:H264(AVC)

注:用来Mp4文件不等同于使用了MPEG-4整套标准

常用封装格式

AVI 压缩标准可任意选择
FLV ts 流媒体格式
ASF
MP4

常用编码格式

视频:
H264(AVC Part10)
wmv
XviD(Part 2)
mjpeg (相对应帧内编码)
音频:
aac(有损压缩)
MP3(有损压缩)
ape(无损压缩)
flac()

封装格式和编码格式

1、封装格式(格式头)
mp4(Part 14) box音视频信息 (编码和格式关键帧索引)
flv
mov
avi
2、视频编码帧
h264 mpeg-4-10
nal vcl sps pps I B P
解码出:YUV => 转换为RGB显示(转换开销很大)
软解码主要耗电严重,不过性能好兼容性好
3、音频编码帧
AAC
APE、FLAC无损压缩
PCM原始音频
解码为PCM FLT(float 一个浮点)=> 转为声卡支持的S16播放(short)

像素格式

BGRA RGBA ARGB32 RGB32 YUV420
10bit的颜色,但大多数显示器不支持,还是要转换为8bit的来显示
算法都是基于YUV,感光芯片和显示器都是基于RGB

R=Y+1.4075*(V-128)
G=Y-0.3455*(U-128)-0.7169*(v-128)
B=Y+1.779*(U-128)

3x3RGB 会补齐

Y 表示明亮度,也就是灰度值
而U和V表示的则是色度

P平面存储方式,先全是Y再全是UV

PCM音频参数

采样率 sample_rate 44100(CD)
通道channels(左右声道)
样本大小(格式)sample_size
format:FMT
AV_SAMPLE_FMT_S16
AV_SAMPLE_FMT_FLTP(float 32位)

样本类型planar

AV_SAMPLE_FMT_S16在内存的格式就为:
c1, c2, c1, c2, c1, c2....
AV_SAMPLE_FMT_S16P(平面格式)在内存的格式就为:
c1,c1,c1... c2,c2,c2...

MP4格式

ftyp moov mdat
ftyp:file type 表明文件类型
moov:metadata container 存放媒体信息的地方
mdat:media data container 具体的媒体数据
moov{
mvhd:movie header 文件总体信息,如时长,创建时间
trak:track or stream container存放视频/音频流的容器
}
trak{
tkhd:track header track的总体信息,如时长,宽高等
mdia:track media information container
}
mdia{
mdhd:media header 定义TimeScale,track需要通过TimeScale换算真实时间
hdlr:handler 表明本track类型,指明是video/audio/还是hint
minf:media information container 数据在子box中
}
minf{
stbl:sample table box 存放时间/偏移的映射关系表,数据在子box中
}
stbl{
stsd:sample descriptions
stts:(decoding) time-to-sample “时戳-sample序号”的映射表
stcs:sample-to-chunk sample和chunk的映射表,这里的算比较巧妙
stsz:sample size 每个sample的大小
stz2:sample size 另一个sample size的存储算法,更节省空间
stss:sync sample table 可随机访问的sample列表(关键帧列表)
stco:chunk offset 每个chunk的偏移,sample的偏移可根据其他box推算出来
co64:64-bit chunk offset
}

H264/AVC视频编码标准

网络抽象层面NAL 格式化数据并提供头信息
视频编码层面VCL 视频数据的内容

NAL单元

因此我们平时的每帧数据就是一个NAL单元(sps和pps除外)
在实际的h264数据帧中,往往帧前面带有00 00 00 01或00 00 01分隔符
一般来说编码器编出的首帧数据未pps与sps,接着为I帧

GOP

I B B P B B P B B P B B P B P
编码顺序 1 3 4 2 6 7 5 9 10 8 12 13 11 15 14
显示顺序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
DTS 解码时间 1 3 4 2 6 7 5 9 10 8 12 13 11 15 14
PTS 显示时间 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

打赏