2019独角兽企业重金招聘Python工程师标准>>>
关于AC3、EAC3比特流的基本格式
1 AC3基本格式
Ac3比特流由一系列的synchronization frame组成,每个synchronization frame包含6个audio block。每个frame的基本结构如图1:
SI |
BSI |
AB0 |
AB1 |
AB2 |
AB3 |
AB4 |
AB5 |
Aux |
CRC |
SI |
BSI |
图1
AC3 Sync frame可按如下流程,具体每个域的解释参考spec:
syncframe()
{
sync_info();//同步信息头为0x0B77
bsi();
for(blk=0;blk<6;blk++)
{
audblk();
}
auxdata();//可选
errorcheck();//可选
}/*end of syncframe*/
2 EAC3基本格式
EAC3,全称Enhanced AC-3 bit streams,与AC3类似,但不能后向兼容。AC3的decoder不能解EAC3的bitstream,EAC3的decoder即能解AC3,也能解EAC3。
每个Frame的基本结构与AC3一致。
EAC3 Sync frame可按如下流程,具体每个域的解释参考spec:
syncframe()
{
sync_info();//同步信息头为0x0B77
bsi();
Audfrm();
for(blk=0;blk
{
audblk();
}
auxdata();//可选
errorcheck();//可选
}/*end of syncframe*/
注意:bsi()域中的numblkscod标明每个syncframe包含多少个block,与AC3不同(AC3每个syncframe一定包含6个audio block,解码出来共1536个sample),EAC3每个syncframe不一定包含6个block,即如果每个syncframe只有一个有效block,那么该frame只包含256个sample。
Bsi()域中如果标明使用fscod2,Reduced Sampling Rates(24/22.05/16),numblkscod一定为0x11,即每个syncframe包含6个block。
Bsi()域中bsid,Bit Stream Identification:
0~8 标明是AC3;
11-16 标明是EAC3;
9、10或者大于16的值:不支持的bitstream,decoder必须要mute;
3 数字输出接口
IEC60958规定了PCM输出时的传输方式。每个Block包含192个frames,每个frames包含两个subframe,两个subframe则分别对应着左右两个channel的Sample值,默认16bits,最大可传输24bits。
IEC61937仍然采用IEC60958 frame格式,用来传递非PCM数值,即原始的audio bitstream。只适用于consumer application,professional mode不在该标准范围内。
IEC61937通过data burst的概念来传输audio bitstream。data burst由burst preamble(即Pa,Pb,Pc,Pd)和burst payload组成, 传输Data Burst时还需要做一些Stuffing动作,保持同步。
传输一个data burst,必须能够解出一个完整的帧。data burst结构如图:
|pa|pb|pc|pd|Bitstream|NULL |pa|pb|pc|pd|Bitstream|NULL pa|pb|pc|pd|Bitstream|NULL
IEC_DATA长度:pa~NULL,对AC3,该值为1536;对EAC3,该值为6144;即需要多少个IEC60958 frames来完成一个databurst的传输。
IEC_NULL:NULL,用于同步;
PD:Bitstream,传输的payload长度,必须要能够解出一个完整的帧。
传递一个Data Burst之前,首先需要传递pa,pb,pc,pd四个header,通过两个IEC60958 frame来传递。frame0的subframe0传递pa,subframe1传递pb;frame1的subframe0传递pc,frame1的subframe1传递pd。随后再传递audio bitstream的IEC60958 frames。