13. UDP协议与RTP协议

UDP协议

UDP协议比较简单:
在这里插入图片描述
UDP的长度是固定的,用总长度-UDP长度就是数据长度。
UDP是不保证他的有序性和可靠性的。对于音频和视频是这样是比较好的,因为这段丢了,我们可以从下一段在开始解码。

RTP

RTP 协议概述

RTP(Real-time Transport Protocol)是用于 Internet 上针对多媒体数据流的一种传输层协议,RTP 协议和 RTP 控制协议 RTCP 一起使用。RTP 被定义为在一对一或一对多的传输情况下工作,其目的是提供时间信息和实现流同步。RTP 的典型应用建立在 UDP 上,但也可以在 TCP 或 ATM 等其他协议之上工作。

RTP 不像 http 和 ftp 可完整的下载整个影视文件,它是以固定的数据率在网络上发送数据,客户端也是按照这种速度观看影视文件,当影视画面播放过后,就不可以再重复播放,除非重新向服务器端要求数据。

RTP 本身只保证实时数据的传输,并不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞控制,它依靠 RTCP 提供这些服务。

RTP 工作机制

rtp 协议就是提供了时间标签,序列号以及其它的结构用于控制适时数据的流放。在流的概念中” 时间标签” 是最重要的信息。发送端依照即时的采样在数据包里隐蔽的设置了时间标签。在接受端收到数据包后,就依照时间标签按照正确的速率恢复成原始的适时的数据。不同的媒体格式调时属性是不一样的。

但是 rtp 本身并不负责同步,rtp 只是传输层协议,为了简化运输层处理,提高该层的效率。 将部分运输层协议功能(比如流量控制)上移到应用层完成。同步就是属于应用层协议完成的。它没有运输层协议的完整功能,不提供任何机制来保证实时地传输数据,不支持资源预留,也不保证服务质量。rtp 报文甚至不包括长度和报文边界的描述。同时 rtp 协议的数据报文和控制报文的使用相邻的不同端口,这样大大提高了协议的灵活性和处理的简单性。

rtp 协议和 udp 二者共同完成运输层协议功能。udp 协议只是传输数据包,不管数据包传输的时间顺序。rtp 的协议数据单元是用 udp 分组来承载的。在承载 rtp 数据包的时候,有时候一帧数据被分割成几个包具有相同的时间标签,则可以知道时间标签并不是必须的。而 udp 的多路复用让 rtp 协议利用支持显式的多点投递,可以满足多媒体会话的需求。

RTP 协议的报文结构

每一个 RTP 数据报都由头部(Header)和负载(Payload)两个部分组成,其中头部前 12 个字节的含义是固定的,而负载则可以是音频或者视频数据。

RTP 头格式如图所示:
在这里插入图片描述
开始 12 个八进制出现在每个 RTP 包中,而 CSRC 标识列表仅出现在混合器插入时。各段含义如下:

  1. 版本(V)
    2 位, 标识 RTP 版本。

  2. 填充标识(P)
    1 位,如设置填充位,在包尾将包含附加填充字,它不属于有效载荷。填充的最后一个八进制包含应该忽略的八进制计数。某些加密算法需要固定大小的填充字,或为在底层协议数据单元中携带几个 RTP 包。

  3. 扩展(X)
    1 位,如设置扩展位,固定头后跟一个头扩展。

  4. CSRC 计数(CC)
    4 位,CSRC 计数包括紧接在固定头后 CSRC 标识符个数。

  5. 标记(M)
    1 位,标记解释由设置定义,目的在于允许重要事件在包流中标记出来。设置可定义其他标示位,或通过改变位数量来指定没有标记位。

  6. 载荷类型(PT)
    7 位,记录后面资料使用哪种 Codec ,receiver 端找出相应的 decoder 解码出来
    在这里插入图片描述

  7. 序列号
    16 位,序列号随每个 RTP 数据包而增加 1,由接收者用来探测包损失。序列号初值是随机的,使对加密的文本攻击更加困难。TCP也是有一个sequence number的,TCP中的sequence number通过ACK进行回复的,以达到排序的效果。

  8. 时间戳
    32 位,时间戳反映 RTP 数据包中第一个八进制数的采样时刻,采样时刻必须从单调、线性增加的时钟导出,以允许同步与抖动计算。时标可以让 receiver 端知道在正确的时间将资料播放出来。
    在这里插入图片描述
    由上图可知,如果只有序列号,并不能完整按照顺序的将 data 播放出来,因为如果 data 中间有一段是没有资料的,只有序列号的话会造成错误,需搭配上让它知道在哪个时间将 data 正确播放出来,如此我们才能播放出正确无误的信息。

  9. SSRC
    32 位,SSRC 段标识同步源。此标识不是随机选择的,目的在于使同一 RTP 包连接中没有两个同步源有相同的 SSRC 标识。尽管多个源选择同一个标识的概率很低,所有 RTP 实现都必须探测并解决冲突。如源改变源传输地址,也必须选择一个新 SSRC 标识以避免插入成环行源。

  10. CSRC 列表
    0 到 15 项,每项 32 位。CSRC 列表表示包内的对载荷起作用的源。标识数量由 CC 段给出。 如超出 15 个作用源,也仅标识 15 个。CSRC 标识由混合器插入,采用作用源的 SSRC 标识。
    RTP 用到的地方就是 PLAY ,服务器往客户端传输数据用 UDP 协议,RTP 是在传输数据的前面加了个 12 字节的头(描述信息)。

RTP 载荷封装设计本文的网络传输是基于 IP 协议,所以最大传输单元(MTU)最大为 1500 字节,在使用 IP/UDP/RTP 的协议层次结构的时候,这其中包括至少 20 字节的 IP 头,8 字节的 UDP 头,以及 12 字节的 RTP 头。这样,头信息至少要占用 40 个字节,那么 RTP 载荷的最大尺寸为 1460 字节。以 H264 为例,如果一帧数据大于 1460,则需要分片打包,然后到接收端再拆包,组合成一帧数据,进行解码播放。

实时传输 TCP/UDP协议的选择

在这里插入图片描述
当网络很卡的时候,他的实时性是不能保证的。比如说客户端给服务器端发送一个,等到1s还没有收到sck。下次也是那么这个TCP的实时性是不能保证的。TCP虽然可以保证包的有序可靠到达,但是代价失去了实时性。尤其是在极端情况下。
所以我们需要选择UDP,但是UDP需要解决丢包,乱序,这些都要在应用层解决。这也就是我们为什么都使用WebRTC,因为这些事情他都帮你解决了。

TCP在实时通信的作用

当UDP不通的时候可以使用TCP,比如说跟国外的人进行通讯,这时候UDP不行,可以使用TCP来保证联通率。因为企业级的通讯软件他的连通率要达到99%以上。如果TCP也不通的话,就用https,https底层也是TCP和一些安全的机制。
也就是一开始用UDP,如果UDP不通的话,就用TCP,TCP也不通的话就用https。
用TCP和https就是为了增加连通率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/25571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】(基础篇六) —— 过滤数据

过滤数据 本文将讲授如何使用SELECT语句的WHERE子句指定搜索条件。 WHERE子句 数据库表一般包含大量的数据,很少需要检索表中所有行。通常只会根据特定操作或需要提取表数据的子集。只检索所需数据需要指定搜索条件(search criteria)&…

独孤思维:做副业,万物皆可成为素材

01 分享一个独孤日更的素材来源。 很多小伙伴,刚开始写自媒体,都喜欢一本正经的阅读书籍,文章。 把素材来源,灵感来源,全部押注在这个地方。 其实万物皆可成为素材。 比如昨天早上,独孤参加公司的会议…

代码随想录算法训练营第36期DAY56

DAY56 套磁很顺利,发现又有书读了! 300最长递增子序列 朴素法,这个好想,但是不对,比如 0 1 0 3 2 3 我的算法会找出0 1 3作为答案,而不是0 1 2 3 可以看出,后面的状态依赖于前面的状态&am…

zero shot,few shot以及无监督学习之间的关系是什么

Zero-shot learning、few-shot learning和无监督学习都是机器学习中的方法,它们共同的特点是在有限或没有标签数据的情况下进行学习。下面是这三种方法之间的关系和区别: Zero-shot Learning (零样本学习): 零样本学习是在模型训练过程中完全…

中介子方程十

X$XFX$XEXyXαXiX$XαXiXrXkXtXyX$XpX$XyXtXkXrXiXαX$XiXαXyXEX$XFX$XEXyXαXiX$XαXiXrXkXtXyX$XpX$XyXtXkXrXiXαX$XiXαXyXEX$XαXηXtXαX$XWXyX$XyXWX$XpXαXqXηX$XeXαXhX$XdX$XpX$XdX$XyXeXαX$XEXyXαXiX$XαXiXrXkXtXyX$XpX$XyXtXkXrXiXαX$XiXαXyXEX$XαXeXyX$Xd…

Facebook革新:数字社交的下一个阶段

在数字化时代,社交网络已经成为人们生活中不可或缺的一部分。作为全球最大的社交网络平台之一,Facebook一直在不断创新,引领着数字社交的发展。然而,随着科技的不断进步和社交需求的变化,Facebook正在走向一个新的阶段…

Gitte的使用(Windows/Linux)

Gitte的使用(Windows/Linux) 一、Windows上使用Gitte1.下载程序2.在Gitte上创建远程仓库3.连接远程仓库4.推送文件到远程仓库 二、Linux上使用Gitte1.第一次从仓库上传1.1生成公钥1.2配置SSH公钥1.3新建一个仓库1.4配置用户名和邮箱在Linux中1.5创建仓库…

python字典应用

""" 字典应用 字典中保存了股票信息,完成下面的操作 1.找出股票价格大于100元的股票并创建一个新的字典 2、找出价格最高和最低的股票对应的股票代码 3.按照股票价格从高到低给股票代码排序 """stocks {AAPL: 191.88,G00G: 1186.96,…

强烈推荐 Setapp 上的 Mac 优质软件

Setapp 一款专为 macOS 设计的软件订阅平台,目前提供高达 240 款精心筛选的高品质应用程序,只需每月 9.9 美元的订阅费,即可畅享所有正版软件的使用权。让使用者无忧享受正版软件的稳定性和安全性,彻底告别盗版软件可能引发的风险…

Linux学习问题

遇到的第一个问题,FinalShell连接Centos7后,就连不上网,Centos7联网后就连不上FinalShell 解决方法,虚拟网卡上的ip地址不能和虚拟机ip地址一样 从这得到的解决方法

【C++11】常见的c++11新特性(一)

文章目录 1. C11 简介2. 常见的c11特性3.统一的列表初始化3.1initializer_list 4. decltype与auto4.1decltype与auto的区别 5.nullptr6.右值引用和移动语义6.1左值和右值6.1.1左值的特点6.1.2右值的特点6.1.3右值的进一步分类 6.2左值引用和右值引用以及区别6.2.1左值引用6.2.2…

ELK组件

资源列表 操作系统 IP 主机名 Centos7 192.168.10.51 node1 Centos7 192.168.10.52 node2 部署ELK日志分析系统 时间同步 chronyc sources -v 添加hosts解析 cat >> /etc/hosts << EOF 192.168.10.51 node1 192.168.10.52 node2 EOF 部署Elasticsea…

开源VisualFreebasic中文版,vb7 IDE,VB6升级64位跨平台开发安卓APP,Linux程序

吴涛老矣&#xff0c;社区苦无64位易语言&#xff0c;用注入DLL增强菜单&#xff0c;做成VS一样的界面 终归是治标不治本&#xff0c;一来会报毒&#xff0c;二来闭源20年没更新了 开源的VB7&#xff0c;欢迎易语言的铁粉进群&#xff1a;1032313876 【Freebasic编程语言】编绎…

Java数据结构与算法(leetcode热题881. 救生艇)

前言 救生艇属于贪心算法&#xff0c;解题之前条件一定要归纳好。题目中存在3个要求&#xff1a; 1.一艘船最多坐2人 2.船数要求最小 3.每艘船重量小于limit 意味着体重较轻的两人可以同乘一艘救生艇。 . - 力扣&#xff08;LeetCode&#xff09; 实现原理 1.重量大的有…

机器学习-14-重温经典的用户流失数据挖掘竞赛(实战)

PYTHON用户流失数据挖掘 用户流失预测案例分析 旅游平台用户流失预测 客户流失及用户画像分析 参考和鲸社区的赛题及数据集下载链接地址 1 收集数据 一、项目介绍 携程作为中国领先的综合性旅行服务公司,每天向超过2.5亿会员提供全方位的旅行服务,在这海量的网站访问量中,…

【设计模式深度剖析】【4】【行为型】【策略模式】

&#x1f448;️上一篇:职责链模式 设计模式-专栏&#x1f448;️ 文章目录 策略模式定义英文原话直译 角色类图策略接口Strategy&#xff1a;具体策略类上下文类Context测试类 策略模式的应用策略模式的优点策略模式的缺点策略模式的使用场景 策略模式 策略模式&#xff08…

33、matlab矩阵分解汇总:LU矩阵分解、Cholesky分解和QR分解

1、LU矩阵分解 语法 语法1&#xff1a;[L,U] lu(A) 将满矩阵或稀疏矩阵 A 分解为一个上三角矩阵 U 和一个经过置换的下三角矩阵 L&#xff0c;使得 A L*U。 语法2&#xff1a;[L,U,P] lu(A) 还返回一个置换矩阵 P&#xff0c;并满足 A P*L*U。 语法3&#xff1a;[L,U,P] …

Java--递归

1.递归就是A方法调用A方法&#xff0c;也就是调用自己本身 2.利用递归可以用简单的程序来解决一些复杂的问题&#xff0c;它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解&#xff0c;递归策略只需少量的程序就可描述出解题过程所需要的多次重复…

Position定位

Position定位 CSS中position属性是比较常用的元素定位方案&#xff0c;position常用的取值有static、relative、absolute、fixed、sticky、inherit。 static static属性是HTML元素的默认值&#xff0c;即没有定位&#xff0c;遵循正常的文档流对象&#xff0c;对于top、bott…

【Python入门与进阶】常见问题与解决方法

1.Anaconda包管理 使用pip卸载包时&#xff0c;报错“无法访问’&#xff0c;在conda环境下进行pip install时&#xff0c;出现拒绝访问的错误 [WinError 5] 2.Jupyter问题 笔记本运行时无反应/文件无法重命名&#xff1a;【Python】Jupyter Notebook无法运行代码&#xff0c…