RTMP协议概述
介绍:
RTMP协议是被Flash用于对象,视频,音频的传输.该协议建立在TCP协议或者轮询HTTP协议之上.
RTMP协议就像一个用来装数据包的容器,这些数据可以是AMF格式的数据,也可以是FLV中的视/音频数据.
一个单一的连接可以通过不同的通道传输多路网络流.这些通道中的包都是按照固定大小的包传输的.
网络连接(Connection)
一个Actionscript连接并播放一个流的简单代码:
[Copy to clipboard]
CODE:
var videoInstance:Video = your_video_instance;
var nc:NetConnection = new NetConnection();
var connected:Boolean = nc.connect("rtmp:/localhost/myapp");
var ns:NetStream = new NetStream(nc);
videoInstance.attachVideo(ns);
ns.play("flvName");
默认端口为1935
握手
Client → Server :向服务器发出握手请求.这不属于协议包一部分,该握手请求第一个字节为(0×03),其后跟着1536个字节.经管看上去这部分的内容对于RTMP协议来说并不是至关重要的,但也不可随意对待.
Server → Client :服务器向客户端回应握手请求.这部分的数据仍然不属于RTMP协议的部分.该回应的其实字节仍然为(0x03),但是后边跟着个长度为1536个字节 (一共为3072 )的包块.第一个1536块看上去似乎可以是任意内容,甚至好像可以是Null都没有关系.第二个1536的代码块,是上一步客户端向服务器端发送的握手请求的内容.
Client→Server:把上一步服务器向客户端回应的第二块1536个字节的数据块.
至此客户端与服务器端的握手结束,下面将发送RTMP协议的包内容.
Client → Server :向服务器发送连接包.
Server → Client :服务器回应.
... .... 等等... ...
RTMP 数据类型
0×01 Chunk Size changes the chunk size for packets
0×02 Unknown anyone know this one?
0×03 Bytes Read send every x bytes read by both sides
0×04 Ping ping is a stream control message, has subtypes
0×05 Server BW the servers downstream bw
0×06 Client BW the clients upstream bw
0×07 Unknown anyone know this one?
0×08 Audio Data packet containing audio
0×09 Video Data packet containing video data
0x0A - 0×11 Unknown anyone know?
0×12 Notify an invoke which does not expect a reply
0×13 Shared Object has subtypes
0×14 Invoke like remoting call, used for stream actions too.
Shared Object 数据类型
0×01 Connect
0×02 Disconnect
0×03 Set Attribute
0×04 Update Data
0×05 Update Attribute
0×06 Send Message
0×07 Status
0×08 Clear Data
0×09 Delete Data
0x0A Delete Attribute
0x0B
Initial Data
RTMP包结构
RTMP包 包含一个固定长度的包头和一个最长为128字节的包体.包头可以是下面4种长度的任意一种:12, 8, 4, or 1 byte(s).
第一个字节的前两个Bit很重要,它决定了包头的长度.它可以用掩码0xC0进行"与"计算.下面的表格罗列了可能的包头长度:
Bits Header Length
00 12 bytes
01 8 bytes
10 4 bytes
11 1 byte
我们在这里讨论关RTMP包结构的问题并不是非常的详细.我们在以后有时间会讨论关于AMF的问题(敬请期待...),其实RTMP包结构就是使用了AMF格式.
流
关于流的操作我们需要进一步研究,在论坛中的http://www.openred5.com/bbs/viewthread.php?tid=175&extra=page%3D1这篇文章研究的还是不错的,大家可以参考.不过下面可以列一个关于客户端向服务器端发送流的流程:
Client→Server :发送一个创建流的请求.
Server→Client :返回一个表示流的索引号.
Client→Server :开始发送.
Client→Server :发送视音频数据包(这些包在同一个频道(channel)并用流的索引号来唯一标识).
分享到:
相关推荐
"RTMP 协议规范中文版详解" RTMP(Real-Time Messaging Protocol)是一种应用层协议,主要用于通过可靠的传输层协议(例如 TCP)复用、打包多媒体数据流(音频、视频和交互数据)。RTMP 块流是一种基于 RTMP 的协议...
本项目“rtmpServer-master_nettyrtmp_rtmp推流_netty开发rtmp_rtmpServer-master”是针对RTMP协议开发的一个服务器端实现,它基于强大的Java网络库Netty。以下将详细介绍该服务器的开发背景、功能、核心技术和应用...
RTMP(Real-Time Messaging Protocol,实时消息传输协议)是一种基于TCP的应用层协议,主要用于在互联网上进行音频、视频数据的实时传输。RTMP推流则是将音视频数据通过RTMP协议推送到服务器的过程,常用于直播系统...
在Android平台上实现RTMP推流是一项技术性很强的工作,它涉及到多媒体处理、网络通信以及实时传输协议等多个领域的知识。RTMP(Real-Time Messaging Protocol)是一种广泛用于直播的协议,能够实现实时音视频数据从...
RTMP(Real-Time Messaging Protocol)是一种广泛用于在线流媒体传输的协议,主要应用于视频直播领域。Nginx是一款高性能的HTTP和反向代理服务器,同时也支持RTMP协议,使其能够作为一个流媒体服务器来使用。本篇...
【H5 RTMP播放Demo详解】 在现代网络技术中,H5(HTML5)作为下一代网页标准,提供了丰富的媒体处理能力。RTMP(Real-Time Messaging Protocol)则是一种用于音视频实时传输的协议,广泛应用于直播系统。本示例是...
【Nginx RTMP 转发服务器详解】 Nginx RTMP服务器是一个基于Nginx的开源扩展,专门设计用于处理实时流媒体协议(RTMP)。它为内容发布者和消费者提供了一个高效、低延迟的平台,适用于直播、视频点播等多种应用场景...
RTMP(Real-Time Messaging Protocol)抓包工具是网络调试和分析的重要辅助软件,主要用于捕捉、记录和分析RTMP协议的数据流。RTMP是一种用于实时数据传输的协议,常见于在线视频流媒体服务,如Adobe Flash Player...
RTMP(Real-Time Messaging Protocol)是一种广泛用于在线流媒体传输的协议,主要由Adobe Systems开发,主要用于将音视频数据从服务器推送到客户端。在本文中,我们将深入探讨RTMP播放工具,尤其是那些支持H265编码...
在本文中,我们将深入探讨如何基于rtmpdump将RTMP数据包转换并解码为H264视频和AAC音频,然后将这些流打包成TS(Transport Stream)格式。RTMP(Real-Time Messaging Protocol)是一种协议,常用于实时传输音频、...
RTMP(Real-Time Messaging Protocol)是由Adobe Systems开发的一种用于音视频数据实时传输的协议,广泛应用于在线直播系统。在HTML环境中播放RTMP流,通常需要借助特定的播放器插件或JavaScript库。 CKPlayer是一...
ffmpeg -rtsp_transport tcp -i rtsp://{0}:{1}@{2}:554/h264/ch1/sub/av_stream -s 640x480 -vcodec libx264 -acodec aac -bf 0 -preset:v ultrafast -tune:v zerolatency -vf fps=fps=25 -f flv rtmp://localhost:...
【搭建Ubuntu RTMP视频服务器详解】 在IT行业中,实时传输协议(RTMP)常用于视频直播和点播服务,尤其在编码器与服务器之间进行数据传输时。本教程将指导你如何在Ubuntu操作系统上搭建一个简单的RTMP服务器,以便...
RTMP(Real-Time Messaging Protocol)是一种广泛用于在线流媒体传输的协议,主要用于将音视频数据从服务器推送到客户端。在本项目"rtmpS.rar"中,我们可以看到它涉及到RTMP、RTMPS、rtmpdump以及RTMP客户端的相关...
`rtmpdump`是基于RTMP协议的一个开源工具,它提供了一种方便的方式来捕获、分析以及回放RTMP流,对于开发者来说,是一个强大的调试和集成RTMP功能的实用程序。 **RTMP协议详解:** RTMP协议基于TCP,主要由三部分...
"安卓rtmp推流工具"就是这样一个应用程序,它允许用户通过安卓设备将实时视频或音频内容推送到支持RTMP协议的流媒体服务器,从而实现直播或者点播服务。下面将详细介绍这个工具及其相关知识点。 RTMP(Real-Time ...
Nginx,作为一款高性能的Web服务器,通过RTMP模块扩展,能够支持RTMP协议,从而实现直播和点播服务。 首先,我们来了解下Nginx的基本概念。Nginx以其反向代理、负载均衡和静态文件处理能力而闻名。它的事件驱动架构...
RTMP(Real-Time Messaging Protocol)是一种实时传输协议,主要用于音视频数据的低延迟直播和点播。在网页中播放RTMP视频流,通常需要借助特定的技术或插件,因为原生的HTML5视频标签不支持RTMP协议。针对IE11...
**rtmpdump与librtmp库** rtmpdump是一款开源工具,主要用于从RTMP(Real Time Messaging Protocol)服务器上下载和播放流媒体内容。它基于librtmp库,这是一个小型但功能强大的库,用于与RTMP服务器进行通信。...
RTMP(Real-Time Messaging Protocol)和FLV(Flash Video)是两种常见的流媒体技术,广泛应用于在线直播领域。RTMP是一种由Adobe Systems开发的实时数据传输协议,主要用于将音视频流推送到服务器,并由服务器分发...