视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MPEG2_TS打包AAC码流
2025-09-26 06:51:18 责编:小OO
文档
MPEG2-TS打包AAC码流:

MPEG-2系统任务包括:1、规定以包传输数据的协议,2、规定收发两端数据流同步协议,3、提供多个数据流复用和解复用协议,4、提供数据流加密协议。该系统的要点是以包形式存储与传送数据流。

    MPEG-2标准主要规定了传输流(TS)和程序流(PS)两种结构。Transport Stream(传输流),则主要 应用于实时传送的节目,比如实时广播的电视节目。Program Stream主要应用于存储的具有固定时长的节目,如DVD电影,可添加字幕等一些程序操作。二者的区别在于,TS流的包结构是定长的,而PS流的包结构是变长的。简单的说,你将DVD上的VOB文件的前面一截cut掉(或者干脆就是数据损坏),那么就会导致整个文件无法解码了,而电视节目是你任何时候打开电视机都能解码(收看)的,所以,MPEG2-TS格式的特点就是要求从视频流的任一片段开始都是可以解码的。

TS码流由于采用了固定长度的包结构,当传输误码破坏了某一TS包的同步信息时,接收机可在固定的位置检测它后面包中的同步信息,从而恢复同步,避免了信息丢失。因此在信道环境较为恶劣、传输误码较高时一般采用TS码流。

TS格式是一种较为先进的“封装格式”,BD蓝光原盘即采用TS封装,它在视频和音频打包时提供时间戳,保证了任何时间段(分离)的音画同步,TS封装支持几乎所有编码的高清视频和音轨编码。

本文的目的是将AAC编码出来的码流进行TS封装,具体过程是:AAC编码出来的码流属于基本流(Elementary Stream,ES);基本流加上PES头部信息打包形成打包的基本流PES,PES头部信息包含显示时间戳PTS和解码时间戳DTS;打包的基本流加上TS头部信息和系统信息后再分割成固定长度的包,就形成了传输流。当然也可以进一步打包成RTP以便进行网络实时传输。如下图:

 将ES流加上PES头部信息打包形成PES流,PES包的长度不是固定的,但是音频PES包一般不超过字节,视频一般一帧一个PES包,一个PES包由包起始码,包头和净荷组成,包起始码长度是固定的9个字节,PES包如下图:

其中,PES Packet Length(PES包长度)表明该PES包的具体长度(尽管该值不是固定的),该长度域占两个字节,即16bit,因此该包的最大长度是65535字节,上面已经提到,用于音频码流时,该包长不超过字节,而用于视频时一般一帧一包。有一点需要指出的是,若该值设为0,则说明该包长度无或者不规定,这个仅用于视频PES包;PES Header Length(PES包头长度)表明该PES包中PES Header Fields(包头)的长度;其余的参数,我们就不在这里赘述了,下面来介绍TS(传输流)的包结构。

MPEG2-TS包结构如下:

其中一个一个的传输包就是TS包。PES包被封装到定长的TS包(TS包头4字节,净荷184字节),过程如下:首先PES的头(包括起始码和包头)被封装到一个TS包的净荷开始部分,若该PES包长度大于184字节,则该包的剩余部分分块(每块184字节,不足的用合适大小的AF填充)打包到接下来的TS包的净荷中,若该PES包长度小于184字节,则用合适大小的AF来对齐。由此可见,PES的头一定开始于TS净荷的开始部分。

TS包的分析如下:

同步字节为固定值(0x47),在选择其他经常出现的字段时应避免与该字段发生冲突。

传输错误指示符(即误码表示)为一个标志位,置1时表示相关传输流包中至少有一个不可纠正的比特差错。

负载数据单元起始指示符(即单元起始表示)为一个标志位,在Ts净荷中包含PES时,该标志位的意义是,1表示TS包的净荷以PES的首字节开始,有且仅有1个PES包在TS包的净荷开始,0表示该TS包的净荷不以PES开始;在TS净荷中包含PSI时,1表示TS包的净荷以PSI段的第一个字节开始,反之为0。

传输加扰控制(即扰码控制)指出TS包的净荷的加扰方式,对空的包该字段为00,同时置为00也意味着不加扰,置为01为保留,置为10为采用偶密钥加扰,置为11为采用奇密钥加扰,对于PES包采用相同的指示。

传输优先级(即优先权标志)置1时表示PID相同的包中有更高的优先级。

PID为13比特,指示该包净荷中存储的数据类型,PID为0x0000被保留用于节目相关表(PAT),PID为0x0001被保留用于条件接收表(CAT),PID 为0xO002~0x001F也被保留用于PSI和SI,PID为0xlFFF被保留用于空的TS包。

适应域控制(即AF控制)指TS包头后面是否有适应域,该字段置00为保留,标准解码器会丢弃该包,置为01表示没有适应域仅有有效负载,置为10表示仅有适应域没有有效负载,置为11表示跟有有效负载的适应域,如果有适应域则位于TS包净荷的开始部分。

连续性计数器(即循环计数器)为4个比特,随着每个具有相同PID值的包而递增,达到最大值回卷为0,但是当适应域控制为00和10时该字段不递增。数据字节为来自PES或PSI和SI的连续字节的数据或填充字节,当PID为0xlFFF空包时可以是任意值。

    TS包中净荷所传输的信息包括两种类型:1)视频、音频的PES包以及辅助数据;2)描述节目复用信息的节目映射表(PAT:Program Associate Table)以及节目映射表(PMT:Program Map Table)、其他PSI的表格和SI的表格。

TS(传输流)在IP网上传输,为保证可靠性,紧接着数据需要打成RTP包;待传输的RTP包要以IP形式在网络上传输,需要将RTP包封装成UDP包,然后在将UDP包打成IP包发送到网络上;客户端在接收到载有视频信息的IP数据后,去掉IP头送往UDP层;再UDP层去掉UDP头,解出RTP信息:解析RTP包,得到TS数据流。

但是,关键问题是,前面解包各个层次得到一些长度信息对于得到TS流中PES的长度信息没有意义,因为TS包的长度是固定的,就是188个字节,所以IP、UDP、RTP包的长度信息起不到作用。TS长度一定,虽然其中有没有适应域我们可以解包TS头部信息得到,但是这个适应域多长,我们不可得知,但是由于我们要传输的是音频码流,而音频码流的PES包一般不超过字节,因此我们可以推断,一般情况下,这个适应域是肯定存在,但是长度不确定。由于适应域的长度不确定,因此我们无法求得PES包的长度,如下:

PES包的长度=188字节-TS包头长度(4字节)-适应域长度(未知)

即便我们知道PES包的长度,我们也无法进一步去求AAC码流的长度,因为:

AAC码流长度=PES包的长度-PES包起始码长度(9字节)-PES包头域长度(未知)

而上式中,PES包头域的长度不是固定的,它的值可以根据PES起始码中的PES Header Length来得到,但由于不允许解PES包,因此这个值无法取得,因而,AAC码流的长度是无法计算的。

当然,如果可以得到AAC码流长度,那我们就可以进一步判断该码流是语音帧还是静音帧了。下载本文

显示全文
专题