You need to enable JavaScript to run this app.
导航
音频媒体特性
最近更新时间:2023.11.01 19:35:48首次发布时间:2022.03.11 19:36:52

超低延时直播声音编码技术支持 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 编解码。

说明

当 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;

说明

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