多媒体视频文件组合方式
一、视频的封装:
音视频文件 = (音频流+视频流)*同步信息;
封装格式:文件扩展名----.mp4/.avi/.flv/.mkv等;
实现方式:音频信号和视频信号通过某种标准格式进行服用,生成封装格式;
二、视频文件常见封装格式及对应的音视频流格式:
一个完整的多媒体文件是由音频和视频两部分组成的,H264、Xvid等就是视频编码格式,MP3、AAC等就是音频编码格式,字幕文件只是附加文件。
要将视频编码和音频编码打包成一个完整的多媒体文件,可以有不同的方式,这种方式便是所谓的封装方式,不同的封装方式有不同的后缀。由于有些封装方式具有很强的灵活性,它可以把各种不同的音视频文件打包成一个文件,因此会出现这么一种情况,虽然文件后缀是相同的,但有些文件可以正常播放而有些却不能播放,毕竟任何一种播放软件都不是万能的。部分先进的封装方式还可以同时封装多个音频编码文件,甚至同时封装进字幕文件,如MKV (MKV文件可以做到一个文件包括多种语种发音,多语字幕以适合不同的人观看)封装方式。
封装格式 | 视频流编码格式 | 音频流编码格式 |
AVI | Xvid | MP3 |
AVI | Divx | MP3 |
Matroska(后缀就是MKV) | Xvid | MP3 |
Matroska(后缀就是MKV) | Xvid | AAC |
Matroska(后缀就是MKV) | H264 | AAC |
MP4 | Xvid | MP3 |
MP4 | H264 | AAC |
3GP | H.263 | AAC |
flv | H.263 | AAC |
f4v | H.264 | AAC |
表1:多媒体视频文件组合方式
封装格式(也叫容器):所谓封装格式就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中,就是说仅仅是一个外壳,或者把它当成一个放视频轨和音频轨的文件夹也可以。说通俗点,视频流媒体相当于饭,而音频流媒体相当于菜,封装格式是选择什么样的容器(碗或锅),用来盛放某种视频流和音频流的组合。
封装容器 | 视频流编码格式 | 音频流编码格式 | Flash Player | HTML5的video控件 | PC端player | 手机端player | ios player |
AVI | Xvid | MP3 | 不支持 | 不支持 | 支持 | 不支持 | 不支持 |
AVI | Divx | MP3 | 不支持 | 不支持 | 支持 | 不支持 | 不支持 |
MKV | Xvid | MP3 | 不支持 | 不支持 | 支持 | 不支持 | 不支持 |
MKV | Xvid | AAC | 不支持 | 不支持 | 支持 | 不支持 | 不支持 |
MKV | H.264 | AAC | 不支持 | 不支持 | 支持 | 不支持 | 不支持 |
MP4 | H.264 | AAC | 支持 | 支持 | 支持 | 支持 | 不支持 |
3GP | H.263 | AAC | 不支持 | 不支持 | 支持 | 不支持 | 不支持 |
3GP | H.264 | AAC | 支持 | 不支持 | 支持 | 不支持 | 不支持 |
FLV | Sorenson Spark | MP3 | 支持 | 不支持 | 支持 | 不支持 | 不支持 |
FLV | On2 VP6 | MP3 | 支持 | 不支持 | 支持 | 不支持 | 不支持 |
FLV | H.264 | AAC | 支持 | 不支持 | 支持 | 不支持 | 不支持 |
TS | H.264 | AAC | 不支持 | 支持 | 支持 | 不支持 | 支持 |
表2 不同封装格式的视频播放参照表
从上表的分析结果能够看到,大部分的播放器产品对于H.264+AAC的MP4编码格式支持最好,但是MP4也有很多的缺点,比如视频header很大,影响在线视频网站的初次加载时间,为了降低头部体积,需要进行视频本身的物理分段等等,所以很多在线视频网站在带宽耗费的压力下,主要选择的是adobe公司提供的FLV或F4V, FLV是流媒体封装格式,可将其数据看为二进制字节流,其字节编码格式为BigEndianUnicode。总体上看,FLV包括文件头(File Header)和文件体(File Body)两部分,其中文件体由一系列的Tag及Tag Size对组成。
所以,为了能够提供各类设备的在线视频播放需求,对于在线视频流媒体服务,提出了很多需求,对于早期建立的视频网站(土豆,优酷,ku6等)都只提供一种视频流媒体格式(FLV)的支持,我们称之为单一的流媒体服务架构,
1、码流总体结构:
h264的功能分为两层,视频编码层(VCL)和网络提取层(NAL)。H.264 的编码视频序列包括一系列的NAL 单元,每个NAL 单元包含一个RBSP。一个原始的H.264 NALU 单元常由 [StartCode] [NALU Header] [NALU Payload] 三部分组成,其中 Start Code 用于标示这是一个NALU 单元的开始,必须是"00 00 00 01" 或"00 00 01"。
其中RBPS有分为几种类型:
NAL的解码单元的流程如下:
2、 NAL Header:
占一个字节,由三部分组成forbidden_bit(1bit),nal_reference_bit(2bits)(优先级),nal_unit_type(5bits)(类型)。
forbidden_bit:禁止位。
nal_reference_bit:当前NAL的优先级,值越大,该NAL越重要。
nal_unit_type :NAL类型。参见下表
几个例子:
封装格式的主要作用是把视频码流和音频码流按照一定的格式存储在一个文件中。现如今流行的封装格式如下表所示:
主要封装格式一览
名称 | 推出机构 | 流媒体 | 支持的视频编码 | 支持的音频编码 | 目前使用领域 |
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下载影视 |
由表可见,除了AVI之外,其他封装格式都支持流媒体,即可以“边下边播”。有些格式更“万能”一些,支持的视音频编码标准多一些,比如MKV。而有些格式则支持的相对比较少,比如说RMVB。
见格式
编辑
AVI:微软在90年代初创立的封装标准,是当时为对抗quicktime格式(mov)而推出的,只能支持固定CBR恒定比特率编码的声音文件。
MKV:万能封装器,有良好的兼容和跨平台性、纠错性,可带 外挂字幕。
MOV:MOV是Quicktime封装。
MP4:主要应用于mpeg4的封装 。
RM/RMVB:Real Video,由RealNetworks开发的应用于rmvb和rm 。
TS/PS:PS封装只能在HDDVD原版。
WMV:微软推出的,作为市场竞争。
编辑
AVI:可用MPEG-2, DIVX, XVID, WMV3, WMV4, WMV9, H.264
WMV:可用WMV3, WMV4, WMV9
RM/RMVB:可用RV40, RV50, RV60, RM8, RM9, RM10
MOV:可用MPEG-2, MPEG4-ASP(XVID), H.264
MKV:可用所有视频编码方案
1,RTMP协议
(1)是流媒体协议。
(2)RTMP协议是 Adobe 的私有协议,未完全公开。
(3)RTMP协议一般传输的是 flv,f4v 格式流。
(4)RTMP一般在 TCP 1个通道上传输命令和数据。
2,RTSP协议
(1)是流媒体协议。
(2)RTSP协议是共有协议,并有专门机构做维护。.
(3)RTSP协议一般传输的是 ts、mp4 格式的流。
(4)RTSP传输一般需要 2-3 个通道,命令和数据通道分离。
3,HTTP协议
(1)不是是流媒体协议。
(2)HTTP协议是共有协议,并有专门机构做维护。
(3)HTTP协议没有特定的传输流。
(4)HTTP传输一般需要 2-3 个通道,命令和数据通道分离。
转码缺点:
由于音视频转换格式过程复杂、耗时较多,而且还会引起音视频质量下降,所以对不同的音视频文件格式选择不同的流媒体传输协议比较好。
一、视频的解码过程:
视频文件是将已经编码压缩好的视频流和音频流按照一定的格式放到一个文件进行封装的,(比如.avi,.flv,.mkv,.mp4就是视频文件的封装格式)。要想播放这些视频,就要将音视频压缩码流从这些封装格式文件中获取出来,然后再进行解压、解码成另外一种格式的文件(比如:最原始的音频pcm编码格式的语音采样数据;原始的YUV/RGB编码格式的视频像素数据),再通过变换还原成为声音信号或视频,通过音响或显示器播放。
以下为.FLV格式的视频文件解码流程图: