Webrtc(7) 实时视频传输中的RTCP协议
2015-07-24 15:37
627 查看
我以前主要研究语音,语音中常用的RTCP包主要有SR/RR/SDES/BYE/APP/XR,主要由RFC 3611和RFC 3550定义。
而视频中常用的RTCP包比语音要多很多,语音的RTCP主要用于状态传递,统计数据。而视频中的RTCP更多赋予了控制功能,比如关键帧请求,码率控制等等。
本文不介绍语音中的RTCP,只介绍视频中的RTCP包。
这些报文遵守RFC4585和RFC5104协议。
第一类:关键帧请求
主要包括SLI/PLI/FIR,作用是在关键帧丢失无法解码时,请求发送方重新生成并发送一个关键帧。
这本质是一种重传,但是跟传输层的重传的区别是,它重传是最新生成的帧。
PLI 是Picture Loss Indication,SLI 是Slice Loss Indication。
发送方接收到接收方反馈的PLI或SLI需要重新让编码器生成关键帧并发送给接收端。
FIR 是Full Intra Request,这里面Intra的含义可能很多人不知道。
Intra的含义是图像内编码,不需要其他图像信息即可解码;Inter指图像间编码,解码需要参考帧。
故Intra Frame其实就是指I帧,Inter Frame指P帧或B帧。
那么为什么在PLI和SLI之外还需要一个FIR呢?
原因是使用场景不同,FIR更多是在一个中心化的Video Conference中,新的参与者加入,就需要发送一个FIR,其他的参与者给他发送一个关键帧这样才能解码,
而PLI和SLI的含义更多是在发生丢包或解码错误时使用。
第二类:重传请求
主要包括RTX/NACK/RPSI
这个重传跟关键帧请求的区别是它可以要求任意帧进行重传
第三类:码率控制
主要包括REMB/TMMBR/TMMBN
TMMBR是Temporal Max Media Bitrate Request,表示临时最大码率请求。表明接收端当前带宽受限,告诉发送端控制码率。
REMB是ReceiverEstimated Max Bitrate,接收端估计的最大码率。
TMMBN是Temporal Max Media Bitrate Notification
另外,除了关键帧请求和重传,Webrtc还支持RED/FEC等冗余编码和前向纠错手段来保证视频质量,后续有空了再写。
而视频中常用的RTCP包比语音要多很多,语音的RTCP主要用于状态传递,统计数据。而视频中的RTCP更多赋予了控制功能,比如关键帧请求,码率控制等等。
本文不介绍语音中的RTCP,只介绍视频中的RTCP包。
这些报文遵守RFC4585和RFC5104协议。
第一类:关键帧请求
主要包括SLI/PLI/FIR,作用是在关键帧丢失无法解码时,请求发送方重新生成并发送一个关键帧。
这本质是一种重传,但是跟传输层的重传的区别是,它重传是最新生成的帧。
PLI 是Picture Loss Indication,SLI 是Slice Loss Indication。
发送方接收到接收方反馈的PLI或SLI需要重新让编码器生成关键帧并发送给接收端。
FIR 是Full Intra Request,这里面Intra的含义可能很多人不知道。
Intra的含义是图像内编码,不需要其他图像信息即可解码;Inter指图像间编码,解码需要参考帧。
故Intra Frame其实就是指I帧,Inter Frame指P帧或B帧。
那么为什么在PLI和SLI之外还需要一个FIR呢?
原因是使用场景不同,FIR更多是在一个中心化的Video Conference中,新的参与者加入,就需要发送一个FIR,其他的参与者给他发送一个关键帧这样才能解码,
而PLI和SLI的含义更多是在发生丢包或解码错误时使用。
第二类:重传请求
主要包括RTX/NACK/RPSI
这个重传跟关键帧请求的区别是它可以要求任意帧进行重传
第三类:码率控制
主要包括REMB/TMMBR/TMMBN
TMMBR是Temporal Max Media Bitrate Request,表示临时最大码率请求。表明接收端当前带宽受限,告诉发送端控制码率。
REMB是ReceiverEstimated Max Bitrate,接收端估计的最大码率。
TMMBN是Temporal Max Media Bitrate Notification
另外,除了关键帧请求和重传,Webrtc还支持RED/FEC等冗余编码和前向纠错手段来保证视频质量,后续有空了再写。
相关文章推荐
- http://bbs.ednchina.com/BLOG_345002072_2001308.HTM
- HttpServlet详解
- iOS UIAppearance使用详解(来自http://blog.sina.com.cn/s/blog_9693f61a0101f1rs.html)
- 转-深入理解VMware虚拟网络
- 网络编程
- mysql启动错误[Bind on TCP/IP port:...]
- java发送http的get、post请求
- 简单网络爬虫程序
- android中检测网络连接状态简单总结
- LoadRunner中请求HTTPS页面。
- The type or namespace name 'Description' does not exist in the namespace 'System.Web.Http'
- HttpClient使用例子
- 相对路径 System.Web HttpServerUtilityBase Server.MapPath("~/")
- Linux下高性能网络编程中的几个TCP/IP选项_SO_REUSEADDR、SO_RECVBUF、SO_SNDBUF、SO_KEEPALIVE、SO_LINGER、TCP_CORK、TCP_NODE
- 网络上一些基本知识的理解
- charles工具https抓包教程
- HTTP 状态码
- charles工具抓包教程(http跟https)
- java模拟http调用百度识图
- 开发工具-网络封包分析工具Charles