处理丢包的想法(理论)
Idea to handle lost packets (theory)
上下文
- 我们的传输通道不稳定。一些数据包可能会丢失。
- 在任何方向(从 A 到 B 或从 B 到 A)发送单个网络数据包需要 3 秒。
- 我们允许信号延迟 5 秒,不能再多了。所以我们有一个 5 秒的缓冲区。我们可以随心所欲地使用这 5 秒。
- 目前我们只使用了 80% 的传输通道,所以我们还有 1/4 的空间可以利用。
- 视频质量不能再差了。
- 我们需要使用 UDP。
问题
我们需要提高质量。如何处理丢包?我们需要使用 UDP 并自己处理这些错误。那怎么办呢?如何保证不会像现在这样丢那么多包(我们不能保证100%,所以只求更好),而不重传?我们可以一切,这是理论。
有不同的逻辑来处理这些 things.It 取决于您使用的应用程序。你在做实时视频流吗?严格要求?
正如你所说的你有一个缓冲区,你实际上可以为数据包维护一个缓冲区,然后为丢失的数据包发送一个确认(如果你觉得你可以等待)。
因为这是视频应用,所以只对关键帧发送确认。确保你有一个关键帧或 I 帧,然后在 rx 端进行插值。
研究称为前向纠错、喷泉码、luby 码的东西。在这里,您将对数据包 1 和 2 进行编码并生成数据包 3。如果 packet1 丢失,请使用 packet3 和 packet2 在 rx 端取回 packet1。基本上你发送冗余数据包。它对网络有点苛刻,但您可以获得大部分数据。
上下文
- 我们的传输通道不稳定。一些数据包可能会丢失。
- 在任何方向(从 A 到 B 或从 B 到 A)发送单个网络数据包需要 3 秒。
- 我们允许信号延迟 5 秒,不能再多了。所以我们有一个 5 秒的缓冲区。我们可以随心所欲地使用这 5 秒。
- 目前我们只使用了 80% 的传输通道,所以我们还有 1/4 的空间可以利用。
- 视频质量不能再差了。
- 我们需要使用 UDP。
问题
我们需要提高质量。如何处理丢包?我们需要使用 UDP 并自己处理这些错误。那怎么办呢?如何保证不会像现在这样丢那么多包(我们不能保证100%,所以只求更好),而不重传?我们可以一切,这是理论。
有不同的逻辑来处理这些 things.It 取决于您使用的应用程序。你在做实时视频流吗?严格要求?
正如你所说的你有一个缓冲区,你实际上可以为数据包维护一个缓冲区,然后为丢失的数据包发送一个确认(如果你觉得你可以等待)。
因为这是视频应用,所以只对关键帧发送确认。确保你有一个关键帧或 I 帧,然后在 rx 端进行插值。
研究称为前向纠错、喷泉码、luby 码的东西。在这里,您将对数据包 1 和 2 进行编码并生成数据包 3。如果 packet1 丢失,请使用 packet3 和 packet2 在 rx 端取回 packet1。基本上你发送冗余数据包。它对网络有点苛刻,但您可以获得大部分数据。