RTCP
由于我对全部协议内容没有过多涉及,这里只记录跟时间戳同步相关的,后续有时间精力再补充首先还是从TCP方式接收的RTSP包分析:
【【音视频】RTCP】
文章图片
由图可以分析出,当
channel identifier
是0x01
时,说明是RTCP数据包。RTCP 数据包格式
该规范定义了几种 RTCP 数据包类型来承载多种控制信息:
SR:发送者报告,用于发送和接收的统计信息
作为活跃发送者的参与者
RR: 接收者报告,用于接收参与者的统计信息
SDES: 源描述项,包括CNAME
BYE: 表示参与结束
APP: 特定于应用程序的功能
这个是通用的RTCP包格式,了解即可
文章图片
版本号(V):对于当前版本的RTP协议,版本号为2(截止到本书编纂为止),目前还 没有推出新版本的计划,并且之前的版本并没有广泛的被使用.
填充(P):填充位表示,所要填充的数据已经超出了目前所能容纳的位数。如果此位 被设置为1,那么意味着包尾已经被一个或多个八位字节填充,最后一位八位所填充的 内容表示此包的总数大小。
条目计数(IC):某些包类型中包含了一个list的条目,可能作为固定的、用于特定类 型的信息的补充。这些条目字段需要标示出包中包含的条目的总数(这个字段在不同的 包中有不同的命名方法,这取决于具体如何使用此字段)。每个RTCP包最多包含31个 条目,同时也受到MTU(maximum transmission unit)的限制。如果需要传输超过31 个条目的场景,那么应用程序必须生成多个RTCP包。Item Count字段为0的时候表示此包中的条目为空(但是并不意味着包中内容为空)。如果不需要Item count字段那么此字段可以用于其他的目的。
包类型(PT):此字段标识了传输的包中所携带的信息的类型。在RTP的规范中定义了 五种标准数据包类型,将来可能还会定义其他的类型(例如,报告额外统计信息或者传 递其他特定源的信息)。
长度:此字段标识包头之后的内容总长度。因为所有的RTCP的数据包的长度必须为32 位的整数倍,所以这个字段放的是32位字的个数,因为如果按照八位字节计算会出现 此字段和总长度不一致的情况。0是一个有效长度,表示这个包只包含4个8位字节的包 头(包头字段IC在这种情况下也是0)。
发送端(流媒体服务器)以一定的频率发送
RTCP SR(Sender Report)
这个包给接收端(例如浏览器),所以我主要介绍这个类型的RTCP包。文章图片
SR包内包含一个RTP时间戳和对应的NTP时间戳,可以用
音视频同步(TODO)
参考文章
- 使用rtcp实现音视频同步
推荐阅读
- 一起来试玩!在线可编程交互的实时音视频 Web SDK 入门教程
- Android音视频学习第7章(使用OpenSL ES进行音频解码)
- android音视频点/直播模块开发
- Mac|Adobe Premiere Pro 2021 for Mac v15.4.1 强大的视频编辑软件
- FFmpeg音视频|Qt结合FFmpeg转码码流数据(h264)生成不同视频格式(mp4、mov、flv、avi等)
- ffmpeg|bilibili缓存视频批量转换成mp4格式,方便学习
- 音视频|【音频】削波失真(爆音)问题定位与解决
- 音视频|AMR数据多帧封装成RTP数据
- 音视频|wireshark抓取rtp流保存为.264文件并播放