You need to enable JavaScript to run this app.
视频直播

视频直播

Copy page
Download PDF
超低延时直播技术白皮书
音频媒体特性
Copy page
Download PDF
音频媒体特性

超低延时直播声音编码技术支持 OPUS 编码和 AAC 编码等方式。

OPUS 编解码支持

WebRTC 标准 Google 参考代码原生支援内建实现;如果需要使用 Opus 编码,首先需要在 SDP 中要有以下定义。

a=rtpmap:111 opus/48000/2 
a=rtcp-fb:111 transport-cc 
a=fmtp:111 minptime=10;useinbandfec=1

Opus 支持 8000Hz、12000Hz、16000Hz、24000Hz 和 48000Hz 采样率;不同采样率在 SDP 中增加的定义不同,通过修改maxplaybackrate的参数来定义不同采样率。以 8000Hz 和 16000Hz 的采样率为例。

  • 8000Hz 采样率 SDP 设定
a=rtpmap:111 opus/48000/2 
a=rtcp-fb:111 transport-cc 
a=fmtp:111 minptime=10;useinbandfec=1;maxplaybackrate=8000
  • 16000Hz 采样率 SDP 设定
a=rtpmap:111 opus/48000/2 
a=rtcp-fb:111 transport-cc 
a=fmtp:111 minptime=10;useinbandfec=1;maxplaybackrate=16000

AAC 编解码支持

超低延时直播声音编码技术支持 AAC-LC、AAC-HE 和 AAC-HE2 编解码。

tip

当 AAC 音频的 config 不同时,AAC 编解码不支持 RFC 3640 方式,而 RFC 6416 可以将 config 信息写入 RTP 中。

LATM(MP4A-LATM)

LATM (Low-overhead MPEG-4 Audio TransportMultiplex,即低开销音频传输复用)是 MPEG-4 AAC 制定的一种高效率的码流传输方式。LATM 格式也以帧为单位,主要由 AudioSpecificConfig(音频特定配置单元)与音频负载组成,可参见附录

MP4A-LATM 的 RTP 封装说明

MP4A-LATM 的 RTP 封装格式如下所示。

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X|  CC |M|      PT     |       sequence number           |RTP
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           timestamp                           |Header
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          synchronization source (SSRC) identifier             |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|             contributing source (CSRC) identifiers            |
|                             ....                              |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|                                                               |RTP
:                   audioMuxElement (byte aligned)              :Payload
|                                                               |
|                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               :...OPTIONAL RTP padding        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

RFC 3640 介绍 MP4A-Generic 的 RTP 封装说明(AU_header_size+AU_header+AudioData);音频特定配置可使用带内传输,即每帧都带上;也可使用带外传输,即通过 SDP 传递到解码端。音频负载由若干子帧组成,每个子帧由 PayloadLengthInfo 和 PayloadMux 组成。

LATM 格式以帧为单位,由音频特定配置 StreamMuxConfig 和音频负载 PayloadLengthInfo+PayloadMux 组成。AudioMuxElement 的结构如下图所示。

AudioSpecificConfig 描述了一个 LATM 帧的信息,音频负载主要由负载长度信息 PayloadLengthInfo 和负载净荷 PayloadMux 组成。AudioSpecificConfig 信息可以是带内传,也可以是带外传。

  • 带内传:指每一个 LATM 帧,都含有一个 AudioSpecificConfig 信息;
  • 带外传:指每一个 LATM 帧都不含有 AudioSpecificConfig 信息,而通过其他方式把 AudioSpecificConfig 信息发送到解码端,由于 AudioSpecificConfig 信息一般是不变的,所以只需发送一次即可。

由此可见,AudioSpecificConfig 信息采用带内传输可适应音频编码信息不断变化的情况,而采用带外传输,可以节省音频传输码率。

带内或带外传,由 muxconfigPresent 标志位决定。例如,流媒体应用中,muxconfigPresent 可设置为 0,这样 LATM 帧中将不含 AudioSpecificConfig 信息,LATM 帧通过 RTP 包发送出去,AudioSpecificConfig 可通过 SDP 文件一次性传送到解码端。

SDP 请求应答示例

  • SDP 请求示例
...
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:120 MP4A-LATM/48000/2
a=rtcp-fb:120 transport-cc
a=rtpmap:121 MP4A-LATM/44100/2
a=rtcp-fb:121 transport-cc
...
  • SDP 应答示例

a=fmtp带有详细 AAC 信息。

...
a=rtpmap:121 MP4A-LATM/44100/2
a=rtcp-fb:121 nack
a=rtcp-fb:121 transport-cc
a=fmtp:121 SBR-enabled=1;config=40005724101fe0;cpresent=0;object=2;profile-level-id=1
...

AAC-HE(SBR-enabled=1) 和 AAC-HE2(SBR-enabled=1;PS-enabled=1;) 的 object的部分取值及含义如下所示。

  • Object = 2 时,表示 AAC-LC;
  • Object = 5 时,表示 SBR;
  • Object = 29 时,表示是 PS;

tip

AAC 有多个采样率时且播放客户端都支持时,优先选择媒体源流的采样率原则。

阿里云实现示例

本节为您介绍阿里云的实现示例。

  • AAC-LC

aac_config:0x1210,则 SDP 应答的a=fmtp示例如下所示。

a=fmtp:111 cpresent=0;profile-level-id=1;object=2;config=400024203fc0
  • AAC-HE

aac_config:2b920800,则 SDP 应答的a=fmtp示例如下所示。

a=fmtp:111 cpresent=0;SBR-enabled=1;profile-level-id=1;object=5;config=4000572410003fc0
  • AAC-HEv2

aac_config:eb8a0800,则 SDP 应答的a=fmtp示例如下所示。

a=fmtp:111 cpresent=0;SBR-enabled=1;object=29;profile-level-id=1;PS-enabled=1;config=4001d71410003fc0
Last updated: 2023.11.01 19:35:48