gpt4 book ai didi

c - RTP 丢包问题(?)

转载 作者:行者123 更新时间:2023-11-30 17:09:54 38 4
gpt4 key购买 nike

我有一个客户端和一个服务器,服务器通过封装在 UDP 内的 RTP 数据包发送音频数据。客户端接收数据包。由于 UDP 没有流量控制,客户端会检查数据包的序列号,如果序列号不正确,则重新排列它们。我的问题是,我看到客户端从未收到带有某些序列号的数据包,如下图所示的wireshark -

wireshark showing packet loss

如果是这种情况,当我在客户端播放音频时,它会失真(很明显)。我该如何避免它?哪些因素影响这些?我应该将套接字缓冲区大小设置为一个大值吗?

感谢提前回复。
编辑 1:此问题出现在 QNX 平台上,而不是在 Linux 上。我观察了“netstat -p udp”的输出,看看这是否给出了有关为什么数据包在 QNX 上而不是 Linux 上被丢弃的任何提示。

QNX:

SOCK=/dev/d_usb3/ netstat -p udp 
udp:
8673 datagrams received
0 with incomplete header
 60 with bad data length field
0 with bad checksum
0 dropped due to no socket
2 broadcast/multicast datagrams dropped due to no socket
0 dropped due to full socket buffers
8611 delivered
8592 PCB hash misses

在 Linux 上,我看到 netstat 显示相同服务器和相同音频没有丢包!

有线索吗?为什么会这样?驱动问题?网络堆栈?

最佳答案

您需要指定如何在客户端中处理丢失的数据包。

如果丢失数据包,则意味着音频流中丢失了数据。因此,您的客户必须在丢失数据的地方“做点什么”。一些选项是- 播放静音(由于尖锐的包络线为 0,会发出破裂的噪音)- 淡出至沉默- 通过检查相邻数据来估计波形- 播放噪音

您不能将数据包错位或在丢失数据包的情况下进行播放。例如,假设您获得数据包 1、2、3、4 和 6。您丢失了数据包 5。您无法播放数据包 4,然后播放数据包 6。必须发生某些事情来填充数据包 5 的空间。

See this post for more info.

关于c - RTP 丢包问题(?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33087817/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com