计算OPUS分组长度

计算OPUS分组长度

问题描述:

我有一个简单的应用程序,其中我发送OPUS数据包从一个客户到其他说A到B.计算OPUS分组长度

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

这工作正常。

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

现在我的问题是,在接收时如何确定B处的OPUS数据包的长度,以便我可以缓冲它。

不想要使用libopus等,如果以某种方式,我可以避免它。如果通过任何方式从收到的数据,我可以找出包长度?

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

+0

是的,想通了,RFC 4571解释了同样的事情。 – Kamal