rtp server
RTP packet
RTP是基于UDP协议的,RTP服务器会通过UDP协议,通常每次会发送一个RTP packet。客户端通过解析RTP packet,读取其中的数据然后进行播放了。
RTP packet的结构如下:
- RTP Header:RTP 包的头部
- contributing sources:个数为0-n个,所以可以为空。具体定义参考rfc3550
- RTP payload:即RTP要传输的数据
RTP Header
这是RTP流的头部,在网上搜索RTP格式,就会搜到很多文章介绍这个头部的定义。我们这里参考rfc3550的定义,在5.1节(http://tools.ietf.org/html/rfc3550#section-5.1)。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X| CC |M| PT | sequence number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| synchronization source (SSRC) identifier |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
| contributing source (CSRC) identifiers |
| .... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
每行是32 bits,由此可以直观看到每个表示部分所占的位数。简单介绍一下:
V(version):2 bits,RTP的版本,这里统一为2
P(padding):1 bit,如果置1,在packet的末尾被填充,填充有时是方便一些针对固定长度的算法的封装
X(extension):1 bit,如果置1,在RTP Header会跟着一个header extension
CC(CSRC count): 4 bits,表示头部后contributing sources的个数
M(marker): 1 bit,具体这位的定义会在一个profile里
PT(playload type): 7 bits,表示所传输的多媒体的类型,对应的编号在另一份文档rfc3551中有列出(http://tools.ietf.org/html/rfc3551)
sequence number: 16 bits,每个RTP packet的sequence number会自动加一,以便接收端检测丢包情况
timestamp: 32 bits,时间戳
SSRC: 32 bits,同步源的id,没两个同步源的id不能相同
CSRC: 上文说到,个数由CC指定,范围是0-15
以上的一些概念是一些要实现RTP服务器所必备的知识。介绍的非常简略,详细的定义还是要参考rfc3550原文。
例子:
public RtpSocket() throws IOException {
/* Version(2) Padding(0) */
/* ^ ^ Extension(0) */
/* | | ^ */
/* | -------- | */
/* | |--------------------- */
/* | || -----------------------> Source Identifier(0) */
/* | || | */
buffer[0] = (byte) Integer.parseInt("10000000",2);
/* Payload Type */
buffer[1] = (byte) 96;
/* Byte 2,3 -> Sequence Number */
/* Byte 4,5,6,7 -> Timestamp */
/* Byte 8,9,10,11 -> Sync Source Identifier */
setLong((ssrc=(new Random()).nextInt()),8,12);
usock = new MulticastSocket();
upack = new DatagramPacket(buffer, 1);
}
rtp server相关推荐
- 自己动手写RTP服务器——关于RTP协议
本文会带领着你一步步动手实现一个简单的RTP传输服务器,旨在了解RTP流媒体传输协议以及一些关于多媒体编解码的知识. 关于RTP协议的必备知识 要动手实现一个协议,当然首先需要阅读该协议的文档.RTP ...
- 关于RTP的一些背景知识
原文来自 rtp-i-intro-rtp-and-sdp rtp-ii-streaming-ffmpeg 周末本来想弄一下译文的,然后堂弟过来,消耗了不少时间在社交上,另一半时间是在研究turn se ...
- RTP协议介绍以及C语言实现具有发送H.264视频功能的RTP服务器
RTP封装H.264视频规范以及C语言实现 以前上学时间做嵌入式开发板Hi3516A的流媒体项目,现在又突然想起来,不想学过就忘了浪费了,所以又自己实现了一遍读取本地视频文件发送RTP视频流的程序,算 ...
- MirrorLink(三 UPNP)-- 使用
1.使用libupnp,首先发现设备: 可以获取到一些信息: ApplicationServer相关信息: serviceType : urn:schemas-upnp-org:service:TmA ...
- [live555] 谈一谈 SERVER RTP+NALU 分包过程
##前言 live555 处理 请求消息 四 "PLAY" 续 中已经写了start stream 流程,但是没有专门写RTP 包完整的组成过程 当我写完流程图,自己都吓了一跳,这 ...
- rtsp中的rtp发送和head理解
服务器端的sendto 首先要得到客户端的IP地址和端口号 struct sockaddr_in server;server.sin_family=AF_INET;server.sin_port=ht ...
- 证书在 Exchange 2007 Server 中的使用
适用于: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2 ...
- Darwin Streaming Server服务器mp4文件点播返回”415 Unsupported Media Type“错误
Darwin Streaming Server中mp4文件点播失败,通过抓包发现服务器返回"415 Unsupported Media Type"错误,如下: RTSP/1.0 4 ...
- 基于SIP和RTP协议的开源VOIP之QuteCom简单介绍
**************************************************************************************************** ...
最新文章
- 控制结构(1)-判断控制
- ajax、json一些整理(3)
- (Java集合框架)Map集合
- 光端机的分类有哪些?
- 【DevCloud · 敏捷智库】两种你必须了解的常见敏捷估算方法
- SpringMVC框架----ModelAttribute注解
- scp命令和rsync命令
- python自定义损失函数_自定义损失函数sklearn
- java 多表联合查询后的结果的结果放入list里 如何拿出来_联表查询出来的结果集合放入两个POJO中然后放入List里,然后在JSP里显示出来。高手请进……急……在线等!...
- 一文读懂矩阵的特征分解
- stm32f103c8t6开发版点亮oled屏幕工程文件_OLED液晶屏如何显示中文呢
- QTP11.5/UFT官方下载与安装
- beetl模板使用场景_Beetl模板引擎入门教程
- js 异步 回调函数
- 如何让新建网站被搜索引擎快速收录
- Weighted Boxes Fusion 源码解析
- 七年级计算机上册知识题,Word综合应用复习七年级信息技术上册教案
- 在IE8中使用建行企业网银的解决方法
- SpringBoot+Vue+Mybatis-plus 博客(一):完成博客后台前端登录页面、后端登录接口
- 浅谈微信三级分销系统的漏洞
热门文章
- C语言字符串函数strcat | strcpy | strlen | strcmp的用法及原型
- Linux sftp命令
- php扇形统计图怎么做,PHP实现绘制3D扇形统计图及图片缩放实例_php实例
- 计算机图形学常用算法实现11 扫描线z-buffer算法
- Required field ‘client_protocol‘ is unset 原因探究
- 华虹半导体发力国际MCU市场
- 【jmeter】 --- jmeter使用详解
- 智能货架安全监测系统
- 数据结构和算法——kd树
- 正则匹配两个字符之间的字符串