UDP 做穿透后P2P传输实时视频丢包,求助

backylee 2014-02-26 03:11:12
各位大牛,今日我在做一个P2P的实时视频传输系统,前期做NAT穿透等等动作,之后嵌入式摄像头把码流打包成rtp发送给MFC接收端,接收端显示出来。

实际运行过程中发现,大概每间隔3秒到4秒,会有一次丢包,丢包数量少的3个,多的100个,在局域网里测试发送接收代码,播放很顺利,公网P2P穿透后播放,就会发现丢包,用的是UDP,周期性丢包,我每帧分包最大1400

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

2,542

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧