说起RTMP,可能大家会感觉到一些陌生,今天我们就来谈谈RTMP视频协议.
在视频协议中我们比较熟悉并且接触的比较多的可能是HTTP协议,其实RTMP,RTSP,HTTP三个协议都是属于互联网TCP/IP五层体系结构中应用层的协议,理论上这三种都可以用来做视频直播或点播。但通常来说,直播一般用 RTMP、 RTSP。而点播用 HTTP.
RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。RTMP协议就像一个用来装数据包的容器,这些数据既可以是AMF格式的数据,也可以是FLV中的视/音频数据.一个单一的连接可以通过不同的通道传输多路网络流.这些通道中的包都是按照固定大小的包传输的.它的默认端口为1935.
播放一个RTMP协议的流媒体需要经过以下几个步骤:握手,建立连接,建立流,播放。RTMP连接都是以握手作为开始的。建立连接阶段用于建立客户端与服务器之间的“网络连接”;建立流阶段用于建立客户端与服务器之间的“网络流”;播放阶段用于传输视音频数据。
1.握手(HandShake)
一个RTMP连接以握手开始,双方分别发送大小固定的三个数据块
a)握手开始于客户端发送C0、C1块。服务器收到C0或C1后发送S0和S1。
b)当客户端收齐S0和S1后,开始发送C2。当服务器收齐C0和C1后,开始发送S2。
c)当客户端和服务器分别收到S2和C2后,握手完成。
2.建立网络连接(NetConnection)
a)客户端发送命令消息中的“连接”(connect)到服务器,请求与一个服务应用实例建立连接。
b)服务器接收到连接命令消息后,发送确认窗口大小(WindowAcknowledgement Size)协议消息到客户端,同时连接到连接命令中提到的应用程序。
c)服务器发送设置带宽协议消息到客户端。
d)客户端处理设置带宽协议消息后,发送确认窗口大小(WindowAcknowledgement Size)协议消息到服务器端。
e)服务器发送用户控制消息中的“流开始”(Stream Begin)消息到客户端。
f)服务器发送命令消息中的“结果”(_result),通知客户端连接的状态。
3.建立网络流(NetStream)
a)客户端发送命令消息中的“创建流”(createStream)命令到服务器端。
b)服务器端接收到“创建流”命令后,发送命令消息中的“结果”(_result),通知客户端流的状态。
4.播放(Play)
a)客户端发送命令消息中的“播放”(play)命令到服务器。
b)接收到播放命令后,服务器发送设置块大小(ChunkSize)协议消息。
c)服务器发送用户控制消息中的“streambegin”,告知客户端流ID。
d)播放命令成功的话,服务器发送命令消息中的“响应状态” NetStream.Play.Start & NetStream.Play.reset,告知客户端“播放”命令执行成功。
e)在此之后服务器发送客户端要播放的音频和视频数据。
根据这个原理,我们将其应用到我们的执法仪当中.
因为RTMP URL是动态URL。故而我们第一步是主动在客户端获取流(手动双击以打开设备视频或代码以对其进行仿真),然后系统将创建一个会话并动态分配session ID,然后此RTMP URL 由PU_ID, session ID, channel NO,时间以及一个随机数组成。
比如:
rtmp://server_IP:1935/bvapp/PU_ID+sessionID+channelNO+yyyymmdd_hhmmss+arandom number,
主要步骤如下:
1.搭建并运行服务器,并成功安装smarteye服务器软件;
2.在我们的执法仪中安装MCP软件,联网并填入服务器登录信息且登录
3.在浏览器中输入http://server_IP:8081/Demo/video.html
4.在该网站中需要允许flash运行,在浏览器中设置成功即可.并将该网站重新加载.
5.在进入网站后登录服务器,如下:
6.根据网站提示,输入执法仪的设备ID(该设备ID需要在执法仪的MCP界面上查找).
7.在该网址界面点击打开视频RTMP,视频会进行握手,建立连接,建立流,播放等步骤,同时也可以获取到实时的RTMP视频链接.
8.打开VLC media play,将该实时的RTMP链接粘贴到直播流中,我们便可以进行实时观看.