杜比AC3音频编码格式浅析

背景

知乎看到有人提问Potplayer 安装后,缺少杜比AC3解码器,于是整理了一下相关技术文档,在此做个总结。

AAC & AC3 & E-AC-3

AAC & AC3 & E-AC-3都是音频的编码方式。

  • EAC3: Dolby Digital Plus (DDP)
  • AC3: Dolby Digital (DD)

AAC

AAC(Advanced Audio Coding),中文名:高级音频编码,出现于1997年,基于MPEG-2的音频编码技术。由Fraunhofer IIS、杜比实验室、AT&T、Sony等公司共同开发,目的是取代MP3格式。
随着时间的推移,MP3越来越不能满足需要了,比如压缩率落后于Ogg、WMA、VQF等格式,音质也不够理想(尤其是低码率下),仅有两个声道……于是诺基亚苹果等公司展开合作,共同开发出了被誉为“21世纪的数据压缩方式”的Advanced Audio Coding(简称AAC)音频格式,以取代MP3的位置。其实AAC的算法在1997年就完成了,当时被称为MPEG-2 AAC,因为还是把它作为MPEG-2(MP2)标准的延伸。但是随着MPEG-4(MP4)音频标准在2000年成型,AAC(M4A)。

杜比AC3

AC3(全称Audio Coding3音频编码3)是杜比数码的同义词,杜比数码是一种高级音频压缩技术,它最多可以对6个比特率最高为448kbps的单独声道进行编码。

1994年,日本先锋公司宣布与美国杜比实验室合作研制成功一种崭新的环绕声制式,并命名为“杜比AC-3”(Dolby Surround Audio Coding-3)。1997年初,杜比实验室正式将“杜比AC-3环绕声”改为“杜比数码环绕声”(Dolby Surround Digital),我们常称为Dolby Digital。

它是DVD音频的标准,其编码完全是数字的,压缩比约为1:9~10,是一种多声道数字音频系统。

杜比定向逻辑系统是一个模拟系统。它的四个声道是从编码后的两个声道分解出来 的,因此难免有分离度不佳、信噪比不高,对环绕声缺乏立体感,并且环绕声的频带窄等缺点。AC(Audio Coding)指的是数字音频编码,它抛弃了模拟技术,采用的是全新的数字技术。

杜比数字AC-3提供的环绕声系统由五个全频域声道加一个超低音声道组成,所以 被称作5.1个声道。五个声道包括前置的”左声道”、”中置声道”、”右声道”、后置的”左环绕声道”和”右环绕声道”。这些声道的频率范围均为全频域响 应3-20000Hz。第六个声道也就是超低音声道包含了一些额外的低音信息,使得一些场景如爆炸、撞击声等的效果更好。由于这个声道的频率响应为 3-120Hz,所以称”.1”声道。

杜比数字AC-3是根据感觉来开发的编码系统多声道环绕声。它将每一种声音的频率根据人耳的听觉特性区分为许多窄小频段,在编码过程中再根据音响心理学的原理进行分析,保留有效的音频,删除多作的信号和各种噪声频率,使重现的声音更加纯净,分离度极高。

杜比数字AC-3系统可用前置的左、右音箱,中置音箱产生极有深度感和定位明确的音场,用两个后置或侧置的环绕音箱和超低音箱表现宽广壮阔的音场,而六个声道的信息在制作和还原过程中全部数字化,信息损失的很少。全频段的细节十分丰富,具有真正的立体声。

杜比数字AC-3具有很好的兼容性,它除了可执行自身的解码外,还可以为杜比定 向逻辑解码服务。因此,目前已生产的杜比定向逻辑影视软件都可以使用杜比数字AC-3系统重现。由于杜比数字AC-3系统的编码非常灵活,所以它的格式很 多。目前它已被美国采用作为高清晰电视(HDTV)音频系统,最新DVD机也包含杜比数字AC-3。

AC3比特流格式

AC3比特流由一系列的synchronization frame组成,每个synchronization frame包含6个audio block。每个frame的基本结构如图1:

结构定义: 其同步头为0x0B77
syncframe()
{
sync_info();//同步信息头为0x0B77
bsi();
Audfrm();
for(blk=0;blk<6;blk++)
{
audblk();

       }

       auxdata();//可选
       errorcheck();//可选
}/*end of syncframe*/

AC3 音频测试文件下载地址

https://www.lynnemusic.com/surround.html

E-AC-3

针对高清电视HD DVDRip的一种音轨.即Dolby Digital 2.0(杜比2.0),也是5声道.
DD+、E-AC-3 、EC3三个说的是同一种格式,由于E-AC-3的音频文件后缀为.ec3,所以也有人成为EC3格式。
EAC3,全称Enhanced AC-3 bit streams,与AC3类似,但不能后向兼容。AC3的decoder不能解EAC3的bitstream,EAC3的decoder即能解AC3,也能解EAC3。

E-AC-3 (Dolby Digital Plus) is an enhanced coding system based on the AC-3 codec.
It offers increased bitrates (up to 6.144 Mbit/s), support for more audio channels (up to 13.1), and improved coding techniques (only at low data rates) to reduce compression artifacts, enabling lower data rates than those supported by AC-3
(e.g. 5.1-channel audio at 256 kbit/s).
It is not backward compatible with existing AC-3 hardware, though E-AC-3 codecs generally are capable of transcoding to AC-3 for equipment connected via S/PDIF. E-AC-3 decoders can also decode AC-3 bitstreams.

The fourth generation Apple TV supports E-AC-3.[21] The discontinued HD DVD system directly supported E-AC-3.

Blu-ray Disc offers E-AC-3 as an option to graft added channels onto an otherwise 5.1 AC-3 stream, as well as for delivery of secondary audio content (e.g. director’s commentary) that is intended to be mixed with the primary
audio soundtrack in the Blu-ray Disc player.

EAC3基本格式

EAC3 Sync frame可按如下流程,具体每个域的解释参考spec:

    syncframe()    
    {
       sync_info();//同步信息头为0x0B77   
       bsi();
       Audfrm();

       for(blk=0;blk<number_of_blocks_per_syncframe;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;

数字输出接口

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。

平台支持

Android

Android L 向 AudioFormat 中添加了对 ENCODING_AC3 和 ENCODING_E_AC3 编码格式的支持。如果 AudioTrack 配置为杜比编码格式,并且连接的端点支持该编码格式,则 AudioTrack 接受杜比原始位流作为输入,并在 IEC61937 封包化后将位流传递到端点。AudioTrack 仅支持明文(未加密)输入位流。

AudioTrack 不支持使用 DRM 密钥加密的杜比音频内容。因此,对于加密的杜比音频位流,必须使用 MediaCodec API 来解密位流,然后将解密的位流传递给 AudioTrack。

Android 通过名为“OMX.google.raw.dec”的 MediaCodec 接口提供了一个通用的原始音频解码器,它本质上是一个无操作 (no-op) 复制解码器。如果位流被加密,它使用 MediaCrypto API 来解密位流并输出它。应用必须使用此解码器来解密加密的杜比位流,并将明文杜比位流传递给 AudioTrack。

相关文档

AC-3编解码的设计及实现.pdf
下载地址:https://github.com/coloriy/VideoTechDocuments

扩展阅读

DD5.1和AC3是一样的,只是不同称呼。

区别:

1、声道:

DD5.1 : 杜比数码环绕音效5.1除了主声道、中央声道与后声道外, 另外加上一个超低音声道, 然后将这个六个声道编码成AC-3格式储存. 因此以杜比数码系统译码播放时, 可以聆听到五个声道再加上一个超低音声道.。

除了超重低音部分外,其余皆是全频段Stereo声道,48KHz,16bit,且现场拍摄时每个声道皆是独立麦克风来录制。

DTS : 同样属于5.1声道的环绕效果, DTS采用与AC-3不同的压缩技术将环绕音效储存至DVD. 播放时必须采用具有dts译码能力的系统, 才能将隐藏在DVD中的5.1声道释放出来. 两者使用不同的‘算法’, 也就是使用不同的方式来压缩5.1个声道的声音.

2、流量:
DD5.1声道的流量是384Kbps~448Kbps,最高可提升到640Kbps

DTS在DVD上拥有1536Kbps的数据流量,以384Kbps~448Kbps来比较,足足多了3倍多的数据流量,即使将AC-3拉到极限的640Kbps

参考资料
https://www.jianshu.com/p/82f0c1f09e3a
https://blog.csdn.net/av_geek/article/details/18445369
https://developer.amazon.com/zh/docs/fire-tv/dolby-integration-guidelines.html


文章作者: YUV420.COM
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 YUV420.COM !
评论
 上一篇
如何快速下载YouTube视频列表中所有视频 如何快速下载YouTube视频列表中所有视频
背景想要快速下载YouTube视频列表中的所有视频。如何快速简单方便。 方法在线下载方法使用在线网站,选择其中的youtube playlist downloader工具。https://keepvid.pro/en3/选择其中的右上角Yo
2020-01-21
下一篇 
QT Creator编译配置汇总 QT Creator编译配置汇总
背景QT Creator 编译配置方法汇总。 Pro文件语法QT Creator的pro配置文件中也可添加各种编译前后的操作及配置,主要通过 QMAKE_POST_LINK和QMAKE_PRE_LINK; QMAKE_POST_LINK表
2020-01-14
  目录