一个 RTP 数据包需要发送多少字节的 Opus 负载

How many bytes of Opus payload need to be sent in one RTP packet

我有包含 OPUS 帧的 Ogg 格式文件。根据我的要求,我需要解析这个文件(frames/packets),并通过 RTP 将 OPUS 压缩数据发送到远程设备。

我的问题是在一个 RTP 数据包中(假设 48khz 采样率)
1.将发送一个OPUS帧
2. 或发送多个OPUS帧
3. 或者按照Ogg文件格式规范发送一个数据包,可以是一帧,两帧或任意数量的帧将被发送

每个 Opus RTP 数据包包含 only one Opus packet, as defined by the Opus specification。这可能在内部包含多个 Opus 帧,但它必须具有正确的 header 字节来表示这一点并符合其他规则,因此请确保您的意思与规范中“帧”的含义相同。

基本上,您希望将 Ogg 文件中的每个 Opus 数据包都放在自己的 RTP 数据包中。 RTP 负载级别没有打包。不要在 .opus Ogg 流的前两个数据包中发送 Id 或 Comment headers,当然您需要在 RTP headers 前加上适当的标志、时间戳等。

请参阅 https://git.xiph.org/?p=opus-tools.git;a=blob;f=src/opusrtp.c#l517 以了解其玩具实现。