流媒体协议

◆ RTP(Real-time Transport Protocol),实时传输协议。

◆ RTCP(Real-time Transport Control Protocol),实时传输控制协议。

◆ RTSP(Real Time Streaming Protocol),实时流协议。

◆ RTMP(Real Time Messaging Protocol),实时消息传输协议。

◆ HLS(HTTP Live Streaming),苹果公司提出的基于HTTP的流媒体网络传输协议。

◆ HTTP-FLV,将RTMP等负载信息携带在HTTP协议之上的码流传输协议。

RTP & RTCP & RTSP

RTP与RTCP两个协议一般成对出现,与RTSP协同工作。

RTP负责多媒体的传输,RTCP配合RTP做控制和流量统计, RTSP负责建立和控制会话,下图更直观的的描述了三者的关系:

RTP(Real-time Transport Protocol),实时传输协议:

◆ RTP建立在UDP协议上;

◆ RTP不确保网络底层的可靠性,不提供按时发送机制或其他服务质量(QoS)保证;

◆ RTP不保证传送或防止无序传送;

◆ RTP提供时间标志,序列号以及其他能够保证在实时数据传输时处理时间的方法;

◆ RTP报文格式如下:

V:RTP协议的版本号,占2位,当前协议版本号为2

P:填充标志,占1位,如果P=1,则在该报文的尾部填充一个或多个额外的八位组,它们不是有效载荷的一部分。

X:扩展标志,占1位,如果X=1,则在RTP报头后跟有一个扩展报头

CC:CSRC计数器,占4位,指示CSRC 标识符的个数

M:标记,占1位,不同的有效载荷有不同的含义,对于视频,标记一帧的结束;对于音频,标记会话的开始。

PT:有效荷载类型,占7位,用于说明RTP报文中有效载荷的类型,如GSM音频、JPEM图像等,在流媒体中大部分是用来区分音频流和视频流的,这样便于客户端进行解析。

sequence number:序列号,16比特,发送方在每发送完一个RTP包后就将该域的值增加1,接收方可以由该域检测包的丢失及恢复包序列。序列号的初始值是随机的。

timestamp:时间戳,32比特,记录了该包中数据的第一个字节的采样时刻。在一次会话开始时,时间戳初始化成一个初始值。即使在没有信号发送时,时间戳的数值也要随时间而不断地增加(时间在流逝嘛)。时间戳是去除抖动和实现同步不可缺少的。

SSRC:同步源标识符,32比特,同步源就是指RTP包流的来源。在同一个RTP会话中不能有两个相同的SSRC值。该标识符是随机选取的 RFC1889推荐了MD5随机算法。

CSRC:贡献源列表,0~15项,每项32比特,用来标志对一个RTP混合器产生的新包有贡献的所有RTP包的源。由混合器将这些有贡献的SSRC标识符插入表中。SSRC标识符都被列出来,以便接收端能正确指出交谈双方的身份

RTCP(Real-time Transport Control Protocol),实时传输控制协议:

◆ RTP和RTCP是一起使用的;

◆ RTCP的主要功能是为RTP所提供的服务质量提供反馈,RTCP收集相关媒体连接的统计信息,例如:传输字节数,传输分组数,丢失分组数,时延抖动,单向和双向网络延迟等等;

◆ 网络应用程序可以利用RTCP所提供的信息试图提高服务质量,比如限制信息流量或改用压缩比较小的编解码器;

◆ RTCP本身不提供数据加密或身份认证,其伴生协议SRTCP(安全实时传输控制协议)则可用于此类用途;

◆ RTCP报文格式如下:

RTSP(Real Time Streaming Protocol),实时流协议:

◆ RTSP是一种双向实时数据传输协议;

◆ RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或RTP完成数据传输;

◆ RTSP主要用来控制具有实时特性的数据发送,比如:对流媒体提供诸如播放、暂停、快进等操作;

◆ RTSP负责定义具体的控制消息、操作方法、状态码等,但它本身并不传输数据,而是必须依赖于下层传输协议所提供的某些服务;

RTMP & HLS

RTMP(Real Time Messaging Protocol)

RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。

◆ 应用层协议,依靠TCP保证可靠传输。

◆ 默认端口:1935,可能被防火墙屏蔽。

◆ 在流媒体/交互服务器之间进行音视频和数据通信。

HLS(HTTP Live Streaming)

HLS是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。

它的工作原理是把整个流分成一个个小的基于HTTP的TS文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。

HLS请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。

HLS规范:

◆ 视频的封装格式是TS。

◆ 音视频采用H264编码和AAC编码。

◆ 除了TS视频文件本身,还定义了用来控制播放的m3u8索引文件。

对比RTMP HLS和HTTP-FLV

根据应用场景不同,流媒体协议分为:

◆ 推流协议 把数据发到服务器

◆ 拉流播放协议 从服务器请求数据

RTMP可以用在双端,HLS用在拉流端,HTTP-FLV用在拉流端。

我们先放一张表格从几个维度来对比下这三种协议。

RTMPHTTP-FLVHLS
传输协议TCPHTTPHTTP
视频封装格式flvflvts
延时1-3秒1-3秒5-20秒
Web支持H5需要使用插件H5中需要使用插件支持H5
数据连续流连续流切片文件

1.RTMP & HTTP-FLV

◆ 这两个协议实际上传输的数据是一样的,数据都是flv文件的tag。

◆ RTMP:实时播放服务器的 FLV 文件或服务器转发的FLV数据,本地无 FLV 缓存文件,FLV保密性好。

◆ HTTP-FLV:将 FLV 下载到本地再播放,FLV保密性不好。

2.HLS & RTMP

◆ RTMP:采用1935端口,而非HTTP80端口,在某些网络环境下可能被屏蔽。

◆ RTMP:是一种有状态协议,需要为每一个播放视频流的客户端维护状态,服务器平滑扩展难度大。

◆ HLS:基于无状态HTTP协议,客户端只需要按顺序使用下载的TS文件就可,负载均衡如同普通的HTTP文件服务器负载均衡一样。

3.HTTP-FLV

HTTP-FLV 结合了 RTMP 和 HLS 的优点,易用(HTTP协议)低延时(flv)

4.为什么 RTPM 比 HLS 快

◆ HLS拉流:服务器音视频数据切片生成 TS 文件

◆ HLS拉流:客户端必须等待服务端至少生成一个 TS 文件,通常下载完两个媒体文件后才能保证不同分段音视频间的无缝连接。

◆ HLS一直在等切片数据,RTMP不需要切片

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【论文解读】GPT Understands, Too

一.论文 1.1 P-tuning 区别于之前的工作,这篇工作认为promote可以在句子中的任意位置起到作用,可以将它们插入上下文或目标中 上图中,左图是不使用任何操作,右图是选择在居首和目标前插入promote的embedding,插入pro…

2023最新软件测试20个基础面试题及答案

什么是软件测试? 答案:软件测试是指在预定的环境中运行程序,为了发现软件存在的错误、缺陷以及其他不符合要求的行为的过程。 软件测试的目的是什么? 答案:软件测试的主要目的是保证软件的质量,并尽可能大…

打破内卷宿命,电商只能出海,必须出海!

历史社会学家黄宗智把中国华北小农经济中的“过密化增长”、边际收益递减等现象称之为“内卷”:即在有限空间内的激烈零和式竞争现象;内卷产生的根源是有限且封闭的空间,竞争规则是“排他性”的零和博弈。 空间有限下的零和博弈,正…

强引用、软引用、弱引用、虚引用的区别

Java中的引用有四种,分为强引用(Strongly Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)4种,这4种引用强度依次逐…

【C++11】lambda表达式 | 包装器

文章目录 一、 lambda表达式lambda表达式的引入lambda表达式的语法lambda表达式与函数对象lambda表达式的捕捉列表 二、包装器function包装器bind包装器 一、 lambda表达式 lambda表达式的引入 在C98中,为了替代函数指针,C设计出了仿函数,也…

zookeeper学习记录

本文Java代码地址: https://gitee.com/blackjie_1/ljUp/tree/master/zookeeperDemo 个人博客网站:什么是快乐 基于docker 安装 拉取zookeeper 3.4.10 docker pull zookeeper:3.4.10启动服务端 docker run -d -p 2181:2181 -v /root/docker/zookeepe…

现在做跨境电商还需要全球代理IP吗?全球代理IP哪家靠谱?

随着全球互联网的发展,电商平台的发展和跨境贸易的便利化,跨境电商在过去几年中也一直呈现增长趋势,吸引了越来越多的企业和个体创业者入行。 然而,行业竞争也在不断加剧,跨境电商面临更多的越来越多的挑战&#xff0…

c语言中,/100和/100.0的区别是什么?

c语言中,/100和/100.0的区别是什么? 应该是整数除法和浮点数除法的区别吧。/100 时,结果只会保留整数部分,余数会丢弃。 最近很多小伙伴找我,说想要一些c语言的资料,然后我根据自己从业十年经验&#xff0…

哈夫曼编码详细证明步骤

关于哈夫曼编码,想必大家都很清楚,这里来讲解一下他的详细证明方法。代码的话就不给了网上一大堆,我再给也没什么意思,这里主要讲明白正确性的证明。我将采取两种方法进行证明,一种常规的方法,还有一种采取…

完整时间线!李开复Yi大模型套壳争议;第二届AI故事大赛;AI算命GPTs;LLM应用全栈开发笔记;GPT-5提上日程 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 👀 李开复「零一万物」大模型陷套壳争议,事件时间线完整梳理 https://huggingface.co/01-ai/Yi-34B/discussions/11#65531458…

振南技术干货集:比萨斜塔要倒了,倾斜传感器快来!(1)

注解目录 1、倾斜传感器的那些基础干货 1.1 典型应用场景 (危楼、边坡、古建筑都是对倾斜敏感的。) 1.2 倾斜传感器的原理 1.2.1 滚珠式倾斜开关 1.2.2 加速度式倾斜传感器 1)直接输出倾角 2)加速度计算倾角 3)倾角精度的提高 (如果…

Kettle工具使用小结1

1.背景 客户数据库限定为tidb数据库,相关业务数据均存储在内。因为tidb数据库是分布式的,且不支持存储过程、job等功能,需要通过外部工具进行脚本批量处理,所以这里引入kettle进行脚本批量执行和作业调度。 2.环境信息 &#xf…

SpringBoot配置数据库密码加密的方法

由于系统安全的考虑,配置文件中不能出现明文密码的问题,本文就给大家详细介绍下springboot配置数据库密码加密的方法,下面话不多说了,来一起看看详细的介绍吧,需要的朋友可以参考下 1.导入依赖 <!--数据库密码加密--> <dependency><groupId>com.github.uli…

探索arkui(2)--- 布局(列表)--- 2(支持分组/实现响应滚动位置)

前端开发布局是指前端开发人员宣布他们开发的新网站或应用程序正式上线的活动。在前端开发布局中&#xff0c;开发人员通常会展示新网站或应用程序的设计、功能和用户体验&#xff0c;并向公众宣传新产品的特点和优势。前端开发布局通常是前端开发领域的重要事件&#xff0c;吸…

Leetcode88 合并两个有序数组

合并两个有序数组 题解1 正向(记得插1删1)题解2 逆向 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减…

WEB 自动化神器 TestCafe(一)—安装和入门篇

今天小编给大家带来WEB 自动化神器 TestCafe(一) —安装和入门篇 一、TestCafe 介绍&#xff1a; TestCafe 是一款基于 Node.js 的端到端 Web 自动化测试框架&#xff0c;支持 TypeScript 或 JavaScript 来编写测试用例&#xff0c;运行用例&#xff0c;并生成自动化测试报告。…

传输层——— UDP协议

文章目录 一.传输层1.再谈端口号2.端口号范围划分3.认识知名端口号4.两个问题5.netstat与iostat6.pidof 二.UDP协议1.UDP协议格式2.UDP协议的特点3.面向数据报4.UDP的缓冲区5.UDP使用注意事项6.基于UDP的应用层协议 一.传输层 在学习HTTP等应用层协议时&#xff0c;为了便于理…

计算机网络的发展

目录 一、计算机网络发展的四个阶段 1、第一阶段&#xff1a;面向终端的计算机网络&#xff08;20世纪50年代&#xff09; 2、第二阶段&#xff1a;计算机—计算机网络&#xff08;20世纪60年代&#xff09; 3、第三阶段&#xff1a;开放式标准化网络&#xff08;20世纪70年…

vue3别名配置(vite)

1、配置别名的优点&#xff1a; 在VUE项目中import导入文件时&#xff0c;可以写相对路径. 2、在vite.config.js中配置 a. 首先引入path import path from "path"/* */ b.在resolve添加别名&#xff0c;例如&#xff1a; alias:{"~":path.resolve(__di…

jQuery【jQuery树遍历、jQuery动画(一)、jQuery动画(二)】(四)-全面详解(学习总结---从入门到深化)

目录 jQuery树遍历 jQuery动画(一) jQuery动画(二) jQuery树遍历 1、 .children() 获得子元素&#xff0c;可以传递一个选择器参数 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-…