视频传输协议详解(RTMP、RTSP、HLS)

一文搞懂 RTMP直播流媒体协议 RTMP 协议传输时会对数据格式化,而实际传输的时候为了更好地实现多路复用、分包和信息的公平性,发送端会把 Message 划分为带有 Message ID 的 Chunk,每个 Chunk 可能是一个单独的 Message,也可能是 Message 的一部分,在接收端会根据 Chunk 中包含的 data 的长度,message id 和 message 的长度把 chunk 还原成完整的 Message,从而实现信息的收发。服务器发送命令消息中的 “结果” (_result), 通知客户端连接的状态。 阅读详情
AI摘要

本文深入探讨了RTMP、RTSP、HLS三种主流直播平台传输协议的特点与工作原理。对比了它们在实时性、跨平台性、负载均衡等方面的优劣,为直播平台的选择提供了参考。

这两年网络直播特别火,国内很多网络直播平台都做的风生水起,特别是熊猫直播、斗鱼、花椒等。投资人为了把平台做大做强,大把大把烧钱,搞的很多小伙伴们都很心动想跳槽去做直播。作为构建直播平台的基础之一 -—— 传输协议,我们该如何选择呢?那么首先我们就要了解这些协议的原理及特点。

RTMP——Real Time Messaging Protocol(实时消息传输协议)

RTMP是由Adobe公司提出的,在互联网TCP/IP五层体系结构中应用层,RTMP协议是基于TCP协议的,也就是说RTMP实际上是使用TCP作为传输协议。TCP协议在处在传输层,是面向连接的协议,能够为数据的传输提供可靠保障,因此数据在网络上传输不会出现丢包的情况。不过这种可靠的保障也会造成一些问题,也就是说前面的数据包没有交付到目的地,后面的数据也无法进行传输。幸运的是,目前的网络带宽基本上可以满足RTMP协议传输普通质量视频的要求。

RTMP传输的数据的基本单元为Message,但是实际上传输的最小单元是Chunk(消息块),因为RTMP协议为了提升传输速度,在传输数据的时候,会把Message拆分开来,形成更小的块,这些块就是Chunk。

消息(Message)的结构

 

消息的结构

Message结构分析

1.Message Type:它是一个消息类型的ID,通过该ID接收方可以判断接收到的数据的类型,从而做相应的处理。Message Type ID在1-7的消息用于协议控制,这些消息一般是RTMP协议自身管理要使用的消息,用户一般情况下无需操作其中的数据。Message Type ID为8,9的消息分别用于传输音频和视频数据。Message Type ID为15-20的消息用于发送AMF编码的命令,负责用户与服务器之间的交互,比如播放,暂停等。

2.Playload Length: 消息负载的长度,即音视频相关信息的的数据长度,4个字节

3.TimeStamp:时间戳,3个字节。

4.Stream ID:消息的唯一标识。拆分消息成Chunk时添加该ID,从而在还原时根据该ID识别Chunk属于哪个消息。

5.Message Body:消息体,承载了音视频等信息。

消息块(Chunk)

 

 

消息块结构

通过上图可以看出,消息块在结构上与与消息类似,有Header和Body。

1.Basic Header:基本的头部信息,在头部信息里面包含了chunk stream ID(流通道Id,用来标识指定的通道)和chunk type(chunk的类型)。

2.Message Header:消息的头部信息,包含了要发送的实际信息(可能是完整的,也可能是一部分)的描述信息。Message Header的格式和长度取决于Basic Header的chunk type。

3.Extended TimeStamp:扩展时间戳。

4.Chunk Data:块数据。

RTMP在传输数据的时候,发送端会把需要传输的媒体数据封装成消息,然后把消息拆分成消息块,再一个一个进行传输。接收端收到消息块后,根据Message Stream ID重新将消息块进行组装、组合成消息,再解除该消息的封装处理就可以还原出媒体数据。由此可以看出,RTMP收发数据是以Chunk为单位,而不是以Message为单位。需要注意的是,RTMP发送Chunk必须是一个一个发送,后面的Chunk必须等前面的Chunk发送完成。

RTSP

RTSP(Real Time Streaming Protocol)是TCP/UDP协议体系中的一个应用层协议,由哥伦比亚大学, 网景和RealNetworks公司提交的IETF RFC标准.该协议定义了一对多应用程序如何有效地通过IP网络传输多媒体数据。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或者RTP完成数据传输,目前市场上大多数采用RTP来传输媒体数据。

RTSP和RTP/RTCP之间是什么关系呢?下面是一个经典的流媒体传输流程图

 

RTSP和RTP/RTCP之间的关系

一次基本的RTSP操作过程:

首先,客户端连接到流服务器并发送一个RTSP描述命令(DESCRIBE)。

流服务器通过一个SDP描述来进行反馈,反馈信息包括流数量、媒体类型等信息。

客户端再分析该SDP描述,并为会话中的每一个流发送一个RTSP建立命令(SETUP),RTSP建立命令告诉服务器客户端用于接收媒体数据的端口。流媒体连接建立完成后,

客户端发送一个播放命令(PLAY),服务器就开始在UDP上传送媒体流(RTP包)到客户端。 在播放过程中客户端还可以向服务器发送命令来控制快进、快退和暂停等。

最后,客户端可发送一个终止命令(TERADOWN)来结束流媒体会话。

由上图可以看出,RTSP处于应用层,而RTP/RTCP处于传输层。RTSP负责建立以及控制会话,RTP负责多媒体数据的传输。而RTCP是一个实时传输控制协议,配合RTP做控制和流量监控。封装发送端及接收端(主要)的统计报表。这些信息包括丢包率,接收抖动等信息。发送端根据接收端的反馈信息做响应的处理。RTP与RTCP相结合虽然保证了实时数据的传输,但也有自己的缺点。最显著的是当有许多用户一起加入会话进程的时候,由于每个参与者都周期发送RTCP信息包,导致RTCP包泛滥(flooding)。

RTSP的请求报文结构如下图

RTSP请求报文结构

简单的RTSP消息交互过程

C表示RTSP客户端,S表示RTSP服务端

第一步:查询服务器端可用方法

C->S OPTION request //询问S有哪些方法可用

S->C OPTION response //S回应信息的public头字段中包括提供的所有可用方法

第二步:得到媒体描述信息

C->S DESCRIBE request //要求得到S提供的媒体描述信息

S->C DESCRIBE response //S回应媒体描述信息,一般是sdp信息

第三步:建立RTSP会话

C->S SETUP request //通过Transport头字段列出可接受的传输选项,请求S建立会话

S->C SETUP response //S建立会话,通过Transport头字段返回选择的具体转输选项,并返回建立的Session ID;

第四步:请求开始传送数据

C->S PLAY request //C请求S开始发送数据

S->C PLAY response //S回应该请求的信息

第五步: 数据传送播放中

S->C 发送流媒体数据 // 通过RTP协议传送数据

第六步:关闭会话,退出

C->S EARDOWN request //C请求关闭会话

S->C TEARDOWN response //S回应该请求

上述的过程只是标准的、友好的rtsp流程,但实际的需求中并不一定按此过程。 其中第三和第四步是必需的!第一步,只要服务器和客户端约定好有哪些方法可用,则option请求可以不要。第二步,如果我们有其他途径得到媒体初始化描述信息(比如http请求等等),则我们也不需要通过rtsp中的describe请求来完成。

HLS —— HTTP Live Streaming

HTTP Live Streaming(缩写是HLS)是一个由苹果公司提出的基于Http协议的的流媒体网络传输协议。是苹果公司QuickTime X和iPhone软件系统的一部分。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的extended M3U (m3u8)playlist文件,用于寻找可用的媒体流。

HLS协议的优点:

1.跨平台性:支持iOS/Android/浏览器,通用性强。

2.穿墙能力强:由于HLS是基于HTTP协议的,因此HTTP数据能够穿透的防火墙或者代理服务器HLS都可以做到,基本不会遇到被防火墙屏蔽的情况。

3.切换码率快(清晰度):自带多码率自适应,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。

3.负载均衡:HLS基于无状态协议(HTTP),客户端只是按照顺序使用下载存储在服务器的普通TS文件,做负责均衡如同普通的HTTP文件服务器的负载均衡一样简单。

HLS的缺点:

1.实时性差:苹果官方建议是请求到3个片之后才开始播放。所以一般很少用HLS做为互联网直播的传输协议。假设列表里面的包含5个 ts 文件,每个 TS 文件包含5秒的视频内容,那么整体的延迟就是25秒。苹果官方推荐的ts时长时10s,所以这样就会大改有30s(n x 10)的延迟。

2.文件碎片化严重:对于点播服务来说, 由于 TS 切片通常较小, 海量碎片在文件分发, 一致性缓存, 存储等方面都有较大挑战.

HLS协议由三部分组成:HTTP+M3U8+TS

HTTP:传输协议

M3U8:索引文件

TS:音视频媒体信息,视频的编码格式为H.264,音频格式为AAC。

HLS的工作原理:

 

HLS工作原理图

1.填入请求m3u8的url,通过http请求。

2.sever返回一个m3u8的播放列表,该列表包含了5段数据的url。

3.客户端解析m3u8播放列表后,按顺序的拿每一段数据的url去获取ts流。

 

流程图

HLS如何切片问题

Media encoder将视频源中的视频数据转码到目标编码格式(H264)的视频数据,之后,在stream segmenter模块将视频切片。切片的结果就是index file(m3u8)和ts文件,如上图。

参考文献:

维基百科

RTSP协议详解

流媒体传输协议系列之--RTSP协议详解



作者:九爪章鱼
链接:https://www.jianshu.com/p/c04d810b7562

流媒体:RTMP 协议完全解析 至此,RTMP 基本梳理完毕。这些规格实际上都可以自行改动,但是需要双端一致。本质上,这套 RTMP 规范更多的是 Adobe 根据 Flash 的一系列特性制定的。所以使用中,还是会涉及到一些定制化的事情。不过,也可以直接使用。[1] RTMP 官方规范(原文流媒体:RTMP 协议完全解析 - 知乎★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。见下方! 阅读详情

相关推荐

流媒体协议之RTMP详解

RTMP(Real Time Messaging Protocol)实时消息传输协议是Adobe公司提出得一种媒体流传输协议,其提供了一个双向得通道消息服务,意图在通信端之间传递带有时间信息得视频、音频和数据消息流,其通过对不同类型得消息分配不同得优先级,进而在网传能力限制下确定各种消息得传输次序。

技术控的笔记 17万+

RTMP协议详解

详细介绍rtmp协议的封装格式、命令消息及传输过程

weixin_39399492的博客 1万+

流媒体传输系列文章汇总

从去年开始编写有关流媒体传输相关知识的文章,为了方便各位阅读,本文对此系列文章进行梳理和汇总。

技术控的笔记 21万+

RTMP协议和RTSP协议的区别

一、RTMP协议: 1、是流媒体协议 2、RTMP是Adobe的私有协议,没有完全公开 3、RTMP协议一般传输的是flv、f4v格式流 4、RTMP协议一般在TCP的一个通道传输命令和数据 二、RTSP协议: 1、是流媒体协议 2、RTSP协议是公有协议,有专门的机构维护 3、RTSP协议一般传输的是ts、mp4格式流 4、RTSP协议一般需要2-3个通道,命令和数据通道分离 二、 1.视频传输   从网络上接收视频时首先要解协议(RTSP/RTMP/HTTP),然后是解格式(MKV,RMVB),之后才是

lhh_qrsly的博客 1万+

手把手教你用DSP28335的PWM移相功能搞定双有源桥DAB(附完整代码)

本文详细解析了DSP28335的PWM移相功能在双有源桥DAB中的应用,包括ePWM模块的配置、移相时序原理及实战代码。通过精确的移相控制,实现DAB的高效运行和软开关,适用于车载充电机、储能系统等场景。附完整代码,助力开发者快速掌握硬件级移相技术。

weixin_30632089的博客 420

UE4/5编译报错MSB3073终极解决指南:从路径检查到MSVC版本降级

本文针对UE4/5开发中常见的MSB3073编译报错,提供了一套从根源到实战的终极解决指南。文章系统性地讲解了错误成因,并分层次指导排查路径字符、环境变量、MSVC版本兼容性、权限冲突等核心问题,重点介绍了通过降级MSVC编译器版本等关键操作来彻底解决此编译难题。

rl6adventurer的博客 1432

ZLMediaKit传输协议深度实战:如何为流媒体应用选择最佳传输方案?

在构建高性能流媒体服务时,传输协议的选择直接影响着用户体验和系统性能。ZLMediaKit作为一款基于C++11的流媒体服务器框架,支持TCP、UDP、WebRTC、SRT等多种传输协议,但如何根据具体应用场景选择最佳方案?本文将深入分析不同传输协议的技术特性,提供实战配置指南,帮助开发者构建稳定高效的流媒体服务。 ## 协议技术架构:理解ZLMediaKit的多协议支持机制 ZLMediaK

gitblog_00550的博客 559

EGO-Planner文章解读(一)——论文原理和算法实现

详细解读egoplanner论文和代码

fegxg的博客 3986

告别延迟卡顿:MediaMTX打造专业音视频流媒体服务全指南

MediaMTX是一款功能强大的开源流媒体服务器,支持SRT、WebRTC、RTSP、RTMP和LL-HLS等多种协议,能够帮助用户轻松构建低延迟、高可靠性的音视频流媒体服务。无论是直播推流、视频监控还是在线教育场景,MediaMTX都能提供稳定高效的流媒体解决方案。 [![MediaMTX logo](https://raw.gitcode.com/GitHub_Trending/me/med

gitblog_00490的博客 522

【有啥问啥】智能座舱CPD技术:毫米波雷达如何守护儿童安全?

本文深入探讨了智能座舱中CPD(Child Presence Detection)技术如何通过毫米波雷达保障儿童安全。毫米波雷达凭借其穿透性检测、微动感知等优势,成为儿童遗留车内的有效解决方案。文章详细解析了技术原理、系统集成方案及安装指南,为智能座舱安全技术提供了实用参考。

weixin_29193259的博客 357

【ArcGIS】ArcMap中北京1954坐标系转WGS84的实战技巧与参数选择

本文详细解析了在ArcMap中将北京1954坐标系数据转换为WGS84坐标系的完整流程与核心技巧。针对常见的坐标偏移问题,文章首先强调了数据“归位”的重要性,并提供了处理假东、假北值的具体操作步骤。随后,重点阐述了地理变换参数(如Beijing_1954_To_WGS_1984_2)的选择逻辑及其对转换精度的决定性影响,并结合案例说明了参数选择、中央经线确认及结果验证等关键环节,旨在帮助用户高效、准确地完成坐标转换。

f6g7h8i9j的博客 329

Windows下用Node-Media-Server和FFmpeg搭建直播服务器:从本地视频到RTSP摄像头推流全流程

本文详细介绍了在Windows环境下使用Node-Media-Server和FFmpeg搭建高效流媒体服务器的全流程。从环境配置到多源推流方案,包括本地视频转流和RTSP摄像头接入,提供了优化参数和实战代码示例,帮助开发者快速构建低延迟、高并发的直播系统。

weixin_30379531的博客 386

基于PLC智能立体车库控制系统设计

摘要 本系统设计以三层立体车库为研究对象,通过对立体车库的原理分析、动作流程设计和一系列的软硬件设计,达到立体车库自动化控制的目的。系统采用可编程控制器作为立体车库控制系统的控制单元,实现该系统的工艺要求,通过程序仿真调试,完成系统的各种动作要求,达到自动控制的目的。系统设计分为总体设计、硬件设计以及软件设计。按照立体车库控制系统的控制策略进行图纸设计;重点分析工艺流程图,对立体车库控制系统进行程序编译和MCGS上位机调试,通过系统的调试和修改,达到了基本控制的要求。系统设计明确了工艺要求,确定

DX884164131的博客 3600

流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)

转自:https://blog.youkuaiyun.com/tttyd/article/details/12032357RTP          参考文档 RFC3550/RFC3551         Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输层协议。RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。RTP协议常用于流媒体系统(...

一只猿 还是一只鱼 1万+

计算数列位置N的值

本文介绍了一个数列生成问题,要求根据输入的两个整数M和N生成特定规则的数列,并输出第N个位置上的数值。数列生成规则为:前M个元素为1到M;后续元素根据前M个元素是否重复来决定计算方式(求和或求差)。文章提供了C++、Java和Python三种语言的实现方案,均包含输入处理、数列初始化、循环计算和结果输出等步骤。各语言实现中均使用集合去重特性判断重复元素,并通过内置函数或自定义方法求取最大值和最小值。该问题主要考察基础编程能力,包括数组/列表操作、最值计算和重复元素判断等基本编程技巧。

面试高手的博客 652

ST03N 里看不到 SE38 / SA38?别急,这不是没记录,而是被换了名字

摘要:SAP系统中SE38/SA38事务码在ST03N统计中可能"隐身",因其对话步骤被归集到对应的程序名(如SE38→RSABAPPROGRAM)。ST03N侧重工作负载聚合统计,而STAD提供短期明细记录。正确排查方法是:在ST03N中搜索程序名而非事务码,再通过STAD验证具体使用情况。这一现象在权限整改和审计中易造成误判,建议将程序名纳入常规监控,并区分ST03N(趋势分析)与STAD(事实校验)的不同用途。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 953

视频传输协议探析:RTSP、RTMP、HLS、SRT、NDI的特点与应用

RTSP、RTMP是实时音视频传输协议,HLS是苹果提出的流媒体传输协议,SRT是安全可靠的传输协议,NDI是用于实时监控传输的网络设备接口标准。这些协议各有特点,可根据需求选择优质的技术方案,提供高质量、安全可靠的音视频传输服务。

2401_84119582的博客 3335

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

视频流传输协议

秋风阁——北溪入江流:https://focus-wind.com/ 秋风阁——视频流传输协议 常见视频传输协议 协议 httpflv rtmp rtsp hls dash 传输方式 http流 tcp流 tcp流 http http 视频封装格式 flv flv tag ts mp4 Ts文件 Mp4 3gp webm 延时 低 低 低 高 高 数据分段 连续流 连续流 连续流 切片文件 切片文件 Html5播放 可通过html5解封包播放(flv.js) 不支持 不支持

focus:Follow One Cause Until Success 8885

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

音视频网络传输协议,RTSP/RTMP/SRT/NDI协议之间特点

NDI是使视频兼容产品通过局域网进行视频共享的开放式协议。SRT协议是(Secure Reliable Transport)的简称,SRT由Haivision和Wowza合作成立的,管理和支持SRT协议开源应用的组织,这个组织致力于促进视频流解决方案的互通性,以及推动视频产业先驱协作前进,实现低延时网络视频传输。RTMP协议就像一个用来装数据包的容器,这些数据既可以是AMF格式的数据,也可以是FLV中的视/音频数据.一个单一的连接可以通过不同的通道传输多路网络流.这些通道中的包都是按照固定大小的包传输的。

liveweb视频汇聚平台 751

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

流媒体协议关系比较

http://www.2cto.com/kf/201309/246232.html RTP           参考文档 RFC3550/RFC3551          Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输层协议。RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。RTP协议常用于流媒体系统(配合RTCP协议

chenqingkui613的博客 410

流媒体协议引见(rtp/rtcp/rtsp/rtmp/mms/hls)

From: 流媒体协议介绍(rtphttp://www.csdn123.com/html/exception/641/641056_641061_641060.htm/rtcp/rtsp/rtmp/mms/hls) RTP           参考文档 RFC3550/RFC3551          Real-time Transport Protocol)是用于In

MaximusKiang的专栏 940
上一篇: 终于!Kubernetes遇见区块链了
下一篇: 区块链最基本的技术原理
hxpjava1
博客等级 码龄19年 1365粉丝 511原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值