live555传输Speex音频详解一:Speex over RTP

1. RTP Speex 头部

RTP头部在[RFC3550]中定义。本文定义RTP头部中各字段的用法。

Payload Type (PT): 本格式的负责类型号。

Marker (M) bit: 此位被用来标志一段无声后有声的开始。打在 有声数据的第一个包上。 Speex支持声音检测,可以在无声时不 产生帧数据。所以包可能是非连续传输的。

Extension (X) bit: 见RTP的规定。

Timestamp: 一个32位的整数,表示一个包中第一帧的采样时间。

2. Speex的RTP负载格式

Speex的RTP负载如图1所示。本格式没有附加的头部,所以只什用标准的RTP头部 头部之后是一个或多个负载数据库(speex帧)。包尾部可能需要一些填补数据。

live555传输Speex音频详解一:Speex over RTP_第1张图片

图 1: Speex的RTP负载

3. Speex 负载

为了把编码后的数据打包进RTP,我们只需要考虑Speex编码器输出的比特流必须 以相同的顺序出现在解码端。此处所说的负载格式保持了这个顺序。

一个典型的Speex帧,最大编码码率大约是110个字节。一个包中所有的Speex帧的 总字节数应小用路径MTU以避免被分割。Speex帧绝不能被分割!

必须按时间序把帧打到包里。

一个RTP包中可能包含相同码率的帧也可能包含不同码率的帧。然而码率是在带内 传送的,每帧中包含了自己的码率,所以打包时不必在意它。

编码和解码算法可以以20毫秒的帧为边界改变码率。 码率改变的通知是在带内传 送的。每个帧都包含采样率(窄带, 宽带, 或 超宽带)和"模式"(码率)信息。所以 不需要带外数据通知解码器处理那些变化。

采样率必须是8000 Hz, 16000 Hz, 或 32000 Hz之一。

RTP负载必须被填补数据以保证能提供整数个字节的数据,这些填补位是LSB(最 低有效位)-对齐的并且按网络字节序放置,它是由一个0跟着一群1组成的。填补 数据仅被包中最后一个帧所需要。并且仅仅为了保证一个包的内容按字节边界结束。

4. Speex RTP包的例子

下面的示例中,我们的包中一个Speex帧,还有5位的填补数据来保证包的大小是字 节对齐的。

live555传输Speex音频详解一:Speex over RTP_第2张图片

5. 多Speex帧的RTP包

下面的例子演示的是一个RTP包中有两个Speex帧。这个例子中的Speex帧的长度是 字节对齐的,所以不需要填补数据。

Speex解码器可以从负载侦测码率,并负责在各帧之间检查20毫秒的的帧界限。

live555传输Speex音频详解一:Speex over RTP_第3张图片

6. 媒体类型


媒体类型名字: audio

媒体字类型名字: speex

所需参数:
rate: RTP 时间戳时钟频率,等于采样率Hz。采样率必须是8000, 16000, 或 32000。

可选的参数:

ptime: 必须能被20毫秒整除 [RFC4566]

maxptime: 必须能被20毫秒整除 [RFC4566]

vbr: 可变码率 - 可为 'on', 'off', 或 'vad' (默认是'off')。如果是'on', 可变码率被使用。如果是 'off',则不被使用。如果是'vad',那么固定码率被 使用,但是无声时段将被编码为特殊的短帧来表明那段时间没有声音。这个参数
用于编码器。

cng: 产生舒适噪音 - 可为 'on' 或 'off' (默认是'off')。如果为 'off', 无声帧就是无声,如果为'on',那么这些帧将被以舒适噪音填充。此参数被用于 编码器。

mode: 以逗号分隔的多个speex支持的解码模式,按优先度排列。第一个具有最 优先级,剩余的依次排列。对于窄带和宽带可用的模式值不一样,见以下定义:

* {1,2,3,4,5,6,7,8,any} 用于窄带

* {0,1,2,3,4,5,6,7,8,9,10,any} 用于宽带

mode'参数可能包含多个值。这此情况下,远端的编码器必须被配置成能支持 模式列表中的第一个值。 当 'any' 被使用时,表明自己支持所有的解码模式。 'mode' 参数必须永远有值。如果'mode' 没有出现,那么mode的值被置为:在

窄带下是'mode="3,any"',在宽带和超宽带下是'mode="8,any"' 。注意每个包含mode(或码率)的Speex帧必须被解码。因此,一个应用程序必须能解码任何Speex帧,除非在SDP中明确指明某些模式不被支持(例如,不含'mode="any"')。

解码端指定支持哪些模式意味着编码端也支持那些模式。


下节预告:Speex使用SDP。

你可能感兴趣的:(live)