计算 OPUS 数据包长度

Calculate OPUS packet length

我有一个简单的应用程序,我将 OPUS 数据包从一个客户端发送到另一个客户端,比如 A 到 B。

A​​从OPUS文件中读取一个数据包,发送给B。 20 毫秒或 30 毫秒后再次读取一个数据包并发送给 B,依此类推。 到目前为止,我一直在使用 UDP 上的 RTP,所以在 B 的接收端,当我收到数据包时,我收到了完整的数据包。收到完整的数据包后,我写入一个新文件。

这很好用。

现在我打算支持基于 TCP 的 RTP。 A 将从 OPUS 文件中读取一个完整的数据包并发送给 B。 当在 B 处接收到数据包时,它可能作为单个数据包或多个数据包(tcp 行为)接收。我的要求是,我应该缓冲数据直到收到完整的数据包。一旦我收到完整的数据包,我会将其写入文件。

现在我的问题是,如何在接收的时候确定B端OPUS包的长度,以便缓冲。

不想使用 libopus 等,如果我能避免的话。如果通过任何方式从接收到的数据中,我可以找出数据包的长度吗?

TCP 是一种流协议。您有两个主要选择:在每个 Opus 数据包之前添加一个长度字(16 位就足够了)(读取长度,然后读取数据包,处理缓冲(等待获得足够的字节以进行读取),或者将每个 Opus 数据包填充到特定的大小。Opus 不使用固定大小的数据包;它们取决于内容以及比特率和质量设置。