RTP packet

RTP是基于UDP协议的,RTP服务器会通过UDP协议,通常每次会发送一个RTP packet。客户端通过解析RTP packet,读取其中的数据然后进行播放了。

RTP packet的结构如下:

  1. RTP Header:RTP 包的头部
  2. contributing sources:个数为0-n个,所以可以为空。具体定义参考rfc3550
  3. 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相关推荐

  1. 自己动手写RTP服务器——关于RTP协议

    本文会带领着你一步步动手实现一个简单的RTP传输服务器,旨在了解RTP流媒体传输协议以及一些关于多媒体编解码的知识. 关于RTP协议的必备知识 要动手实现一个协议,当然首先需要阅读该协议的文档.RTP ...

  2. 关于RTP的一些背景知识

    原文来自 rtp-i-intro-rtp-and-sdp rtp-ii-streaming-ffmpeg 周末本来想弄一下译文的,然后堂弟过来,消耗了不少时间在社交上,另一半时间是在研究turn se ...

  3. RTP协议介绍以及C语言实现具有发送H.264视频功能的RTP服务器

    RTP封装H.264视频规范以及C语言实现 以前上学时间做嵌入式开发板Hi3516A的流媒体项目,现在又突然想起来,不想学过就忘了浪费了,所以又自己实现了一遍读取本地视频文件发送RTP视频流的程序,算 ...

  4. MirrorLink(三 UPNP)-- 使用

    1.使用libupnp,首先发现设备: 可以获取到一些信息: ApplicationServer相关信息: serviceType : urn:schemas-upnp-org:service:TmA ...

  5. [live555] 谈一谈 SERVER RTP+NALU 分包过程

    ##前言 live555 处理 请求消息 四 "PLAY" 续 中已经写了start stream 流程,但是没有专门写RTP 包完整的组成过程 当我写完流程图,自己都吓了一跳,这 ...

  6. rtsp中的rtp发送和head理解

    服务器端的sendto 首先要得到客户端的IP地址和端口号 struct sockaddr_in server;server.sin_family=AF_INET;server.sin_port=ht ...

  7. 证书在 Exchange 2007 Server 中的使用

    适用于: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2 ...

  8. Darwin Streaming Server服务器mp4文件点播返回”415 Unsupported Media Type“错误

    Darwin Streaming Server中mp4文件点播失败,通过抓包发现服务器返回"415 Unsupported Media Type"错误,如下: RTSP/1.0 4 ...

  9. 基于SIP和RTP协议的开源VOIP之QuteCom简单介绍

    **************************************************************************************************** ...

最新文章

  1. 控制结构(1)-判断控制
  2. ajax、json一些整理(3)
  3. (Java集合框架)Map集合
  4. 光端机的分类有哪些?
  5. 【DevCloud · 敏捷智库】两种你必须了解的常见敏捷估算方法
  6. SpringMVC框架----ModelAttribute注解
  7. scp命令和rsync命令
  8. python自定义损失函数_自定义损失函数sklearn
  9. java 多表联合查询后的结果的结果放入list里 如何拿出来_联表查询出来的结果集合放入两个POJO中然后放入List里,然后在JSP里显示出来。高手请进……急……在线等!...
  10. 一文读懂矩阵的特征分解
  11. stm32f103c8t6开发版点亮oled屏幕工程文件_OLED液晶屏如何显示中文呢
  12. QTP11.5/UFT官方下载与安装
  13. beetl模板使用场景_Beetl模板引擎入门教程
  14. js 异步 回调函数
  15. 如何让新建网站被搜索引擎快速收录
  16. Weighted Boxes Fusion 源码解析
  17. 七年级计算机上册知识题,Word综合应用复习七年级信息技术上册教案
  18. 在IE8中使用建行企业网银的解决方法
  19. SpringBoot+Vue+Mybatis-plus 博客(一):完成博客后台前端登录页面、后端登录接口
  20. 浅谈微信三级分销系统的漏洞

热门文章

  1. C语言字符串函数strcat | strcpy | strlen | strcmp的用法及原型
  2. Linux sftp命令
  3. php扇形统计图怎么做,PHP实现绘制3D扇形统计图及图片缩放实例_php实例
  4. 计算机图形学常用算法实现11 扫描线z-buffer算法
  5. Required field ‘client_protocol‘ is unset 原因探究
  6. 华虹半导体发力国际MCU市场
  7. 【jmeter】 --- jmeter使用详解
  8. 智能货架安全监测系统
  9. 数据结构和算法——kd树
  10. 正则匹配两个字符之间的字符串