通过RTCP进行媒体流实时丢包重传的方法
2017-04-15 17:14
429 查看
在RTP/RTCP传输媒体流的过程中,RTCP报文的主要作用在于RR(ReceiverReport),即接收者报告,来反馈统计收到包的数量,丢包数量等信息,来使发送者来及时的调整编码策略,但是由于RTCP的发送间隔为固定间隔,通常为分配给RTCP的连接带宽固定为5%,大致为2-5秒左右一包,并不能用于实时的丢包反馈。
但是,在RTCP的SDES(SourceDescription)报文中,有Type为NOTE类型的报文,此报文可以添加自定义的内容,发送端借助分析报文,可以实现实时的丢包重传机制。
在RTCP添加的Text中定位为30个字节,其中ea8a为60042,表示接收的端口,01表示一个包,fccc为包序号,为64716。含义为:“再给接收端为60042端口上发1个序号为64716的rtp包”,如下图所示
![](https://img-blog.csdn.net/20170415170749713?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZG9uZ19iZWlqaW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
发送端,可以解析这个RTCP的text包,来重传序号为64716的rtp包,如下:
![](https://img-blog.csdn.net/20170415171222169?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZG9uZ19iZWlqaW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
在RTCP之后,可见Seq为64716的RTP包。
由于RTCP基于UDP实现,时延较小,但是与传统的基于tcp传输的丢包重传机制相比,RTCP存在丢包的风险。
但是,在RTCP的SDES(SourceDescription)报文中,有Type为NOTE类型的报文,此报文可以添加自定义的内容,发送端借助分析报文,可以实现实时的丢包重传机制。
在RTCP添加的Text中定位为30个字节,其中ea8a为60042,表示接收的端口,01表示一个包,fccc为包序号,为64716。含义为:“再给接收端为60042端口上发1个序号为64716的rtp包”,如下图所示
发送端,可以解析这个RTCP的text包,来重传序号为64716的rtp包,如下:
在RTCP之后,可见Seq为64716的RTP包。
由于RTCP基于UDP实现,时延较小,但是与传统的基于tcp传输的丢包重传机制相比,RTCP存在丢包的风险。
相关文章推荐
- 对HTML 通过GET 方法进行提交后,对信息进行解码JAVA类
- 通过代码对远程机器的磁盘信息进行访问的方法
- js代码应用:通过方法类,域等对function进行分割
- Java基础之IO流,通过字节流缓冲区进行媒体文件的复制操作
- Java基础之IO流,通过字节流对媒体文件进行复制操作
- uC/OS-II实时操作系统在嵌入式平台上进行移植的一般方法和技巧
- 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
- !!c# 委托与多线程 -- 相比background来说,本方法针对当需要通过异步代理发起UI操作,而后线程中进行sleep操作的时使用
- EntLib Validation Application Block 01 通过配置文件,自行指定对象自身方法进行验证
- 通过POST方法查看web网站的安全性(有针对性的进行)
- 对HTML 通过GET 方法进行提交后,对信息进行解码JAVA类
- 通过互联网进行产品比较选购的方法
- 通过互联网进行产品比较选购的方法
- 使用XILINX SDK工具通过网络进行基于linux系统的远程调试方法
- xcode 4 最低的要求是 10.6.6的版本,如果你是 10.6.3的版本,又不想升级的话。可以考虑通过修改版本号的方法进行安装
- 对HTML 通过GET 方法进行提交后,对信息进行解码JAVA类
- AS3 通过方法名称 进行调用
- Matlab函数间通过workspace进行数据共享的方法
- 浅谈android通过修改framework-res.apk进行美化的方法
- Linux下Java 通过JNI native与C进行交互的方法实现示例