RTMP的工作原理及优缺点

news/2024/4/26 13:32:00/文章来源:https://blog.csdn.net/yinshipin007/article/details/129249192

一.什么是RTMP?


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

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

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

大部分具备行业标准的编码器(如http://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的负载。

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

C++音视频开发学习视频:免費】FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发【文章福利】:音视频学习资料、视频和学习路线图资料、以及面试题(资料包括C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等),免費分享,如有需要的可以加君羊领取哦!~学习交流君羊994289133点击加入领取资料

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

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

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

第一步:握手

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

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

  1. 客户端向服务器发送C0数据包,数据包中包含客户端请求的RTMP版本。

  1. 然后客户端在没有等到服务器表示已接收到C0的情况下,发送包含了1536字节随机数据的C1。

  1. 此时,服务器必须等到它收到C0才能响应S0和S1(可选)。在这个阶段,服务器知道客户端所请求的RTMP版本。服务器响应S0和S1——它们本质上是C0和C1的副本。

  1. 然后客户端和服务器交换C2和S2,之后握手完成,连接建立。

第二步:连接

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

AMF代表Action Message Format,用于在Adobe Flash客户端和Flash媒体服务器之间发送信息。或者,程序员可以使用AFM序列化ActionScript和XML的对象图。AMF在RTMP流传输中用于客户端和服务器之间的通信,表明信息类型和内容。

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

(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服务器的响应信息:

(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握手和连接步骤后,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

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服务器。

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


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

  • 音频:AAC、MP3

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

哪里支持RTMP?

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

  • OBS Studio, 免费的广播和直播软件,可以生成RTMP数据源

  • FFmpeg

  • http://Dacast.com

  • http://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的流媒体协议所带来的问题。

原文 https://zhuanlan.zhihu.com/p/533802752

★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。

见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

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

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

相关文章

IP-GUARD控制台账户输入多次错误密码锁定后该如何解锁?

其他管理员账户给锁定了,暂时只能等其锁定时间到了才可以再次输入,默认是设置是锁定30min; 1、如果急需此账户查看,可以使用admin系统管理员账户登录控制台,在工具-账户中清除这个账户的密码,重新登录设置密码。

NIO与零拷贝

目录 一、零拷贝的基本介绍 二、传统IO数据读写的劣势 三、mmap优化 四、sendFile优化 五、 mmap 和 sendFile 的区别 六、零拷贝实战 6.1 传统IO 6.2 NIO中的零拷贝 6.3 运行结果 一、零拷贝的基本介绍 零拷贝是网络编程的关键,很多性能优化都离不开。 在…

【云原生kubernetes】k8s 常用调度策略使用详解

一、前言 通过之前的学习,我们了解到k8s集群中最小工作单位是pod,对于k8s集群来说,一个pod的完整生命周期是由一系列调度策略来控制,这些调度策略具体是怎么工作的呢?本文将详细讨论下这个问题。 二、k8s调度策略简介…

【多目标优化算法】多目标蚱蜢优化算法(Matlab代码实现)

👨‍🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…

APP测试的7大注意点。

1. 运行 1) App安装完成后的试运行,可正常打开软件。 2) App打开测试,是否有加载状态进度提示。 3) App⻚面间的切换是否流畅,逻辑是否正确。 4) 注册 同表单编辑⻚面 用户名密码⻓度 …

快手电商新增商品信息诊断规则,对商家有何影响?

1、2022年快手短剧日活跃用户达2.6亿 新榜讯 近日,快手数据显示,2022年快手短剧日活跃用户达2.6亿,现在的付费用户数对比2022年4月增长超过480%,快手已经是最大的短剧消费市场。此外,2023年快手小游戏日活跃用户峰值超…

一文掌握项目管理工具 —— 时标网络图

一、认识时标网络图二、时标网络图的绘制方法三、自由时差、关键路径、总时差四、时标网络图可解决哪些问题进度调整的问题计算检测点时的 PV 数据资源平滑问题在系统集成项目管理工程师下午的案例分析考试中,有一道计算题分值达 20 分。整套试卷的总分为 75分,考试能否通过合…

ubuntu下用i686-w64-mingw32交叉编译支持SDL、Openssl的ffmpeg库

前言 本篇博客是基于前两篇关于ffmpeg交叉编译下,进行再次编译操作。ubuntu下ffmpeg的交叉编译环境搭建可以参看以下我的这篇博客:https://blog.csdn.net/linyibin_123/article/details/108759367 ; ubuntu下交叉编译openssl及交叉编译支持o…

20分钟6个示例4个动图教你学会Async Hooks

序幕 async_hooks模块提供了一个全新的功能世界,但作为 Node.js 爱好者,我最感兴趣的是,它可以让您轻松了解我们在应用程序中经常执行的一些任务的幕后情况。 在本文中,我将尝试借助async_hooks模块来演示和解释一个典型的异步资源的生命周期。 Async Hooks API 简介 as…

OSWatcher.sh脚本说明

OSWatcher.sh脚本位于oswbb目录下(Oracle 19c数据库中脚本的路径是: /u01/app/oracle/product/19.0.0/dbhome_1/suptools/tfa/release/tfa_home/ext/oswbb/),由脚本startOSWbb.sh和stopOSWbb.sh来调用启动和停止它。 1. startOSW…

《数据库系统概论》学习笔记——第七章 数据库设计

教材为数据库系统概论第五版(王珊) 这一章概念比较多。最重点就是7.4节。 7.1 数据库设计概述 数据库设计定义: 数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构&#x…

C#窗口介绍

窗口就是打开程序我们所面对的一个面板,里面可以添加各种控件,如下图所示,我们可以在属性栏设置其标题名称、图标、大小等。图1 窗口图 图2 设置面板 图3 设置双击标题框,会生成Load函数,也可以到事件里面去找Load函数…

线上监控诊断神器arthas

目录 什么是arthas 常用命令列表 1、dashboard仪表盘 2、heapdump dumpJAVA堆栈快照 3、jvm 4、thread 5、memory 官方文档 安装使用 1、云安装arthas 2、获取需要监控进程ID 3、运行arthas 4、进入仪表盘 5、其他命令使用查看官方文档 什么是arthas arthas是阿…

《嵌入式应用开发》实验一、开发环境搭建与布局(上)

1. 搭建开发环境 去官网(https://developer.android.google.cn/studio)下载 Android Studio。 安装SDK(默认Android 7.0即可) 全局 gradle 镜像配置 在用户主目录下的 .gradle 文件夹下面新建文件 init.gradle,内容为…

web服务器(1)

阻塞和非阻塞、同步和异步 网络IO阶段一:数据就绪 操作系统,tcp接受缓冲区 阻塞:调用IO方法的线程进入阻塞状态 非阻塞:不会改变线程的状态,通过返回值判断 网络IO阶段二:数据读写 应用程序 同步…

新闻稿的制作流程:从确定新闻稿目的到将其分发给媒体

对于任何希望向媒体和公众传达具有新闻价值的信息的组织来说,新闻稿都是必不可少的工具。精心制作的新闻稿可以帮助您宣传您的业务、产品或服务,并可以产生有价值的媒体报道。在本文中,我们将指导您完成新闻稿的制作过程,从确定新…

社区1月月报|OceanBase 4.1 即将发版,哪些功能将会更新?

我们每个月都会和大家展开一次社区进展的汇报沟通会,希望通过更多的互动交流让OceanBase 开源社区更加透明,实现信息共享,也希望能营造更加轻松的氛围,为大家答疑解惑,让大家畅所欲言。如果您对我们的社区有任何建议&a…

C#多窗口切换

多窗口切换【功能目标】1、实现多窗口切换(Panel)2、动态生成窗口内文本框以及标签(重点)3、改变文本框内容【效果图】【代码详解】1、多窗口切换如要实现多窗口切换,需要用到Panel,对于这个控件不熟悉的可…

13-mvc框架原理与实现方式

1、mvc原理 # mvc 与框架## 1.mvc 是什么1. m:model,模型(即数据来源),主要是针对数据库操作 2. v:view,视图,html 页面。视图由一个一个模板构成(模板是视图的一个具体展现或载体,视图是模板的一个抽象) 3. c:controller,控制器,用于mv之间的数据交互## 2.最简单的 mvc 就是一…

锁相环的组成和原理及应用

一.锁相环的基本组成 许多电子设备要正常工作,通常需要外部的输入信号与内部的振荡信号同步,利用锁相环路就可以实现这个目的。 锁相环路是一种反馈控制电路,简称锁相环(PLL)。锁相环的特点是:利用外部输入的参考信号控制环路内…