RTP/RTCP学习笔记 -- RFC 3550
The MTU of RTP package payload is (IP) - (UDP) - = 1472
#define DEFAULT_MAX_PACKET_SIZE 1200
video: [WME] INFO: CWmeLocalVideoTrack::SetOption(WmeTrackOption_MaxPayloadSize) uMaxPayloadSize = , this=0x7f9efaf18e60
一、RTP
1. RTP包固定头部
------------------------------------------------------------------------------------
另外要注意几个细节:
1. RTP TS的时钟频率(clock rate)和media的采样频率(sample rate)可以不一致。对video来说,采样频率就是帧率,而时钟频率一般都是90k。对于audio,采样频率和时钟频率基本是一致的,但也有例外。
2. 所谓时钟频率,是指一个时钟在单位时间内的tick值,单位时间一般取一秒。以系统时钟为例,它的频率为1秒,或1000ms,或100k微妙;显而易见频率值依赖于tick的选取。
而对于video或audio,都存在一个RTP时钟,这个时钟有两个作用:
a. 指导media在接收端的播放,因此它必须和发送端的采样频率满足确定的关系;
b.用于media之间的sync,因此不同media的RTP时钟之间存在确定性的mapping,或者都可以映射到同一个基准时钟上。
这个基准时钟一般就是系统时钟。讲RTP时钟映射到系统时钟除了知道这两个时钟的各自频率外,还需要找一个时间对应点。
系统时钟的频率是已知的(比如1000毫秒), RTP时钟的频率由SDP通知,时间对应点有SR通知,SR里面给出了一个RTP时间值对应的系统时间值。
因此我们说video Rtp时间戳的单位是1/90000秒,其实是将RTP时钟单位映射到系统时钟上面,得到的两者之间的关系。我们可以定义RTP时钟的频率为90000R秒,而系统时钟的频率为1000000us。这样子RTP TS在RTP时钟里的单位是R秒,一R秒等于100/9u秒,等于1/90000秒
video的RTP时钟频率取值90000除了是采样频率的倍数外,另外的目的是为了提高时钟精度,所以取了很大的值
另外videoRTP TS的增长是按帧的,同一帧内的RTP包TS是一样的
------------------------------------------------------------------------------------
同步信源(SSRC)标识符:占32位,用于标识同步信源。该标识符是随机选择的,参加同一视频会议的两个同步信源不能有相同的SSRC。
关于这个SSRC和CSRC,在我们的wme里它是这么用的,SSRC是创建一个stream的时候产生的一个32Bit的一个随机数,1个stream对应一个SSRC,但是如果server mix audio or transcoding, RTP会被拆包再重新打包,那么这个SSRC是会被server改掉的,这种情况下,发送端和接收端的SSRC是不同的,其它情况,两端的SSRC应该是一样的。
这个CSRC对应的是一个device的一种code type. 比如,一个麦克风、一个摄象头的一种编码数据。CSI+Audio code type == CSRC.
在wme里,首先有个CSI这东东,是一个32bit的随机数,某字节置0 (TestConfig::i().m_csi = Random_uint & 0xFFFFFF00). Audio CSI = CSI, Video CSI = CSI + 1.
WME中 Video PayloadType = RTP_PT_H264 = 98,
二、5种RTCP包:
1. RTCP packet types
2. SR header
3. RR header
4. 其它:
RTP 使用偶数端口号接收发送数据,相应的RTCP则使用相邻的下一位奇数端口号。
5. Jitter的计算
6. RTT的计算
发送端发一个SR,接收端收到SR会回一个RR包
RTT = 收到一个RR包当前Tick - 上次发送SR的tick(RR包中的LSR) - RR包在server上的delay(RR包中的DLSR = 发送RR的tick值-收到上个SR的tick值)
RTP/RTCP学习笔记 -- RFC 3550的更多相关文章
- ICE学习笔记 -- RFC 5245
RFC 5245 ICE 1, offer/answer model 2, ICE Step: 1) 产生候选地址(1.公网 2.NAT反射 3.Relay转发地址) Generate ca ...
- DTLS学习笔记 -- RFC 4347- 6347
想学习一下dtls,是因为想以后没有公司免费VPN可用的时候,我能买一个主机,自己建一个VPN. 1.介绍 Web, email大多用TLS协议来做安全的网络传输,它们必须跑在可靠的TCP传输通道里. ...
- SIP学习笔记 -- RFC 3261
1.SDP (rfc 4566) 1)用于交换参数 2)内容分三部分Session description, Time description and Media description ...
- XMPP学习笔记 -- RFC 6120
XMPP - Extensible Messaging and Presence Protocol 1. 中文版3920 http://wiki.jabbercn.org/RFC3920 2. 大部分 ...
- (转)live555学习笔记10-h264 RTP传输详解(2)
参考: 1,live555学习笔记10-h264 RTP传输详解(2) http://blog.csdn.net/niu_gao/article/details/6936108 2,H264 sps ...
- dtls_srtp学习笔记
注:以下为rfc5764的学习笔记,不保证完全正确. DTLS-SRTP是DTLS的一个扩展,将SRTP加解密与DTLS的key交换和会话管理相结合.从SRTP的角度看,是为其提供一种新的key协商管 ...
- RTP, RTCP, RTSP 协议介绍
流媒体是边下载边播放的方式, 是视频会议.IP电话等应用场合的技术基础. 为什么TCP/IP协议就不能满足多媒体通信的要求呢?因为TCP有以下4个特点:1.TCP重传机制2.TCP ...
- TCP/IP详解学习笔记 这位仁兄写得太好了
TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣 ...
- 【转载】 IP实时传输协议RTP/RTCP详解
http://www.chinaitlab.com/cisco/RIP/832426.html 1.简介 目前,在IP网络中实现实时语音.视频通信和应用已经成为网络应用的一个主流技术和发展方向,本文详 ...
随机推荐
- T1155 金明的预算方案 codevs
累~~~ http://codevs.cn/problem/1155/ 题目描述 Description 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高 ...
- Codeforces Round #321 (Div. 2) Kefa and First Steps 模拟
原题连接:http://codeforces.com/contest/580/problem/A 题意: 给你一个序列,问你最长不降子串是多长? 题解: 直接模拟就好了 代码: #include< ...
- linux几种常见的文件内容查找和替换命令
作为一个以前没怎么接触过linux的小白,开始使用linux,各种不习惯,这周遇到一个文件内容测查找和替换的需求.学习了以下几种实现方式: 1.vi命令下的查找和替换 1.1 vi下的查找 /patt ...
- 邁向IT專家成功之路的三十則鐵律 鐵律六:求全求盈之道-佈施
如果您只是在IT方面的專業技術與經驗相當高超,而不懂得在日常生活之中當一位俠義肝膽之人,來隨時隨地伸手幫助身旁需要幫助的人,那麼您只能算是一位有勇有謀但卻無智慧的匹夫罷了.既是匹夫那麼即便成功也會是短 ...
- iOS -- SKPhysicsWorld类
SKPhysicsWorld类 继承自 NSObject 符合 NSCodingNSObject(NSObject) 框架 /System/Library/Frameworks/SpriteKit. ...
- SilverLight:基础控件使用(4)-日期显示和选择类控件
ylbtech-SilverLight-Basic-Control:基础控件使用(4)-日期显示和选择类控件 Calendar,DatePicker 1.A,返回顶部 Calendar控件(日期控件) ...
- 直接返回list不封装的结果集
直接返回list不封装的结果集,在Jsp访问方式: 1.封装成map访问 2.用jstl: <c:forEach var="images" items="${lis ...
- 编码知识 (Unicode、UTF-8、ANSI)
1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte). ...
- 【转】VMware 11.0 简体中文版|附永久密钥
VMware 11.0 简体中文版|附永久密钥 昨天,VMware虚拟机11.0 简体中文版正式发布,值得注意的是新版抛弃了32位系统支持,安装包体积大幅减小, 新增Windows 10 技术预览版支 ...
- Laravel建站02--配置Laravel
Laravel项目的根目录下有.env文件,如果没有可以把.env.example改名为.env 这个文件是配置文件,可以把app_key.数据库.redis缓存等配置信息写在这个文件里. 目前5.4 ...