【问题标题】:Calculate OPUS packet length计算 OPUS 数据包长度
【发布时间】:2017-09-18 09:55:16
【问题描述】:

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

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

这很好用。

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

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

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

【问题讨论】:

  • 请问如何逐包读取OPUS文件?
  • 您可能想查看 RFC 4571

标签: webrtc codec opus


【解决方案1】:

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

【讨论】:

  • 是的,想通了,RFC 4571 解释了同样的事情。也实施了。它现在工作正常。谢谢。
猜你喜欢
  • 1970-01-01
  • 2010-11-10
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 2012-11-02
相关资源
最近更新 更多