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网络中实现实时语音.视频通信和应用已经成为网络应用的一个主流技术和发展方向,本文详 ...
随机推荐
- HTTP/1.1标准请求方法和状态码
HTTP/1.1标准自从1999年制定以来至今仍然是一个应用广泛并且通行的标准 相关文档 RFC2616:Hypertext Transfer Protocol -- HTTP/1.1 在RFC658 ...
- mac 下删除xcode后使用git
1. http://blog.bobbyallen.me/2014/03/07/how-to-install-git-without-having-to-install-xcode-on-macosx ...
- 某考试 T3 sine
推完一波式子之后发现是个矩阵23333. 其实只要发现是矩阵之后就是个水题了. #include<bits/stdc++.h> #define ll long long using nam ...
- java单例模式教程之java实现单例模式的8大方法
单例模式是Java中常用的设计模式之一.单例模式属于创建型模式,它提供了一种创建对象的最佳方式. 单例模式只创建类的一个对象,之后在一定范围为可任意调用,确保只有单个对象被创建.这个类提供了一种访问其 ...
- iphone坐标系统
1,基本概念 CGPoint{x,y};空间中的位置,通过x和y坐标定义 CGSize{width, height}; 大小,通过宽度和高度定义 CGRect{origin, size};位置和大小, ...
- mysql 安装配置及经常使用操作
作为关系型数据库的一种,mysql因其占用内存小和开源等特性而兴起.以下简介下关于mysql配置和简单的操作. mysql配置 1.安装文件的下载 免安装版下载地址 :http://dev.mysql ...
- 很多shell命令后面的单横杠和双横杠,原来这个意思
原文: https://blog.csdn.net/deyili/article/details/5471023 ------------------------------------------- ...
- [Algorithom] Stack Data Structure in JavaScript
A stack is a collection of items that obeys the principle of "last in, first out". Like a ...
- myeclipse2014破解
去年出现的struts2 bug问题,在过去的项目中一直没做调整,前段时间发现受到影响了.本想这个bug都已经这么长时间了,工具中的包应该也已经被替换了吧,于是下载了最新的myeclipse2014, ...
- 怎样高效利用GitHub(非常多资料可供下载)
正是Github.让社会化编程成为现实.本文尝试谈谈GitHub的文化.技巧与影响. Q1:GitHub是什么 Q2:GitHub风格 Q3: 在GitHub.怎样跟牛人学习 Q4: 享受纯粹的写作与 ...