实际运行过程中发现,大概每间隔3秒到4秒,会有一次丢包,丢包数量少的3个,多的100个,在局域网里测试发送接收代码,播放很顺利,公网P2P穿透后播放,就会发现丢包,用的是UDP,周期性丢包,我每帧分包最大1400
1,周期性丢包,是不是需要我做NAT session的维护,要接收端也周期给发送端发个包?
2,分包在公网传输,最小概率丢包的包大小多少合适?
3,如何解决丢包?重传?嵌入式缓存的话,可能会很占内存
11 个解决方案
#1
udp丢包是必然的,既然你有成功的时候说明打孔是能够成功的,一般情况下udp数据包都会有重传机制。比如rtcp协议就是对rtp协议的重传处理。如果你不想搞这么麻烦,那么比较简单的一种方式就是打孔数据包隔1秒重发一次,2次的丢失概率总比1次小。
#2
了解一下UDX协议,UDP的可靠传输协议,支持P2P,内部对视频智能丢侦,不会产生花屏。
楼上是对RTCP的误解,他只是控制协议,是否需要重传,还得应用层处理。即使是需要重传,也不一定效果好。
楼上是对RTCP的误解,他只是控制协议,是否需要重传,还得应用层处理。即使是需要重传,也不一定效果好。
#3
wwwlg兄弟的说法应该是正确的,RTCP无法帮助重传,重传需要自己去做,我做了测试,洞打通之后,维持session对丢包没有帮助。看来是网络环境造成的,得做重传处理了
#4
也可以考虑使用UDT, 另一个可靠UDP实现,效果会比 "纯UDP" 好一些
#5
大神,请问一下NAT穿透是怎么做的?
#6
RTCP反馈网络状况的,你要根据网络当前的拥塞情况来发包,而不是固定的每个包都等回复,那你这样和TCP有什么区别了,你做的实时视频传输,既要保证效率,又要保证质量。在接收端也要容忍丢包的情况,别一帧丢了一个包就把整帧给丢掉了。
#7
结贴
周期性丢包的问题:
实际测试,这个问题应该网络原因,即使双向发送UDP包来维持session避免防火墙关闭此session,因此丢包也就只能用重传搞定了;
分包在公网传输的包大小:
我用wifi和有线网络测试,1400一个包,不影响丢包率,3G没测试,有人说500比较好,我目前用1400,一切正常;
丢包问题:
重传解决的;
丢包重传我是这么做的:
收端检测RTP的transnum,如果transnum发生跳变,就请求发端重传跳过的,重传肯定不能用ack的方式,否则就像neustar1兄说的,跟TCP没区别,而且可能会拥塞网络,720P的流,每秒已经上百个包了。
关于RTCP,我直接没管RTCP,不处理RTCP包。没问题。
周期性丢包的问题:
实际测试,这个问题应该网络原因,即使双向发送UDP包来维持session避免防火墙关闭此session,因此丢包也就只能用重传搞定了;
分包在公网传输的包大小:
我用wifi和有线网络测试,1400一个包,不影响丢包率,3G没测试,有人说500比较好,我目前用1400,一切正常;
丢包问题:
重传解决的;
丢包重传我是这么做的:
收端检测RTP的transnum,如果transnum发生跳变,就请求发端重传跳过的,重传肯定不能用ack的方式,否则就像neustar1兄说的,跟TCP没区别,而且可能会拥塞网络,720P的流,每秒已经上百个包了。
关于RTCP,我直接没管RTCP,不处理RTCP包。没问题。
#8
@mokeyangjun
忘记说了,UDP的nat还是不难的,网上有
忘记说了,UDP的nat还是不难的,网上有
#9
请问你的NAT穿透是自己写的UDP打洞还是用的开源项目?
#10
如果换成3G网络,NAT应该打洞不成功吧
#11
請問我 Wifi 傳 UDP ok, 但是 3G 網絡卻失敗, 有特殊方法嗎, 請指導一下, 謝謝....
#1
udp丢包是必然的,既然你有成功的时候说明打孔是能够成功的,一般情况下udp数据包都会有重传机制。比如rtcp协议就是对rtp协议的重传处理。如果你不想搞这么麻烦,那么比较简单的一种方式就是打孔数据包隔1秒重发一次,2次的丢失概率总比1次小。
#2
了解一下UDX协议,UDP的可靠传输协议,支持P2P,内部对视频智能丢侦,不会产生花屏。
楼上是对RTCP的误解,他只是控制协议,是否需要重传,还得应用层处理。即使是需要重传,也不一定效果好。
楼上是对RTCP的误解,他只是控制协议,是否需要重传,还得应用层处理。即使是需要重传,也不一定效果好。
#3
wwwlg兄弟的说法应该是正确的,RTCP无法帮助重传,重传需要自己去做,我做了测试,洞打通之后,维持session对丢包没有帮助。看来是网络环境造成的,得做重传处理了
#4
也可以考虑使用UDT, 另一个可靠UDP实现,效果会比 "纯UDP" 好一些
#5
大神,请问一下NAT穿透是怎么做的?
#6
RTCP反馈网络状况的,你要根据网络当前的拥塞情况来发包,而不是固定的每个包都等回复,那你这样和TCP有什么区别了,你做的实时视频传输,既要保证效率,又要保证质量。在接收端也要容忍丢包的情况,别一帧丢了一个包就把整帧给丢掉了。
#7
结贴
周期性丢包的问题:
实际测试,这个问题应该网络原因,即使双向发送UDP包来维持session避免防火墙关闭此session,因此丢包也就只能用重传搞定了;
分包在公网传输的包大小:
我用wifi和有线网络测试,1400一个包,不影响丢包率,3G没测试,有人说500比较好,我目前用1400,一切正常;
丢包问题:
重传解决的;
丢包重传我是这么做的:
收端检测RTP的transnum,如果transnum发生跳变,就请求发端重传跳过的,重传肯定不能用ack的方式,否则就像neustar1兄说的,跟TCP没区别,而且可能会拥塞网络,720P的流,每秒已经上百个包了。
关于RTCP,我直接没管RTCP,不处理RTCP包。没问题。
周期性丢包的问题:
实际测试,这个问题应该网络原因,即使双向发送UDP包来维持session避免防火墙关闭此session,因此丢包也就只能用重传搞定了;
分包在公网传输的包大小:
我用wifi和有线网络测试,1400一个包,不影响丢包率,3G没测试,有人说500比较好,我目前用1400,一切正常;
丢包问题:
重传解决的;
丢包重传我是这么做的:
收端检测RTP的transnum,如果transnum发生跳变,就请求发端重传跳过的,重传肯定不能用ack的方式,否则就像neustar1兄说的,跟TCP没区别,而且可能会拥塞网络,720P的流,每秒已经上百个包了。
关于RTCP,我直接没管RTCP,不处理RTCP包。没问题。
#8
@mokeyangjun
忘记说了,UDP的nat还是不难的,网上有
忘记说了,UDP的nat还是不难的,网上有
#9
请问你的NAT穿透是自己写的UDP打洞还是用的开源项目?
#10
如果换成3G网络,NAT应该打洞不成功吧
#11
請問我 Wifi 傳 UDP ok, 但是 3G 網絡卻失敗, 有特殊方法嗎, 請指導一下, 謝謝....