当前位置: 首页 > 编程日记 > 正文

实时传输协议(RTP)

RTP简介


RTP是一种提供端对端传输服务的实时传输协议,用来支持在单目标广播和多目标广播网络服务中传输实时数据,而实时数据的传输则由RTCP协议来监视和控制。


RTP定义在RFC


使用RTP协议的应用程序运行在RTP之上,而执行RTP的程序运行在UDP的上层,目的是为了使用UDP的端口号和检查和。如图1所示,RTP可以看成是传输层的子层。由多媒体应用程序生成的声音和电视数据块被封装在RTP信息包中,每个RTP信息包被封装在UDP消息段中,然后再封装在IP数据包中。


信息包的结构包含广泛用于多媒体的若干个域,包括声音点播(audio-on-demand)、影视点播(video on demand)、因特网电话(Internet telephony)和电视会议(videoconferencing)。RTP的规格没有对声音和电视的压缩格式制定标准,它可以被用来传输普通格式的文件。例如,WAV或者GSM(Global System for Mobile communications)格式的声音、MPEG-1和MPEG-2的电视,也可以用来传输专有格式存储的声音和电视文件。


image:bk064411l-1.jpg


从应用开发人员的角度来看,可把RTP执行程序看成是应用程序的一部分,因为开发人员必需把RTP集成到应用程序中。在发送端,开发人员必需把执行RTP协议的程序写入到创建RTP信息包的应用程序中,然后应用程序把RTP信息包发送到UDP的套接接口(socket interface),如图2所示;同样,在接收端,RTP信息包通过UDP套接接口输入到应用程序,因此开发人员必需把执行RTP协议的程序写入到从RTP信息包中抽出媒体数据的应用程序。

image:bk064411l-2.jpg


现以用RTP传输声音为例来说明它的工作过程。假设音源的声音是64 kb/s的PCM编码声音,并假设应用程序取20毫秒的编码数据为一个数据块(chunk),即在一个数据块中有160个字节的声音数据。应用程序需要为这块声音数据添加RTP标题生成RTP信息包,这个标题包括声音数据的类型、顺序号和时间戳。然后RTP信息包被送到UDP套接接口,在那里再被封装在UDP信息包中。在接收端,应用程序从套接接口处接收RTP信息包,并从RTP信息包中抽出声音数据块,然后使用RTP信息包的标题域中的信息正确地译码和播放声音。


如果应用程序不使用专有的方案来提供有效载荷类型(payload type)、顺序号或者时间戳,而是使用标准的RTP协议,应用程序就更容易与其他的网络应用程序配合运行,这是大家都希望的事情。例如,如果有两个不同的公司都在开发因特网电话软件,他们都把RTP合并到他们的产品中,这样就有希望:使用不同公司电话软件的用户之间能够进行通信。


这里需要强调的是,RTP本身不提供任何机制来确保把数据及时递送到接收端或者确保其他的服务质量,它也不担保在递送过程中不丢失信息包或者防止信息包的次序不被打乱。的确,RTP的封装只是在系统端才能看到,中间的路由器并不区分那个IP数据报是运载RTP信息包的。


RTP允许给每个媒体源分配一个单独的RTP信息包流,例如,摄像机或者麦克风。例如,有两个团体参与的电视会议,这就可能打开4个信息包流:两台摄像机传送电视流和两个麦克风传送声音流。然而,许多流行的编码技术,包括MPEG-1和MPEG-2在编码过程中都把声音和电视图像捆绑在一起以形成单一的数据流,一个方向就生成一个RTP信息包流。


RTP信息包没有被限制只可应用于单目标广播,它们也可以在一对多(one-to-many)的多目标广播树或者在多对多(many-to-many)的多目标广播树上传送。例如,多对多的多目标广播,在这种应用场合下,所有发送端通常都把他们的RTP信息包流发送到具有相同多目标广播地址的多目标广播树上。


RTP信息包标题域


RTP标题由4个信息包标题域和其他域组成:有效载荷类型(payload type)域,顺序号(sequence number)域,时间戳(timestamp)域和同步源标识符(Synchronization Source Identifier)域等。RTP信息包的标题域的结构如下图所示:


image:bk064411l-3.jpg


1. 有效载荷类型


RTP信息包中的有效载荷域(Payload Type Field)的长度为7位,因此RTP可支持128种不同的有效载荷类型。对于声音流,这个域用来指示声音使用的编码类型,例如PCM、自适应增量调制或线性预测编码等等。如果发送端在会话或者广播的中途决定改变编码方法,发送端可通过这个域来通知接收端。表1列出了目前RTP所能支持的声音有效载荷类型。


表1 目前RTP所能支持的声音有效载荷类型

image:bk064411l-4.jpg


对电视流,有效载荷类型可以用来指示电视编码的类型,例如motion JPEG, MPEG-1,MPEG-2或者H.231等等。发送端也可以在会话或者期间随时改变电视的编码方法。表16-02列出了目前RTP所能支持的某些电视有效载荷类型。


表2 目前RTP所能支持的声音有效载荷类型

image:bk064411l-5.jpg


2. 顺序号


顺序号(Sequence Number Field)域的长度为16位。每发送一个RTP信息包顺序号就加1,接收端可以用它来检查信息包是否有丢失以及按顺序号处理信息包。例如,接收端的应用程序接收到一个RTP信息包流,这个RTP信息包在顺序号86和89之间有一个间隔,接收端就知道信息包87和88已经丢失,并且采取措施来处理丢失的数据。


3. 时间戳


时间戳(Timestamp)域的长度为32字节。它反映RTP数据信息包中第一个字节的采样时刻(时间)。接收端可以利用这个时间戳来去除由网络引起的信息包的抖动,并且在接收端为播放提供同步功能。


4. 同步源标识符


同步源标识符(Synchronization Source Identifier,SSRC)域的长度为32位。它用来标识RTP信息包流的起源,在RTP会话或者期间的每个信息包流都有一个清楚的SSRC。SSRC不是发送端的IP地址,而是在新的信息包流开始时源端随机分配的一个号码。

来自"http://baike.eccn.com/eewiki/index.php/%E5%AE%9E%E6%97%B6%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE%28RTP%29"

相关文章:

Windows LTSC、LTSB、Server 安装 Windows Store 应用商店

下载安装包 打开网址 https://store.rg-adguard.net/ 以 PackageFamilyName 方式搜索 Microsoft.WindowsStore_8wekyb3d8bbwe 根据系统选择对应的包,每一种都要下载 安装 在下载目录按住 shift 键,然后鼠标右键,打开 Powershell 执行安装命令…

sybase Invalid command line argument 'and'.

解决方法: 先到sybase central安装目录下(我这里是:C:\sybase\ASE-12_0\bin\syconfig.exe)双击看能不能正常运行。如果可以,就证明是开始菜单里的“配置服务器”的快捷方式有问题; 然后删除开始菜单里面“配…

Jmeter调试工具---Debug Sampler

使用场景:脚本开发是,调试用(正式测试时需删除),Debug Sampler会把我们自定义的变量输出在response data中 使用设置:JMeter properties和System properties通常都选false,这两个就是JMeter和系…

Cannot resolve method 'getParameter( )'

在JSP页面中,getParameter 和 setAttribute 显示红色,IDEA的提示信息为: Cannot resolve method getParameter(...) 和 Cannot resolve method setAttribute(...) 原因是缺少servlet-api.jar和jsp-api.jar这两个jar包。 将这两个jar包导入项…

产品设计体会(1011)少做就是多做

有100个需求,资源只够做10个,是的,当时就是这样。标题是马云的一句话。2007年国庆长假回来,基本在全力做网店版“批量定时上架”的需求,n多的pk、评审、确认会搞得头昏脑胀,不过终于算是把需求确认掉了。其…

socket与TcpListener/TcpClient/UdpClient 的区别及联系

点击此处下载源代码 应用程序可以通过 TCPClient、TCPListener 和 UDPClient 类使用传输控制协议 (TCP) 和用户数据文报协议 (UDP) 服务。这些协议类建立在 System.Net.Sockets.Socket 类的基础之上,负责数据传送的细节。(也就是说TCPClient、TCPListener 和 UDP…

Sql Server 中锁的概念

锁的类型:(1) 共享锁:共享锁用于所有的只读数据操作.(2) 修改锁:修改锁在修改操作的初始化阶段用来锁定可能要被修改的资源,这样可以避免使用共享锁造成的死锁现象(3) 独占锁:独占锁是为修改数据而保留的。它所锁定的资源,其他事务不能读取也不能修改。独…

Java的Clone

Clone 就是重写clone()方法 两种办法进行深拷贝,一种是Clonable接口,一种是Serializable接口 实现代码如下 package Clone;public class Student implements Cloneable {private String name;public String getName() {return name; }public void setNam…

MySQL登录时ERROR 1045:Access denied for user ‘root’@’localhost’ (using password: YES)

MySQL登录时ERROR 1045错误win10_x64系统中登录MySQL时出现1045错误 错误描述: ERROR 1045:Access denied for user ‘root’’localhost’ (using password: YES) 解决方法: 1、停止MySQL服务 方法:在DOS窗口使用net stop mysql…

对L2和B2的阐述

根据英特尔官方称,之所以把B2步进E6300改产成L2步进的原生2M的E6300,原因在于B2在生产上和高端6800属一类型的内制芯片,在针脚面都拥有7颗主晶体,是很容易让E6300超到很高,E6300面临着以后的中端市场不得不将其价格低下…

江西省移动物联网发展战略新闻发布会举行-2017年10月江西IDC排行榜与发展报告...

编者按:当人们在做技术创新时,我们在做“外包产业“;当人们在做制造产业,我们在做”服务产业“;江人们在做AI智能时,我们在做”物联网“崛起,即使有一个落差,但红色热土从不缺少成长…

获取Linux/Unix文件系统信息

设计一套SAP监控系统http://blog.csdn.net/bayaci/archive/2009/10/13/4666456.aspx显示系统df(linux )/ bdf (hpunix)的信息执行代码,获取诸如bdf /usr命令后的信息:DiskInfo diskInfo new DiskInfo();diskInfo.info(directory)…

MySQL数据库相关命令

MySQL数据库 1、MySQL导出命令 mysqldump -h IP -u 用户名 -p 数据库名 > 导出的文件名 注:mysqldump命令是在cmd窗口初始目录下的命令,不是进入mysql执行的命令。 或者使用如下命令 mysqldump -u 用户名 -p 数据库名称 > 导出的文件名 2、MyS…

docker(3)docker下的centos7下安装jdk

1、将jdk-8u65-linux-x64.tar.gz文件传到docker的宿主机上 rz 2、将宿主机上的jdk-8u65-linux-x64.tar.gz复制到centos7的容器下 #在宿主机上执行 [rootcent7-zuoys ~]# docker cp /root/jdk-8u65-linux-x64.tar.gz a3b489cec243:/software#a3b489cec243是指定的centos7容器id …

请问,关闭子窗口提示错误,大家遇到这样的问题吗?

请问,关闭子窗口提示错误,大家遇到这样的问题吗? Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiBase/html/delphi_20061207133720244.html关闭子窗口时总是提示下面的错误: Access violation at address 00000008. Read of address 00000008 …

Hadoop学习笔记一 简要介绍

Hadoop学习笔记一 简要介绍 这里先大致介绍一下Hadoop. 本文大部分内容都是从官网Hadoop上来的。其中有一篇介绍HDFS的pdf文档,里面对Hadoop介绍的比较全面了。我的这一个系列的Hadoop学习笔记也是从这里一步一步进行下来的,同时又参考了网上的很多文…

Struts 2(八):文件上传

第一节 基于Struts 2完成文件上传 Struts 2框架中没有提供文件上传,而是通过Common-FileUpload框架或COS框架来实现的,Struts 2在原有上传框架的基础上进行了进一步封装,从而大大简化了文件上传的开发应用。 1.1 下载并安装Common-FileUpload…

LA3177 - Beijing Guards(二分+贪心【更优美的解法)

简介:同皇帝的烦恼 分析: 如果n是偶数,那么答案就是相邻两个人的r值之和的最大值 即ansmax{r(i)r(i1)} (i1,2,3,…,n),规定r(n1)r1 这时的ans实际上是答案的下限 一个合法的方案就是,对于编号为i的人来说&#xff0c…

Redis数据库设置密码

Redis数据库的默认打开方式为无密码打开,现在要将其设置为以密码形式打开。 Redis文件夹内容1、修改配置文件 在redis.windows.conf文件中设置密码的命令中添加requirepass 123456一行,将Redis数据库的密码设置为123456 2、运行redis-server.exe程序 3…

沉甸甸的证书,沉甸甸的心情

今天收到了由电子工业出版社易飞思公司转寄的我在由51CTO、中国图书商报、互动出版网等单位联办的“2008年度最佳技术图书和原创作者评选”活动(这是第二届了)中所获得的“2008年度最佳原创作者”证书(证书见下,非常精美&#xff…

windows :Tomcat免安装版环境变量配置 + jdk配置

1. 下载后解压,我解压的目录为:D:\Tomcat\apache-tomcat-9.0.1-windows-x64 2. 安装jdk和jre, 并配置环境变量; 2.1 用户变量新建JAVA_HOME; 2.2 系统变量CLASSPATH中添加:.;C:\Program Files\Java\jdk1.8.0_144\lib…

将数据库查询结果导出成Excel表格

使用Java代码,从数据库中获取结果集,将结果集导出成Excel表格形式。 从数据库中查询学生表所有数据,将其导出成Excel表格,点击查看学生表表结构 。 package com.test.test.test1;import com.test.test.db.StudentDb; import com.…

【Java_基础】Java中Native关键字的作用

本篇博文转载与:Java中Native关键字的作用转载于:https://www.cnblogs.com/leiblog/p/10529056.html

在SQL Server 2000 和SQL Server 2005中导出表结构

SQL Server 2000 SELECT 表名 case when a.colorder1 then d.name else end, 表说明 case when a.colorder1 then isnull(f.value,) else end, 字段名 a.name, 主键 case when exists(SELECT 1 FROM sysobjects where xtypePK and p…

百度、谷歌理念对对碰

尽管百度和谷歌哪个更好用是用户自己说了算,但它们对搜索引擎的理解和理念到底有多少异同?它们将带给用户一个怎样的搜索未来? 为了更好地看清这些问题,《第一财经日报》分别向两公司提出了如下问题,且听它们的回答.1.搜索结果提供得尽可能多,是否会提升搜索质量? 并不是搜索…

2019 GDUT Rating Contest I : Problem H. Mixing Milk

题面: H. Mixing Milk Input file: standard inputOutput file: standard outputTime limit: 1 secondMemory limit: 256 megabytesFarming is competitive business – particularly milk production. Farmer John figures that if he doesn’t innovate in his mi…

托管调试助手报错

今天在调试程序时出现下面的异常: 其他信息: CLR 无法从COM 上下文0x1a0e50 转换为COM 上下文0x1a0fc0,这种状态已持续60 秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送Windows 消息的情况下处理一个运行时间非常长的操作。这种情况通常会影…

在文件中查找指定字符串

1. 在指定文件中查看指定字符串的行数 cat file_name | grep -n "String" 2. 在多个文件中查找指定字符串 在多个指定文件中查找指定字符串,命令如下:grep -l "String" file1 file2 file3-l : 列出包含特定字符串的文件名称&#…

FPGA研发之道(25)-管脚

管脚是FPGA重要的资源之一,FPGA的管脚分别包括,电源管脚,普通I/O,配置管脚,时钟专用输入管脚GCLK等。 本文引用地址:http://www.eepw.com.cn/article/266429.htm (1)电源管脚: 通常来说&#xf…

函数组:SDIFRUNTIME

函数组:SDIFRUNTIME;Interfaces for Type Runtime Objects,获得与表相关的数据信息。 包含函数模块: DDIF_FIELDINFO_GET:DD:读取表格字段信息的接口,获得一个表中全部或部分字段的信息。DDIF_F…