计算OPUS数据包长度

时间:2017-04-21 11:49:36

标签: webrtc codec opus

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

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

这很好用。

现在我计划通过TCP支持RTP。 A将从OPUS文件中读取完整的数据包并发送给B. 当在B处接收到分组时,可以将其作为单个分组或多个分组(tcp行为)来接收。我的要求是,我应该缓冲数据,直到收到完整的数据包。收到完整的数据包后,我会将其写入文件。

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

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

1 个答案:

答案 0 :(得分:2)

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