让我首先澄清我将在下面使用的术语。
编解码器数据包是编码器在调用一次时返回的压缩数据。
RTP 有效载荷可以由一个编解码器数据包或一系列编解码器数据包组成。
我的问题:
SILK 的 RFC 是否允许 RTP 有效负载包含多个编解码器数据包?
如果是这样,我如何将接收到的 RTP 有效负载拆分为编解码器数据包,以便以后可以及时解码每个数据包(一次一个编解码器数据包)?
例子:
应用程序使用 SILK 对 20 毫秒 16 位 LPCM 音频块进行编码。每个编解码器数据包都被向下发送到网络堆栈以通过 RTP 传输。假设前 4 次调用编码器,编码器输出:
1) 大小为 39 字节的 20ms 编解码器包 2) 大小为 35 字节的 20ms 编解码器包 3) 大小为 41 字节的 20ms 编解码器包 4) 大小为 32 字节的 20ms 编解码器包
应用程序中的网络堆栈组装由 4 个编解码器数据包组成的 RTP 有效负载。所以在这种情况下,RTP 有效负载大小为 39 + 35 + 41 + 32 = 147 字节。
在接收端,接收到 147 字节的 RTP 有效载荷。接收应用程序应该如何将 RTP 有效负载拆分为原始的 4 个分别为 39、35、41 和 32 字节的编解码器数据包????
我很确定 RFC 不允许这种情况,但我想确定一下。有人可以确认 RFC 是否允许每个 RTP 有效负载多个编解码器数据包???
据我了解,RFC 仅允许每个 RTP 有效负载一个编解码器数据包。如果希望每个有效负载发送 80 毫秒,则应该将编码器配置为输出 80 毫秒编解码器数据包(而不是 20 毫秒)。它是否正确???