转自http://www.cnblogs.com/arccosxy/p/3478724.html
codec:表示编解码,CODEC = Code + Decode
使用codec的原因:由于视频文件很大,所以需要进行压缩(code)它,再存储起来,要播放的时候进行解压缩(decode),这个就是牺牲时间来换很大的空间。
编码器作用: 原视频文件(很大) --> 编码器 --> 编码后的视频文件
解码器作用: 编码后视频文件(相对小) -> 解码器 --> 原视频文件(大)
Container:表示一个文件(格式),如.flv与.mkv是两种不同的容器
flv包含两种stream,一种是音频流,另一种是视频流
mkv的话包含3种流:音频流、视频流 和 字幕流
demux/mux:解复用/复用
demux:使用解复用器(demuxer)将不同的流按照某种文件的规则从那文件中解析出来
mux:使用复用器(muxer)将不同的流按照某种文件的规则放入容器(生成了某种文件)
每个不同的容器都有不同的规则来整合流,常见的容器有.mkv、.rm、.flv、.mp4等,那么针对不同容器,就应该有不同的demuxer来进行demux操作了
Packets:它包含了一段可以被解码成最后操作的原始帧的数据。
每个包包含完整的帧或对于音频来说是许多格式的完整帧。(此处本人纠正一下,包里面也有可能不是完整的帧,例如可能帧结尾在下一个包里)
Frame:一帧相当于1张图片(encoder),一般视频1s包含25帧
那么这样就比较清晰:我们需要得到容器中的音频流,找出里面的帧,使用解码器(decoder)将帧还原,然后再去播放,也可以再使用另一个编码器(encoder)压缩成另一种格式的帧(这个就是所谓的格式转换)