技术标签: 音视频
实时传输协议RTP(Real-time Transport Protocol)是一个网络传输协议。RTP协议和RTP控制协议RTCP一起使用,而且它是建立在用户数据报协议上的(UDP)。
RTP标准定义了两个子协议 ,RTP和RTCP
数据传输协议RTP,用于实时传输数据。该协议提供的信息包括:时间戳(用于同步)、序列号(用于丢包和重排序检测)、以及负载格式(用于说明数据的编码格式)。
控制协议RTCP,用于QoS反馈和同步媒体流。相对于RTP来说,RTCP所占的带宽非常小,通常只有5%。
从图中可以看出,RTP被划分在传输层,它建立在UDP上。同UDP协议一样,为了实现其实时传输功能,RTP也有固定的封装形式。RTP用来为端到端的实时传输提供时间信息和流同步,但并不保证服务质量。服务质量由RTCP来提供。
当应用程序建立一个RTP会话时,应用程序将确定一对目的传输地址。目的传输地址由一个网络地址和一对端口组成,有两个端口:一个给RTP包,一个给RTCP包,使得RTP/RTCP数据能够正确发送。RTP数据发向偶数的UDP端口,而对应的控制信号RTCP数据发向相邻的奇数UDP端口(偶数的UDP端口+1),这样就构成一个UDP端口对。
以上为RTP头,可以看到其固定前三行,为12个字节,后面的CSRC(....)表示视情况加入。
1) V:RTP协议的版本号,占2位,当前协议版本号为2
2) P:填充标志,占1位,如果P=1,则在该报文的尾部填充一个或多个额外的八位组,它们不是有效载荷的一部分。(就是下面的6)表示的)
3) X:扩展标志,占1位,如果X=1,则在RTP报头后跟有一个扩展报头
4) CC:CSRC计数器,占4位,指示CSRC 标识符的个数
5) M: 标记,占1位,不同的有效载荷有不同的含义,对于视频,标记一帧的结束;对于音频,标记会话的开始。
6) PT: 有效荷载类型,占7位,用于说明RTP报文中有效载荷的类型,如GSM音频、JPEM图像等,在流媒体中大部分是用来区分音频流和视频流的,这样便于客户端进行解析,常用荷载类型如下。
Payload Type | Codec |
---|---|
0 | PCM μ -Law |
8 | PCM-A Law |
9 | G..722 audio codec |
4 | G..723 audio codec |
15 | G..728 audio codec |
18 | G..729 audio codec |
34 | G..763 audio codec |
31 | G..761 audio codec |
7) 序列号:占16位,用于标识发送者所发送的RTP报文的序列号,每发送一个报文,序列号增1。这个字段当下层的承载协议用UDP的时候,网络状况不好的时候可以用来检查丢包。同时出现网络抖动的情况可以用来对数据进行重新排序,序列号的初始值是随机的,同时音频包和视频包的sequence是分别记数的。
8) 时戳(Timestamp):占32位,必须使用90 kHz 时钟频率。时戳反映了该RTP报文的第一个八位组的采样时刻。接收者使用时戳来计算延迟和延迟抖动,并进行同步控制。
9) 同步信源(SSRC)标识符:占32位,用于标识同步信源。该标识符是随机选择的,参加同一视频会议的两个同步信源不能有相同的SSRC。
10) 特约信源(CSRC)标识符:0~15项,每项32比特,用来标志对一个RTP混合器产生的新包有贡献的所有RTP包的源。由混合器将这些有贡献的SSRC标识符插入表中。SSRC标识符都被列出来,以便接收端能正确指出交谈双方的身份。
如果上面3)的字段为1,表示有个扩展头,其跟在CSRC后面,其扩展头格式如下
头扩展包含 16 比特的长度域,及length,指示扩展项中 32 比特字的个数,但不包括 4 个字节扩展头(及不包括图片上的 defined by profile 和 length字段)
example:
取一段码流如下:
80 e0 00 1e 00 00 d2 f0 00 00 00 00 41 9b 6b 49 €?....??....A?kI
e1 0f 26 53 02 1a ff06 59 97 1d d2 2e 8c 50 01 ?.&S....Y?.?.?P.
cc 13 ec 52 77 4e e50e 7b fd 16 11 66 27 7c b4 ?.?RwN?.{?..f'|?
f6 e1 29 d5 d6 a4 ef3e 12 d8 fd 6c 97 51
文章浏览阅读280次。下面以RecycleView为例,其他可滑动控件也是一样的在XML中设置:<android.support.v7.widget.RecyclerViewandroid:id="@+id/rv_recycle_view"android:layout_width=“match_parent”android:layout_height=“match_parent”android:scr..._scollerview去掉光晕
文章浏览阅读3.6k次。今天在看书的时候(作为一个菜鸟,看书是必须滴 嘿嘿),看到了序列化,php的序列化一般使用serialize和json_encode,按照之前的学习方法,我可能就只会把这个两个函数的用法区别搞清楚下就pass继续看其他内容了,但是之前在csdn博客上看到李运华老师的博客再结合平时师傅提醒的学习方法,感觉之前的老方法不是一个合格的程序员应该做的,作为一个程序员,合格的程序员应该善于挖掘(师傅说的),_serialize 和json_encode
文章浏览阅读1.1w次,点赞3次,收藏9次。3、A:linux恢复模式下修改profile文件报只读错误 安了个ubuntu,今天装了个JDK环境,配置环境变量时,我修改的是/etc/profile文件,但被我改错了,把PATH那个环境变量改错了,..._profile只读
文章浏览阅读9.4k次,点赞3次,收藏16次。今天终于解决了困扰我很久的一个问题,在VC中调用HALCON中的分割函数后,在最后返回显示时总是报错,让我郁闷了很久,Undefined gray in get_image_pointer3 或Undefined gray in get_image_pointer。 原来问题出在对于bin_threshold、threshold等这些分割函数的返回值上面,把返回值当成Imag_region_to_bin
文章浏览阅读1k次。微信公众号开发之获得素材列表对于获得公众号的素材列表首先需要阅读微信开发者手册开发准备工具测试公众号内网穿透HTTP地址(微信对本地服务的通信对一些,公众号信息的获取不需要)具体参考:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QgOcoCTL-1625189967278)(C:\Users\wang\Ap_csdn服务商获取公众号素材
文章浏览阅读3.2k次。问题背景:使用putty进行ssh远程连接,上传文件时选用sz命令,但是一执行这个命令,终端就会被卡着。解决办法:换成使用xshell连接远程服务器,或者其他支持lrzsz上传服务的软件。lrzsz:本地和服务器的文件互传工具下载安装方式:yum -y install lrzsz当然也可以使用wget方式,只不过有点麻烦。命令解析:rz (receive)从本地上传到远程服务sz (send)从远程服务到本地..._putty rz上传文件没反应
文章浏览阅读3.9k次,点赞3次,收藏10次。绘图和可视化回归 第八章代码下载链接import matplotlib.pyplot as pltimport numpy as npfrom numpy.random import randnplt.plot(np.arange(10))plt.show()Figure和Subplotfig=plt.figure()ax1=fig.add_subplot(2,2,1)ax2=fig.a_switch好玩吗
文章浏览阅读3.8k次,点赞9次,收藏11次。1. 什么是索引索引是帮助数据库高效获取数据的数据结构。简而言之,索引是数据结构2. 索引的底层数据结构2.1 Hash索引哈希表是键值对的集合,通过键(key)即可快速取出对应的值(value),因此哈希表可以快速检索数据(接近 O(1))。为何能够通过 key 快速取出 value呢? 原因在于 哈希算法(也叫散列算法)。通过哈希算法,我们可以快速找到 value 对应的 index,找到了 index 也就找到了对应的 value。index = hash % array.size()_覆盖索引 a,b,c a = 1 and b > 1 and c = 1 走索引吗, a = 1 and b = 1 and c
文章浏览阅读786次。接下来对数据库的测试也提供一种编写思路,具体如何实现这个就不细说了。 testjingdongcom.productId">SELECT DISTINCT p.po_no FROM wff_po_line p, wff_line_item l WHERE p.co_order_no=[orderNo]AND l.order_no = p.co_order_no_eclipse自动化用企业级的吗
文章浏览阅读1.8k次。文| 腾讯“洋葱”入侵对抗团队bghost前言随着云计算的蓬勃发展,云原生概念被提出并快速发展,公司内部也在推进使用云原生技术进行架构优化,研发模式和基础设施都发生了很大的变化,新的k8s..._腾讯云部署容器安全 操作
文章浏览阅读2.1k次。spring_org.springframework.beans.factory.nouniquebeandefinitionexception
文章浏览阅读4.9k次,点赞5次,收藏20次。目录1、问题描述2、问题原因3、解决方案4、测试5、参考自1、问题描述在使用conda create -n environment_name命令新建环境时,遇到错误:Solving environment: failedNotWritableError: The currenuser does not have write permissions to a required path. path: /home/user_name/.conda/pkgs/u.._environmentnotwritableerror: the current user does not have write permission