rtp/rtcp 包重发问题

Jasonshengxi 2010-03-03 12:05:19
最近在做视频传输的demo,已经完成了基于tcp的内外网连接和传输。现在想将udp部分也做进去,也下了jrtplib看了下,现在想了解下:
因为udp是不可靠传输的,内网下包乱序和丢失一般比较少,而外网环境复杂,丢包和乱序都有,而这部分差错检验,是由rtcp完成的?还有,jrtplib中的send和recv有做这部分工作么
...全文
1068 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lazyter1 2010-03-14
  • 打赏
  • 举报
回复
回复于:2010-03-08 11:06:55引用 6 楼 louyong0571 的回复:要是想丢包重传还是用tcp吧,UDP自己去做重传没必要的吧


louyong0571应该是没有做过视频传输的相关工作,使用tcp的确是可靠传输,不过这个可靠也是相对而言的,实际在网络状况不好下,tcp也有超时或连接错误。而且tcp在确保可靠传输上使用了过多的校验和严格的重发机制,这对于实时视频来说是不合适的。而且tcp也不适合做内外网穿透。还有就是tcp的发送方式也有一定的影响
使用udp,就是追求udp的迅速,如果算法合适,传输视频还是很合适的。现在重点是在包重发上,一直没有想到好的思路,不知有那位可以指导下~~

=========================================
TCP: 内网穿透似乎可以用UPNP端口映射。



ccpaishi 2010-03-13
  • 打赏
  • 举报
回复
如果是实时视频,重发根本就不需要考虑
lazyter1 2010-03-13
  • 打赏
  • 举报
回复
如果需要rtcp支持丢包重发,需要扩展协议功能。

华为好像一个网站说这个技术,不过在我看来,既然你选择rtp over UDP,那么就是要做好了这个准备。

否则,直接用TCP的好了,并经搞一个介于TCP和UDP直接的一个只能分享重发机制,要花大把时间,而且也没有必要(我曾经写过一半,放弃了)。




Jasonshengxi 2010-03-11
  • 打赏
  • 举报
回复
回楼上,从连接上讲
tcp连接上一般是
a-b,
a-net -------- net-b
a -------- net-b
a-net -------- b
而udp在这个上受到的限制则小的多,适合与多层路由存在的连接

而从实时性而言,并不是发送端采集了25frame/s的视频,就必须25都发送出去,而是根据网络效果适当的丢帧,发送合适大小的码流,而接收端在维护缓冲情况下,适当要求重发是需要的,这样画面尽管会顿或说会卡,但不会有马赛克出现。
louyong0571 2010-03-09
  • 打赏
  • 举报
回复
回复楼主:呵呵,不好意思,我确实是外行,视频传输做过一点,不过用的是专网,所以用tcp也没什么大问题。要是网络复杂的话,确实还是不太适合的。
但是udp本身就是无连接的,用在外网穿透上面乱序丢包是不是问题更加严重呢。另外作为实时视频的话,重传貌似意义不大吧,数据一次重传过来都已经过时了呀。

ps:纯粹探讨,我也想学习这方面的知识。
Jasonshengxi 2010-03-08
  • 打赏
  • 举报
回复
引用 6 楼 louyong0571 的回复:
要是想丢包重传还是用tcp吧,UDP自己去做重传没必要的吧


louyong0571应该是没有做过视频传输的相关工作,使用tcp的确是可靠传输,不过这个可靠也是相对而言的,实际在网络状况不好下,tcp也有超时或连接错误。而且tcp在确保可靠传输上使用了过多的校验和严格的重发机制,这对于实时视频来说是不合适的。而且tcp也不适合做内外网穿透。还有就是tcp的发送方式也有一定的影响
使用udp,就是追求udp的迅速,如果算法合适,传输视频还是很合适的。现在重点是在包重发上,一直没有想到好的思路,不知有那位可以指导下~~
louyong0571 2010-03-08
  • 打赏
  • 举报
回复
要是想丢包重传还是用tcp吧,UDP自己去做重传没必要的吧
Jasonshengxi 2010-03-04
  • 打赏
  • 举报
回复
引用 1 楼 yanghehong 的回复:
引用楼主 jasonshengxi 的回复:最近在做视频传输的demo,已经完成了基于tcp的内外网连接和传输。现在想将udp部分也做进去,也下了jrtplib看了下,现在想了解下:   因为udp是不可靠传输的,内网下包乱序和丢失一般比较少,而外网环境复杂,丢包和乱序都有,而这部分差错检验,是由rtcp完成的?还有,jrtplib中的send和recv有做这部分工作么

UDP,以及基于UDP之上的RTP,既然用它们,那应该是容忍丢包的。RTCP貌似不是用来做差错检验,有点像事后诸葛亮,就是间隔一段时间将统计信息汇总一下做个反馈,当然收到RTCP的报告之后也许可以对发送速率做个调整。但这个发送速率的调整,以及接收速率的调整(缓冲,减少一些乱序和抖动...),应该是由上层来控制,所以RTP这层的Jrtplib应该不会做这个事情。


-千里孤行



谢谢千里的回复,的确就实时视频传输而言,udp传输错误的每一帧都重发是不行的。之前没看rtp前,我尝试实现过在接收端实现视频传输的错误处理和包重发机制,因为不重发意味着从错误的那帧开始到下一次i帧之前,后面图像都会有马赛克了。

现在看rtcp如果主要是做信息反馈,但是若仅是返回客户信息到服务器,让其调整发送速率。则做rtp岂不是总会出现马赛克情况?因为大部分编码机制一般都是有参考图像序列的,而udp的外网传输,很可能是经常丢包的?
UDX协议 2010-03-04
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20091130/12/0ea2c403-b7bd-4b27-bc17-6e5b5cd4cd55.html

新增加udp/p2p 可靠传输,bt相关技术群66192412 [
yinfuyong 2010-03-04
  • 打赏
  • 举报
回复
楼主说得很对啊

TCP会丢包 UDP更是会丢包的

会不会出现马赛克看程序员自己想办法了

RTP/RTCP 并没有说怎么个重传 因为流媒体里面 有时候包延迟也会被丢弃

流媒体选择了UDP就是因为快、简便,但是缺点就是会有比较严重的丢包
yanghehong 2010-03-03
  • 打赏
  • 举报
回复
对于你的标题,实时多媒体传输,应该都不重发的,这也是为什么使用UDP来做。
RTP包上面也打了时间戳,发现收到的包太过时了是需要丢掉的。




- 千里孤行
yanghehong 2010-03-03
  • 打赏
  • 举报
回复
引用楼主 jasonshengxi 的回复:
最近在做视频传输的demo,已经完成了基于tcp的内外网连接和传输。现在想将udp部分也做进去,也下了jrtplib看了下,现在想了解下:
  因为udp是不可靠传输的,内网下包乱序和丢失一般比较少,而外网环境复杂,丢包和乱序都有,而这部分差错检验,是由rtcp完成的?还有,jrtplib中的send和recv有做这部分工作么


UDP,以及基于UDP之上的RTP,既然用它们,那应该是容忍丢包的。RTCP貌似不是用来做差错检验,有点像事后诸葛亮,就是间隔一段时间将统计信息汇总一下做个反馈,当然收到RTCP的报告之后也许可以对发送速率做个调整。但这个发送速率的调整,以及接收速率的调整(缓冲,减少一些乱序和抖动...),应该是由上层来控制,所以RTP这层的Jrtplib应该不会做这个事情。



- 千里孤行

2,543

社区成员

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

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