视频编码指的是通过特定的压缩技术将一种视频格式文件转换成另一种视频格式文件的过程。
常见的视频编码:
- MPEG类
MPEG1(VCD等使用),MPEG2(DVD等使用),MPEG4(DivX,XviD是它的变体),MPEG4 AVC等 - H.26x类
H.261, H.262, H.263, H.263+, H.263++, H.264, H.265
常见的音频编码:
- MPEG Audio Layer 1/2,MPEG Audio Layer 3(即MP3), MPEG-2 AAC, MPEG-4 AAC
- AAC:有损压缩格式
- APE:无损压缩格式
- FLAC:无损压缩格式
- AC3,Audio Coding Version 3,广泛用于5.1声道
Android中有一些多媒体播放组件:
- MediaPlayer:播放控制
- MediaCodec: 音视频编解码
- AudioTrack:音频播放
iOS中也一些多媒体播放组件:
- AVPlayer:播放控制
- VideoToolBox:音视频编解码
- AudioToolBox:音频播放
常见的多媒体框架:
- FFmpeg:这是一个被广泛用于音视频开发中的多媒体解决方案,而不是框架
- VLC: Video LAN Client 它是一个开源的跨平台多媒体播放器和框架
- GStreamer:构建流媒体应用的开源框架
DTS与PTS的意思
- DTS,即Decode Time Stamp,这指的是读入内存中的比特流开始被送入解码器中进行解码的时间戳,就是说从这个时间开始解码。
- PTS,即Presentation Time Stamp,这指的是解码后的视频帧开始被显示在屏幕上,就是说从这个时间开始可以看到画面
I,P,B帧
- I帧,这是一个关键帖,之所以说它关键是因为这一帧的画面是完整的,解码时,只需要本帧的数据就可以完成。
- P帧,它没有完整的画面数据,P帧记录了与前一个关键帧(I帧)或P帧的差别,因此在解码时,需要用之前缓存的画面叠加上本帧定义的差别生成最终的画面。
- B帧,它也没有完整的画面数据,B帧记录了本帧与前后帧的差别,解码时要用到之前的缓存的画面,还要用到解码之后的画面,通过前后画面数据与本帧数据的叠加取得最终画面。
- 所以B帧的压缩率是最高的,P帧次之,I帧压缩率最小。