怎样更换网站cms,松江集团网站建设,哈尔滨网站推广优化公司,培训网站网站建设一.什么是RTMP#xff1f;RTMP#xff08;Real-Time Messaging Protocol#xff0c;实时消息传输协议#xff09;是一种用于低延迟、实时音视频和数据传输的双向互联网通信协议#xff0c;由Macromedia#xff08;后被Adobe收购#xff09;开发。RTMP的工作原理是#…一.什么是RTMPRTMPReal-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/CLinuxFFmpeg webRTC rtmp hls rtsp ffplay srs 等免費分享如有需要的可以加君羊领取哦~学习交流君羊994289133点击加入领取资料RTMP连接设置握手、连接、推拉流现在让我们一起来了解RTMP连接是如何建立的从而帮助我们更好地理解RTMP协议的工作原理。RTMP建立连接可分为三步握手、连接和推拉流。让我们分别看下这三个步骤。第一步握手RTMP中的握手过程相对简单在建立TCP连接后进行。在此握手过程中每一方客户端和服务端发送三个数据包分别为 C0、C1、C2 客户端和 S0、S1 、S2服务端。下面是对RTMP握手过程的解释客户端向服务器发送C0数据包数据包中包含客户端请求的RTMP版本。然后客户端在没有等到服务器表示已接收到C0的情况下发送包含了1536字节随机数据的C1。此时服务器必须等到它收到C0才能响应S0和S1可选。在这个阶段服务器知道客户端所请求的RTMP版本。服务器响应S0和S1——它们本质上是C0和C1的副本。然后客户端和服务器交换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规范定义了下面几个命令createStreamplayplay2deleteStreamcloseStreamreceiveAudioreceiveVideopublishseekpause在这些命令的帮助下才有可能使用RTMP协议传输视频。现在你对RTMP连接的工作原理已经有了基本的理解接下来让我们了解一些常用的RTMP变体。RTMP的变体RTMPS、RTMPT、RTMFP、RTMPE、RTMP Proper在这一部分我们将简单介绍用于特定目的的RTMP变体让我们从RTMPS开始。RTMPS RTMPS只是基于TLS/SSL 连接的RTMP。与RTMPE相比设置和使用RTMPS要复杂一些但是能够确保一定程度的安全性。如果你计划使用RTMP将视频传输到Facebook Live你需要使用RTMPSRTMPE 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数据源FFmpeghttp://Dacast.comhttp://Bitmovin.comAnt Media ServerWowza等其他更多的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以及音视频学习路线图等等。见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓