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网络中实现实时语音.视频通信和应用已经成为网络应用的一个主流技术和发展方向,本文详 ...
随机推荐
- 文艺平衡树(Splay)
题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1, ...
- C# 生成二维码(带Logo)
C# 生成二维码(带Logo) 第一种方式 我们需要引用 ThoughtWorks.QRCode.dll 生成带logo二维码(framework4.0以上) 下载地址:https://pan.ba ...
- kafka生产者客户端
kafka的生产者 1. 生产者客户端开发 熟悉kafka的朋友都应该知道kafka客户端有新旧版本,老版本采用scala编写,新版本采用java编写.随着kafka版本的升级,旧版本客户端已经快 ...
- fastscript增加三方控件之二
fastscript增加三方控件之二 unit fs_BsDataSet; interface {$i fs.inc} uses SysUtils, Classes, fs_iinterpreter, ...
- 2.【nuxt起步】-初始化创建nuxt项目
1. 脚手架初始化: vue init nuxt-community/starter-template NuxtMyms 2.输入项目相关信息 3.切换到项目目录下 安装依赖 Cd nuxtmyms ...
- nexus启动报错----->错误 1067: 进程意外终止。
1.今天启动nexus报错: 2.错误信息 错误 1067: 进程意外终止. 3.检查发现我之前把jdk升级了. 然而nexus之前指定的jdk将不再生效. 4.解决的方法 找到nexus安装文件夹 ...
- SQL_字符操作函数
原创作品.出自 "深蓝的blog" 博客.欢迎转载,转载时请务必注明下面出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlo ...
- react 自定义 百度地图(BMap)组件
1.html 页面引入 相关js public/index.html <!DOCTYPE html> <html lang="en"> <head&g ...
- 使用Golang利用ectd实现一个分布式锁
http://blog.codeg.cn/post/blog/2016-02-24-distrubute-lock-over-etcd/ By zieckey · 2016年02月24日 · 1205 ...
- python去除停用词(结巴分词下)
python 去除停用词 结巴分词 import jieba #stopwords = {}.fromkeys([ line.rstrip() for line in open('stopword. ...