UDP 与 RTP 实现高效的音视频通信

协议确定了双方通信的规则和流程。在互联网的协议集中,有一种无连接的传输协议,被称为用户数据报协议(UDP,User Datagram Protocol)。

UDP 为应用程序提供了一种简单的数据传输方式,当我们谈到 UDP 应用场景时,一个非常著名的领域是实时多媒体应用。而当我们需要在网络上实现实时多媒体传输时,就需要更多的控制和管理,实时传输协议(RTP,Real-time Transport Protocol)应运而生。

RTP 就像是在 UDP 基础上加了一层,提供了更多的功能,比如序列号、时间戳等,使得我们能够更可靠地传输音频、视频等实时数据,可以说 RTP 是在 UDP 基础上扩展出来的,为实时多媒体应用提供了更好的支持。

粉丝福利, 免费领取C++音视频学习资料包+学习路线大纲、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

什么是 RTP?

RTP,即实时传输协议(Real-time Transport Protocol),通常运行在用户空间,位于 UDP 之上。多媒体应用由多个音频、视频、文本组成。

音频、视频等东西先经过一个叫做 RTP 库的地方,就像是个装东西的盒子一样,然后 RTP 库把它们打包、编辑并编码成一个个小数据包,我们称之为 RTP 数据包。

这些 RTP 数据包被放进套接字里,就像是把东西放进信封里一样,接着,这些 RTP 数据包被放进了新生成的 UDP 包里,再通过 IP 地址发送到网络上。

在接收端,处理的顺序和发送端相反,先从 UDP 获取 RTP 小数据包,再解码、解析。最后,多媒体应用从 RTP 库那里接收到音视频等数据,然后播放出来。

RTP 的基本功能是将多个实时数据流打包到一个 UDP 数据包流中,这个 UDP 流可以发送给一个或多个目标主机。

由于 RTP 仅使用了普通的 UDP,所以路由器不会对其数据包有任何特殊处理,并且没有提供传输可靠性的保障措施,因此数据包可能会丢失、延迟或损坏。

无重传机制

RTP 格式包含了几种有助于接收端处理流媒体信息的特性,每个发送到 RTP 流中的数据包都会被分配一个编号,而且每个数据包的编号比它前面的数据包编号大 1,这个编号使得接收方能够确定是否有数据包丢失。

如果有数据包丢失,接收方的最佳动作是交给应用程序来处理。例如,如果丢失了一个视频数据包,可以考虑跳过这个视频帧;如果丢失了一个音频数据包,可以尝试使用插值法来估计已丢失的值。

重传并不是一种切实可行的方式,因为重传的数据包可能会到达得太晚以至于无法再被使用,因此RTP 没有确认机制,也没有提供重传的功能。

时间戳机制

时间戳机制是实时应用中的重要设施,它允许源端将每个数据包中的时间戳与整个流的起始时间相关联。这样做的好处是,接收端可以通过时间戳的差值来进行少量的缓冲工作。

时间戳机制不仅可以减少网络延迟变化的影响,还可以实现多个流之间的同步。

比如,一个数字电视可能有多个视频流和多个音频流,如果它们的时间戳都从同一个计数器开始,即使它们的传输有些不规则,它们仍然可以在接收端非常同步地播放出来。

时间戳由媒体流的源端生成,它记录了数据中第一个样本产生的时间,这个值有助于减轻接收端的时间变化,也就是所谓的抖动。

RTCP 实时传输控制协议

RTCP 实时传输控制协议(RTCP, Realtime Transport Control Protocol)是 RTP 的姐妹协议,专门负责处理反馈、同步和用户接口等信息,但它本身不传输任何媒体数据。

首先,RTCP 可以向源端提供有关延迟、抖动、带宽、网络拥塞等方面的反馈信息,源端利用这些反馈信息来根据当前网络状况动态地调整数据传输速率,以提供更好的质量。

当网络情况良好时,数据传输速率会提高以获得更好的质量,而当网络状况不佳时,数据传输速率会降低,通过持续地反馈信息,编码算法可以不断地进行调整,以在当前条件下提供尽可能好的质量。

其次,RTCP 还负责处理不同流之间的同步问题。不同流可能使用不同的时钟,并且具有不同的粒度和漂移速率,通过利用RTCP,可以确保这些流保持同步,使它们在播放时保持一致。

缓冲和抖动控制播放

在接收端,播放媒体的时候需要解决一个问题:即使数据包按照正确的时间间隔被发送到网络上,它们到达接收端的时间可能会有所不同,这种延迟的变化称为「抖动」。

即使抖动很小,如果简单地按照数据包到达的时间来播放,也可能导致视频画面的拉扯或音频的模糊。为了解决这个问题,在播放媒体之前通常会对其进行缓冲,以减少抖动的影响。

例如,当数据包在传输过程中受到了较大的抖动时,有些数据包可能会在很短的时间内到达,而有些可能需要更长的时间。在接收端,这些数据包会被缓冲起来,然后以平滑的速度播放出来,从而避免了突然的画面跳动或音频中断。

当一个数据包流在传输过程中遭受了很大的抖动,在 t=0 的时候,服务器发出数据包 1,该数据包在 t=1 时刻到达客户端,随后的数据包 2 遭受了更多的延迟,它经过 2 秒才到达客户端,随着数据包的到达,它们均被缓冲在客户端机器上。

从数据包 1 到 6 都已经在缓冲区,它们以平滑播放的间隔从缓冲区移出,可是,数据包 8 被延迟太多,当播放到它时还不可用,要么跳过数据包 8 继续播放后续的数据包,要么是停止播放,直到数据包 8 到达,这个时候在播放的时候就会出现一个「间隙」。

如果是语音 IP 通话,延迟数据包通常会被跳过去。在流媒体播放中,可以选择暂停,通过延迟媒体的播放来缓解这个问题,但为此要付出较大的缓冲区。对于像视频会议这样的实时应用,响应所需要的缓冲区较短。

今天文章内容各名词之间都有关联,总结一下:

UDP 则提供了简单的数据传输通道,负责将RTP打包好的数据包发送到网络上。

RTCP 通过向源端提供有关延迟、抖动、带宽和其他网络特性的反馈信息,帮助源端动态调整数据传输速率以提供更好的质量。

RTP 负责实时传输音视频等媒体数据,RTCP 则负责处理与传输相关的控制信息,而 UDP 则提供了 RTP 和 RTCP 传输数据的基础通道,但并不负责保证数据传输的可靠性。

粉丝福利, 免费领取C++音视频学习资料包+学习路线大纲、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

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

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

相关文章

LeetCode 31 下一个排列

LeetCode 31 下一个排列 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如,arr [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的…

Keil5 配置jlink

1.先选好对应的芯片设备 之后步骤参考这个:MDK5 JLINK配置流程_keil5配置jlink仿真器步骤-CSDN博客

LeetCode 热题 100 | 二叉树(四)

目录 1 114. 二叉树展开为链表 2 105. 从前序与中序遍历序列构造二叉树 3 437. 路径总和 III 菜鸟做题(即将返校版),语言是 C 1 114. 二叉树展开为链表 题眼:展开后的单链表应该与二叉树 先序遍历 顺序相同。 而先序遍历就…

MBG(Mybatis-Generator)生成代码

目录 步骤: 1. 创建数据库表 2. 配置 MyBatis Generator 3. 运行 MyBatis Generator 4. 编写业务逻辑 在实际开发中,你会发现有很多重复的工作: 首先是PO对象,我们往往创建与数据库表字段一一对应的PO对象; 其次在Mapper里…

【电机仿真】HFI算法脉振高频电压信号注入观测器-PMSM无感FOC控制

【电机仿真】HFI算法脉振高频电压信号注入观测器-PMSM无感FOC控制 文章目录 前言一、脉振高频电压注入法简介(注入在旋转坐标系的d轴)1.旋转高频电压(电流)注入法2.脉振高频电压注入法 二、高频注入理论1.永磁同步电机的高频模型2…

java spring 01 IOC源码

01.spring 中的基础是IOC 中有一个方法 例子: 01. 02. 03. 这里是扩展方法,现在是空的 beanfactorypostprocessors: 国际化:(一般不管) 广播器: 监听器: 实例化&#xff1…

Day03-课后练习(流程控制_分支结构)(判断年、月、日是否合法,判断打鱼还是晒网,判断星座)

参考答案博客链接跳转 文章目录 巩固题1、从键盘输入一个整数,判断它是否是5的倍数2、从键盘输入一个字符,判断字符类型3、计算折扣后金额4、输出月份对应的英语单词5、计算今天是星期几 简答题拔高题(自愿)6、判断年、月、日是否…

使用Node.js和Vue.js构建全栈Web应用

随着互联网的迅速发展,Web应用程序的开发变得越来越复杂和多样化。为了满足用户不断变化的需求,全栈开发已成为一个备受关注的话题。在本篇博客中,我将介绍如何使用Node.js和Vue.js来构建全栈Web应用。 Node.js是一个基于Chrome V8引擎的Jav…

Vue.js+SpringBoot开发大学兼职教师管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容三、界面展示3.1 登录注册3.2 学生教师管理3.3 课程管理模块3.4 授课管理模块3.5 课程考勤模块3.6 课程评价模块3.7 课程成绩模块3.8 可视化图表 四、免责说明 一、摘要 1.1 项目介绍 大学兼职教师管理系统,旨…

TongWEB(东方通),部署WEB前后端项目步骤

我的系统: 银河麒麟桌面系统V10(SP1)(兆芯) 环境需要搭建好,什么redis,数据库等 1.准备项目前端war包 (我后端项目本就是war部署,jar转war自行百度一下吧) 进入前端打包好的dist文件夹,创建一个文件夹 WEB-INF ,再在 WEB-INF 里创建一个 web.xml 文件,文件内容: <web-…

小家电—简易过零检测电路

趁刚开工时间有空&#xff0c;总结分析下&#xff0c;在工作项目中常用过零检测电路。 图一 图二 图一在项目中较为常用&#xff0c;两个电路都是通过钳位二极管限幅产生过零脉冲信号。 过零信号高电平被钳位在5.7V&#xff0c;低电平为-0.7V 高电平&#xff1a;VCC0.7V 低电…

猜测了一个sora模型结构

如果是上述的这种结构&#xff0c;可以确定的是patch 的size &#xff08;一个图像的小片&#xff09;是固定大小的 那么调节一个视觉分辨率大小通过patchs的大小决定。 如图所示可以证明输入的时候图片没有本物理人为的分割为小片&#xff0c;是通过一个模型进行分割为 小片。…