我有包含 OPUS 帧的 Ogg 格式文件。根据我的要求,我需要解析这个文件(帧/数据包),并通过 RTP 将 OPUS 压缩数据发送到远程设备。
我的问题是在一个 RTP 数据包中(假设 48khz 采样率)
1. 将发送一个 OPUS 帧
2. 或将发送多个 OPUS 帧
3. 或根据 Ogg 文件格式规范的一个数据包,可能是一帧,两帧或将发送任意数量的帧
按照Opus 规范的定义,每个 Opus RTP 数据包仅包含一个 Opus 数据包。这可能在内部包含多个 Opus 帧,但它必须具有正确的标头字节来表示这一点并符合其他规则,因此请确保您的意思与规范中“帧”所做的相同。
基本上,您希望将 Ogg 文件中的每个 Opus 数据包发送到其自己的 RTP 数据包中。RTP 有效负载级别没有打包。不要在 .opus Ogg 流的前两个数据包中发送 Id 或 Comment 标头,当然您需要在 RTP 标头前添加适当的标志、时间戳等。
有关此的玩具实现,请参见https://git.xiph.org/?p=opus-tools.git;a=blob;f=src/opusrtp.c#l517 。