流媒体协议
◆ 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用在拉流端。
我们先放一张表格从几个维度来对比下这三种协议。
| RTMP | HTTP-FLV | HLS | |
| 传输协议 | TCP | HTTP | HTTP |
| 视频封装格式 | flv | flv | ts |
| 延时 | 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不需要切片

相关文章:
流媒体协议
◆ RTP(Real-time Transport Protocol),实时传输协议。 ◆ RTCP(Real-time Transport Control Protocol),实时传输控制协议。 ◆ RTSP(Real Time Streaming Protocol),实时流协议。 ◆ RTMP(Real Time Messaging Protocol),实时…...
ClickHouse的分片和副本
1.副本 副本的目的主要是保障数据的高可用性,即使一台ClickHouse节点宕机,那么也可以从其他服务器获得相同的数据。 Data Replication | ClickHouse Docs 1.1 副本写入流程 1.2 配置步骤 (1)启动zookeeper集群 (2&…...
C语言编程陷阱(五)
陷阱21:不要使用逗号运算符代替分号 C语言中,我们可以使用分号来结束一个语句,比如a = b;,这样可以让编译器知道语句的边界,以及执行的顺序。但是,如果我们想要在一个语句中执行多个表达式,就可以使用逗号运算符,比如a = (b = c, c + 1);,这样可以让编译器按照从左到右…...
chardet检测文件编码,使用生成器逐行读取文件
detect_encoding 函数使用 chardet 来检测文件的编码。然后,在 process_large_file 函数中,根据检测到的编码方式打开文件。这样,你就能够更准确地处理不同编码的文件。 import chardetdef detect_encoding(file_path):with open(file_path,…...
html所有标签和DOCTYPE的总结
一、DOCTYPE 1. 意义 DOCTYPE是一种标准通用标记语言的文档类型声明,告诉标准通用标记语言解析器它应该使用什么样的文档类型定义来解析文档。 2. 应用 现在,我们需要告诉标准通用标记语言解析器,我们接下去要用html来编写代码了。 <…...
2023年11月15号期中测验判断题(Java)
1-1 局部变量可以与成员变量重名。 正确答案:T 解释: 局部变量可以和成员变量重名,通常,为了区分局部变量和成员变量,会使用this关键字(C称this指针,python是self关键字)来特别声…...
基于 selenium 实现网站图片采集
写在前面 有小伙伴选题,简单整理理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对…...
vue3相关内容
ref声明/赋值 操作基本类型数据 string number // 引入方法 import {ref} from vue // 声明变量 const name ref(A) // 修改值 name.value Breactive声明/赋值 操作引用类型数据 array object proxy不能直接赋值,会破坏响应式对象 // 引入方法 import {reacti…...
AWTK实现汽车仪表Cluster/DashBoard嵌入式GUI开发(七):FreeRTOS移植
前言: 一般的GUI工程都需要一个操作系统,可能是linux,重量级的,也可能是FreeRTOS,轻量级的。 一句话理解那就是工程就是FreeRTOS task任务的集合。 一个main函数可以看到大框架: 很显然,除了第一个是硬件配置的初始化,中间最重要的部分就是要创建任务,把AWTK的应用…...
《洛谷深入浅出进阶篇》P1995 程序自动分析——并查集,离散化
上链接:P1955 [NOI2015] 程序自动分析 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1955 上题干: 首先给你一个整数t,代表t次操作。 每一次操作包含以下内容: 1.给你一个整数n,让…...
基于单片机的自动循迹小车(论文+源码)
1.系统设计 此次基于单片机的自动循迹小车的设计系统,结合循迹模块来共同完成本次设计,实现小车的循迹功能,其其整体框架如图2.1所示。其中,采用STC89C52单片机来作为核心控制器,负责将各个传感器等模块链接起来&…...
linux系统中安装python到指定目录
Linux系统中安装python 下载Python源码包 根据服务器系统和需要的Python版本,在Python官网下载对应的Python源码包。 安装依赖(需要权限) yum install gcc gcc-c patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel…...
分布式事务 - seata安装
分布式事务 - seata 一、本地事务与分布式事务 1.1、本地事务 本地事务,也就是传统的单机事务。在传统数据库事务中,必须要满足四个原则(ACID)。 1.2、分布式事务 分布式事务,就是指不是在单个服务或单个数据库架构…...
CentOS to 浪潮信息 KeyarchOS 迁移体验与优化建议
浪潮信息KeyarchOS简介 KeyarchOS即云峦操作系统(简称KOS), 是浪潮信息研发的一款面向政企、金融等企业级用户的 Linux 服务器操作系统。它基于Linux内核、龙蜥等开源技术,支持x86、ARM 等主流架构处理器,其稳定性、安全性、兼容性和性能等核心能力均已…...
Go解析soap数据和修改其中数据
一、解析soap数据 package main import ("fmt" "encoding/xml" ) type Envelope struct { XMLName xml.Name Header Header } type Header struct { XMLName xml.Name xml:"Header" Security Security xml:"Security" } type Secu…...
LeetCode98. Validate Binary Search Tree
文章目录 一、题目二、题解 一、题目 Given the root of a binary tree, determine if it is a valid binary search tree (BST). A valid BST is defined as follows: The left subtree of a node contains only nodes with keys less than the node’s key. The right sub…...
【LeetCode】206. 反转链表
206. 反转链表 难度:简单 题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输…...
飞天使-通过GET 和POST进案例演示
文章目录 GETPOST GET def index(request):# 在url中获取学号sno request.GET.get("sno", None)print("学号为:",sno)# 判断学号如果有值,执行查询if sno:results get_student_by_sno(sno)# 展示在页面return render(request, ind…...
【MySql】12- 实践篇(十)
文章目录 1. 为什么临时表可以重名?1.1 临时表的特性1.2 临时表的应用1.3 为什么临时表可以重名?1.4 临时表和主备复制 2. MySql内部临时表使用场景2.1 union 执行流程2.2 group by 执行流程2.3 group by 优化方法 -- 索引2.4 group by 优化方法 -- 直接排序 3. Me…...
<C++> 反向迭代器
我们知道正向迭代器的设计:begin迭代器指向第一个数据,end迭代器指向最后一个数据的下一个位置 。移向下一个数据,解引用得到数据的值,并根据容器储存方式的不同,容器有不同类型的迭代器。 注意:rbegin迭代…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
