前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >RTMP的工作原理

RTMP的工作原理

作者头像
LiveVideoStack
发布于 2022-05-30 05:40:54
发布于 2022-05-30 05:40:54
1.4K00
代码可运行
举报
文章被收录于专栏:音视频技术音视频技术
运行总次数:0
代码可运行

 点击上方“LiveVideoStack”关注我们

翻译:Alex 技术审校:章琦 本文来自OTTVerse,作者为Krishna Rao Vijayanagar。

▲扫描图中二维码或点击阅读原文▲

了解音视频技术大会更多信息

RTMP

Easy-Tech

#028#

什么是RTMP?

RTMP(Real-Time Messaging Protocol,实时消息传输协议)是一种用于低延迟、实时音视频和数据传输的双向互联网通信协议,由Macromedia(后被Adobe收购)开发。RTMP的工作原理是:通过建立和维护RTMP客户端和RTMP服务端之间的通信路径来实现快速、可靠的数据传输。

RTMP最初用于Adobe Flash Player的媒体传输,但是众所周知,Flash在2020年12月已被弃用。这意味着RTMP也会随之消亡并尘封吗?当然不!

在现代视频传输场景中,RTMP依然占据一席之地,尤其在与转码器协同工作方面,这得益与RTMP所具有的低延迟和实时传输属性。

大部分具备行业标准的编码器(如encoding.com、Bitmovin、Harmonic和AWS Elemental等)都能够生产RTMP数据源。同样,Twitch、YouTube、Facebook Live等流媒体服务和Dacast、Ant Media、Wowza等直播平台都能接收RTMP推流。 

本篇文章将深入了解:

  • RTMP的历史
  • RTMP的工作原理
  • 如何建立RTMP连接
  • RTMP的替代方案
  • RTMP的优点和缺点

事不宜迟,让我们先来了解RTMP协议的历史。

RTMP的历史 RTMP由Adobe推出,用于超级流行的Adobe Flash播放器中,数百万网站曾使用这款播放器向用户展示视频。在鼎盛时期,大约超过90~95%有视频内容的网站上都使用Adobe Flash播放器来播放视频。 Adobe对RTMP的定义如下: RTMP (实时信息传输协议)用于在Adobe Flash平台技术(包括Adobe Flash播放器和 Adobe AIR)间实现音频、视频和数据的高性能传输。现在,作为一种开放规范,RTMP可用于创建实现与Adobe Flash播放器兼容的AMF、SWF、FLV和F4V等开放格式的音频、视频和数据传输的产品和技术。——Adobe 然而,随着Flash的弃用,RTMP不再用于向Adobe Flash播放器传输视频,同时还要面临与基于HTTP的视频传输协议MPEG-DASH和HLS的竞争。但是,RTMP仍然在向编码器传输视频的过程中发挥着重要作用,我们在下文将会讲到。

RTMP的工作原理

正如我们在上文中所了解到的,RTMP是一种基于TCP的、用于数据、音频和视频传输的双向通信协议。

RTMP的工作原理是:通过建立和维护RTMP客户端和RTMP服务端之间的通信路径来实现快速、可靠的数据传输。

与基于HTTP的传输协议HLS和DASH的操作相似,RTMP也是将多媒体流分割成切片:通常情况下,音频为64字节,视频为128字节。切片的大小可以由客户端和服务端之间协商获得。

传统观点认为切片尺寸不应太大,也不应太小。较大的切片在写入操作中引起延迟,而太小的切片则会增加CPU的负载。

图片来源: Wikipedia

通过将视频流分割成切片,RTMP可以将来自不同视频流的切片交织在一起,并在单个连接上传输,这种方法被称为“多路复用”,与视频直播中的统计多路复用类似。不过在实际中,包含几个切片的数据包被交织在一起后,使得RTMP传输更加高效,并允许RTMP创建多个虚拟、可寻址的视频传输通道。在解码端,这些交织的数据包可以被解复用,从而获取到最初的音频和视频数据。

RTMP连接设置:握手、连接、推拉流

现在,让我们一起来了解RTMP连接是如何建立的,从而帮助我们更好地理解RTMP协议的工作原理。RTMP建立连接可分为三步:握手、连接和推拉流

让我们分别看下这三个步骤。

第一步:握手

RTMP中的握手过程相对简单,在建立TCP连接后进行。在此握手过程中,每一方(客户端和服务端)发送三个数据包,分别为 C0、C1、C2 (客户端)和 S0、S1 、S2(服务端)。

下面是对RTMP握手过程的解释:

  1. 客户端向服务器发送C0数据包,数据包中包含客户端请求的RTMP版本。
  2. 然后客户端在没有等到服务器表示已接收到C0的情况下,发送包含了1536字节随机数据的C1。
  3. 此时,服务器必须等到它收到C0才能响应S0和S1(可选)。在这个阶段,服务器知道客户端所请求的RTMP版本。服务器响应S0和S1——它们本质上是C0和C1的副本。
  4. 然后客户端和服务器交换C2和S2,之后握手完成,连接建立。

图片来源: Wikipedia

第二步:连接

连接步骤发生在RTMP客户端和RTMP服务端之间的握手之后。在连接过程中,客户端和服务器使用AMF编码交换编码过的信息。

AMF代表Action Message Format,用于在Adobe Flash客户端和Flash媒体服务器之间发送信息。或者,程序员可以使用AFM序列化ActionScript和XML的对象图。AMF在RTMP流传输中用于客户端和服务器之间的通信,表明信息类型和内容。更多关于AMF的信息,可以在这里阅读:https://en.wikipedia.org/wiki/Action_Message_Format

下面的示例显示了由客户端向RTMP服务器发出的信息。其中使用了连接URL、音频编解码器、视频编解码器和所使用的AMF版本号。在此示例中,AMF的版本为3.0。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(Invoke) "connect"(Transaction ID) 1.0(Object1) { app: "sample", flashVer: "MAC 10,2,153,2", swfUrl: null,              tcUrl: "rtmpt://127.0.0.1/sample ", fpad: false,              capabilities: 9947.75 , audioCodecs: 3191, videoCodecs: 252,              videoFunction: 1 , pageUrl: null, objectEncoding: 3.0 }

RTMP服务器的响应信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(Invoke) "_result"(transaction ID) 1.0(Object1) { fmsVer: "FMS/3,5,5,2004", capabilities: 31.0, mode: 1.0 }(Object2) { level: "status", code: "NetConnection.Connect.Success",                   description: "Connection succeeded",                   data: (array) { version: "3,5,5,2004" },                   clientId: 1728724019, objectEncoding: 3.0 }

在这一步中,客户端和服务器还会交换Set Peer Bandwidth和Window Acknowledgement Size协议信息。当成功执行,这些信息会表示连接的建立,然后服务器就可以传输视频数据了。音视频编解码器和其他参数的详细定义,请参考RTMP规范:

https://wwwimages2.adobe.com/content/dam/acom/en/devnet/rtmp/pdf/rtmp_specification_1.0.pdf

第三步:推拉流

在RTMP握手和连接步骤后,RTMP客户端和RTMP服务器之间的连接已经建立,现在就可以传送数据了。为了实现数据的传输,RTMP规范定义了下面几个命令:

  • createStream
  • play
  • play2
  • deleteStream
  • closeStream
  • receiveAudio
  • receiveVideo
  • publish
  • seek
  • pause

在这些命令的帮助下,才有可能使用RTMP协议传输视频。

现在你对RTMP连接的工作原理已经有了基本的理解,接下来让我们了解一些常用的RTMP变体。

RTMP的变体:RTMPS、RTMPT、RTMFP、RTMPE、RTMP Proper

在这一部分,我们将简单介绍用于特定目的的RTMP变体,让我们从RTMPS开始。

RTMPS:RTMPS只是基于TLS/SSL 连接的RTMP。与RTMPE相比,设置和使用RTMPS要复杂一些,但是能够确保一定程度的安全性。如果你计划使用RTMP将视频传输到Facebook Live,你需要使用RTMPS(来源:

https://developers.facebook.com/blog/post/2019/04/16/live-video-uploads-rtmps/)。

RTMPE:RTMPE使用了包含Diffie–Hellman key exchange和HMACSHA256的行业标准加密。它生成了一对RC4密钥,其中: 

  • 第一个密钥用于加密从服务器向客户端发出的媒体数据。
  • 第二个密钥用于加密向服务器发送的数据。

RTMP Proper: 是指使用1935端口、基于TCP的RTMP的别名。

RTMPT:RTMPT建立在HTTP协议之上,是通过HTTP封装后的RTMP协议。它允许RTMP信息穿过防火墙,封装的信息可以是RTMP Proper、RTMPS 或 RTMPE 数据包。

RTMFP: RTMPF基于UDP协议(而非TCP),而且没有使用RTMP Chunk Stream。RTMFP 设计用于直接在P2P之间进行低延迟、实时的音频和视频通信,而无需通过RTMP服务器。更多关于RTMFP的详细信息,请阅读:

https://www.adobe.com/in/products/adobe-media-server-extended/rtmfp-faq.html

RTMP中音频和视频的编解码器支持

在继续学习前,让我们一起来看下RTMP中的编解码器支持。头部文件说明了对于下列编解码器的支持:

  • 音频:AAC、MP3
  • 视频:H.264/AVC、FLV容器中的VP6

哪里支持RTMP?

一些商业和开源编码器以及流媒体引擎支持RTMP,无论是拉流,或生成RTMP 数据源(推流)。你可以使用:

  • OBS Studio, 免费的广播和直播软件,可以生成RTMP数据源 
  • FFmpeg 
  • Dacast.com
  • Bitmovin.com
  • Ant Media Server
  • Wowza

等其他更多的RTMP推拉流的解决方案。

RTMP推流替代方案

由于Adobe结束了对于Flash的支持,RTMP现在所面临的是不太确定的未来。对于推流而言,你还可以考虑其他替代方案。

HLS是可以替代RTMP的流行方案。HLS是流媒体行业中的公认标准,从编码器、打包器、加密(DRM)、CDN到设备上的播放,它获得了来自视频生态的广泛支持。

另一个选择是MPEG-DASH,它也是基于HTTP的视频传输协议。和HLS一样,DASH也获得了广泛支持,也可以看作RTMP的替代方案。

基于HTTP的协议会存在一个问题,那就是它们会增加系统时延。通常情况下,在HLS和DASH中,必须先生成一定数量的视频切片,才能创建DASH清单或者HLS播放列表。没有播放列表或者清单,播放器便无法理解生成的视频流。等待播放列表或者清单的过程增加了时延,通常情况下会对系统造成45秒~1分钟的延迟。

不过,人们正在开发低延迟的DASH和HLS协议,它们能够减少基于HTTP的流媒体时延,并能够缓解基于HTTP的流媒体协议所带来的问题。

结语

我希望这篇关于RTMP的介绍性文章能对你有所帮助,在未来的文章中,我们将研究RTSP、RTMP和RTSP之间的区别,以及如何使用OBS Studio等流行工具来实现RTMP推拉流。

我们下次再见,保重,请继续Streaming!

致谢:

本文已获得作者Krishna Rao Vijayanagar授权翻译和发布,特此感谢。

原文链接:

https://ottverse.com/rtmp-real-time-messaging-protocol-encoding-streaming/

延伸阅读:


喜欢我们的内容就点个“在看”吧!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 LiveVideoStack 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
实时消息传输协议 RTMP(Real Time Messaging Protocol)
http://blog.csdn.net/defonds/article/details/17403225
bear_fish
2018/09/20
2.7K0
实时消息传输协议 RTMP(Real Time Messaging Protocol)
直播协议的选择:RTMP vs. HLS
随着直播业务的兴起,越来越多的直播平台开始涌现,这火热的程度好像一个应用不带上直播业务出来都不好意思跟人打招呼。想要做一个直播业务,主要包括三个部分:采集推流端、流媒体服务端、播放端。这里不多说,就主要结合 iOS 平台,从观看端出发,介绍一下对直播协议的选择。
音视频牛哥
2019/09/19
4.1K0
扫盲文章:AMF,RTMP,RTMPT,RTMPS
AMF AMF(是Action Message Format的缩写)是在flash和flex中与远程服务端交换数据的一种格式. 它是二进制格式,Flash应用与服务端或数据库通过RPC交换数据时,通常都采用这种格式。 AMF 1 诞生于Flash Player6,发展到现在已经变成了了AMF3 RTMP RTMP是Real-Time Messaging Protocol(实时消息传送协议)的缩写,它是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的私有协议。 RTMP协
菩提树下的杨过
2018/01/23
2.1K0
流媒体及直播相关知识
本文主要讲解流媒体及其直播相关知识,所涉及的知识内容比较浅显,主要是做个简单的了解。
Gnep@97
2023/09/23
6830
流媒体及直播相关知识
视频协议学习:推流拉流都擅长的 RTMP
腾讯云开发者社区
2017/05/03
10K0
视频协议学习:推流拉流都擅长的 RTMP
一文说透RTMP、RTSP、RTP、HLS、MPEG-DASH
常与RTSP一起用于音视频流传输,确保媒体数据能够准确、高效地传输到目标终端并进行解码播放。
音视频牛哥
2024/09/24
6.1K0
一文说透RTMP、RTSP、RTP、HLS、MPEG-DASH
全面进阶 H5 直播(上)
如果我们想要理解 HTML5 视频,首先需要知道,你应该知道,但你不知道的内容?那怎么去判断呢? ok,很简单,我提几个问题即可,如果某些童鞋知道答案的话,可以直接跳过。 你知道 ogg,mp4,flv,webm(前面加个点 .)这些叫做什么吗? 那 FLV,MPEG-4,VP8 是啥? 如果,基友问你要片源,你会说我这是 mp4 的还是 MPEG-4 的呢? 当然,还有一些问题,我这里就不废话了。上面主要想说的其实就两个概念:视频文件格式(容器格式),视频编解码器(视频编码格式)。当然,还有另外一种,叫做
腾讯IVWEB团队
2018/01/15
9.8K1
全面进阶 H5 直播(上)
使用WebRTC作为RTMP的替代方案
 点击上方“LiveVideoStack”关注我们 ▲扫描图中二维码或点击阅读原文▲ 了解音视频技术大会更多信息 ---- 作者:Barry Owen 翻译:Alex 技术审校:刘连响 WebRTC 影音探索 #014# 2020年,Adobe宣布停止对 Flash播放器的支持。Flash历经多年终于走向终结,虽然是众望所归,但它的退出却对存在于许多流媒体工作流程中的一项重要技术——RTMP( Real-Time Messaging Protocol)影响重大。RTMP最初设计用于向Adobe Fl
LiveVideoStack
2022/07/12
3K0
使用WebRTC作为RTMP的替代方案
流视频协议
video streaming protocol - 流视频协议是由于流式传输需要将音视频分割成小块,按顺序发送并在接收时播放
vanguard
2020/05/29
2.3K0
RTMP协议详解及Wiresahrk抓包分析
本文主要讲解 RTMP 协议,并通过 wireshark 对 RTMP 进行抓包并分析。
Gnep@97
2023/11/08
5K0
RTMP协议详解及Wiresahrk抓包分析
一套在线直播源码中的推流和传输常用协议
可能大部分人认为,只要拥有一套优质的在线直播源码,就可以顺利进行开发和搭建等步骤了。但实际上,整个直播过程主要涉及到采集、处理、编码、封装、推流、传输、解码等一系列过程,本次就重点说推流和传输的问题。
布谷鸟小刘
2021/01/28
7170
流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)
         Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输层协议。RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。RTP协议常用于流媒体系统(配合RTCP协议),视频会议和一键通(Push to Talk)系统(配合H.323或SIP),使它成为IP电话产业的技术基础。RTP协议和RTP控制协议RTCP一起使用,而且它是建立在UDP协议上的。 
雪影
2018/08/02
6.6K0
流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)
RTSP和RTMP协议有什么区别?RTSP为什么常用于安防监控摄像头行业,而视频直播却只使用RTMP推流?
RTSP(Real Time Streaming Protocol)是一种用于控制实时流媒体传输的网络协议。它允许客户端与服务器进行交互,控制流媒体的播放、暂停、停止、倒放、快进等操作。RTSP协议可以用于音频、视频等多种流媒体数据的传输。
csdn博主eguid_1
2024/01/25
5.5K0
用一首歌曲来谱写RTMP协议分析
最近在重温由W.Richard Stevens 的传世之作《TCP/IP详解》,看到第12章TCP ,基于传输层有TCP 、 UDP 、 TLS 、DCCP 、SCTP 、RSVP 、PPTP等,那我好奇那基于TCP有哪些协议呢?在Google里面查找了一下,有一个协议映入眼帘 RTMP ,RTMP(实时消息传输协议)是Adobe 公司开发的一个基于TCP的应用层协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。RTMP协议没听过啊,一下子激起了我想要揭开它的面纱的冲动,大概研究了RTMP协议整整3天时间,试图想要找出一些漏洞出来,幸运的是我找到了!很鸡冻,下面就是我对此协议的分析。
FB客服
2018/09/21
6480
用一首歌曲来谱写RTMP协议分析
理解直播及其工作原理
直播是指通过互联网实时传输演出的音频和视频内容。随着实时视频的流行,直播俨然已成为众多企业和组织市场战略的重要组成部分。直播可用于活动(赛事)直播、提供客户服务以及举行网络研讨会等一切内容。
LiveVideoStack
2022/02/11
2K0
理解直播及其工作原理
直播软件开发的直播平台源码搭建中流媒体技术详解
随着移动互联网的发展,国内也涌现大大小小十几款视频直播app。以王思聪投资的17在2015年的爆红为代表,视频移动直播浮出水面,再到后来的映客、花椒、蜜友圈等等,直播自媒体时代的快速发展改变了人们传统的生活习惯和传统商业模式。
云豹短视频嘉兴
2020/08/28
1.1K0
直播软件开发的直播平台源码搭建中流媒体技术详解
(零)音视频技术基础知识
耽误了很久,一直想写音视频开发的教程,一方面,音视频的发展正在向各个行业扩展,从教育的远程授课,交通的人脸识别,医疗的远程就医等,音视频方向已经占据一个相当重要的位置,而音视频真正入门的文章又少之甚少,一个刚毕业小白可能很难切入理解,因为音视频中涉及大量理论知识,而代码的书写需要结合这些理论,所以搞懂音视频,编解码等理论知识至关重要。另一方面,公司的业务也在逐渐向音视频靠拢,我需要先将积累的知识点重新梳理后分享给其他同学。
sweet说好的幸福
2020/12/23
1.5K0
(零)音视频技术基础知识
前端中的直播
因为公司是做在线抓娃娃的,涉及到直播推流这一部分的工作。之前一直都是在App上面进行游戏,所以关于直播这一部分也是与安卓与IOS有关,与前端是没有关系的。但是现在新的需求就是要求这个在线抓娃娃要能够在网页上面进行游戏。所以,我的事情来了。对于没有涉及到前端音视频的这部分的需求,所以初入这一行,还是有点马马虎虎,花了一周多的时间终于是弄明白了。
踏浪
2019/11/05
4.9K0
全面进阶 H5 直播
如果我们想要理解 HTML5 视频,首先需要知道,你应该知道,但你不知道的内容?那怎么去判断呢?
腾讯IVWEB团队
2020/06/27
2.8K0
一文详解GB28181、RTSP、RTMP
GB28181 即 GB/T28181—2016《公共安全视频监控联网系统信息传输、交换、控制技术要求》。它是公安部提出的公共安全行业标准,在视频监控领域具有重要地位。
音视频牛哥
2024/09/24
4.7K0
一文详解GB28181、RTSP、RTMP
相关推荐
实时消息传输协议 RTMP(Real Time Messaging Protocol)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验