概要
对于ISO/IEC 14496-3也就是MPEG-4的音频传输流,14496-3中定义了一个两层的实现:复用层和同步层。
复用层(Low-overhead MPEG-4 Audio Transport Multiplex: LATM)负责复用多路MPEG-4音频负载以及负载中的AudioSpecificConfig()元素。
同步层主要通过LOAS定义。同步层音频流(Low Overhead Audio Stream :LOAS)定义了用于MPEG-4音频自同步的语法。
同步层
同步层提供了通过定义三类复用元素来保证自同步的机制,进而生成LOAS:
•AudioSyncStream()
• AudioSyncStream() : 通过同步字0x2B7对齐,并提供复用层元素AudioMuxElement()长度信息。语法如下:
Syntax <span style="white-space:pre"> </span>No. of bitsMnemonic
AudioSyncStream()
{
while (nextbits() == 0x2B7) { /* syncword */<span style="white-space:pre"> </span>11 bslbf
audioMuxLengthBytes; <span style="white-space:pre"> </span>13 uimsbf
AudioMuxElement(1);
}
}
两个同步字(0x2B7)之间的最大字节距离应该为8192Bytes。此类自同步语法用于底层传输层不提供任何帧同步机制。
如图所示,AudioSyncStream的复用层采用AudioMuxElement。(下文介绍)
•EPAudioSyncStream()
对于易发生错误的信道,使用相对更容易纠错的EPAudioSyncStream()。该语法格式使用16位长同步字(0x4de1)。与AudioSyncStream()类似,EPAudioSyncStream()提供4位长的复用层EPMuxElement()长度信息。
对于纠错,EPAudioSyncStream()语法提供了基于FEC头部奇偶校验字节(16位长)。
EPAudioSyncStream()封装EPMuxElement()作为复用层元素。
Syntax <span style="white-space:pre"> </span>No. of bits Mnemonic
EPAudioSyncStream()
{
while (nextbits() == 0x4de1) { /* syncword */ <span style="white-space:pre"> </span>16 bslbf
futureUse; <span style="white-space:pre"> </span>4 uimsbf
audioMuxLengthBytes;<span style="font-family: Arial, Helvetica, sans-serif;"> </span>13 uimsbf
frameCounter; <span style="white-space:pre"> </span><span style="font-family: Arial, Helvetica, sans-serif;"> </span><span style="font-family: Arial, Helvetica, sans-serif;">5 uimsbf</span>
headerParity; <span style="white-space:pre"> </span>18 bslbf
EPMuxElement(1, 1);
}
}
AudioPointerStream()
AudioPointerStream() 用于下层传输流使用固定帧同步机制的情况。这种情况下,传输帧无法使用变长复用元素。AudioPointerStream()使用一个指针域来指明下一个复用元素的起始位来实现变长负载的传输帧为常量。
Syntax <span style="white-space:pre"> </span>No. of bits Mnemonic
AudioPointerStream (syncFrameLength )
{
while ( ! EndOfStream ) {
AudioPointerStreamFrame ( syncFrameLength );
}
}
AudioPointerStreamFrame( length )
{
audioMuxElementStartPointer; <span style="white-space:pre"> </span>ceil(log2(length)) uimsbf
audioMuxElementChunk; <span style="white-space:pre"> </span>length – ceil(log2(length)) bslbf
}