想了解下直播常见协议RTMP,可是看着网文,头疼,这里记录下RTMP协议推流播放的交互流程,细节可以再看规范,感觉会舒服一些。
RTMP(Real Time Messaging Protocol 实时消息传输协议)
RTMP是由Adobe公司提出的,在互联网TCP/IP五层体系结构中应用层,RTMP协议是基于TCP协议的······ , 吧啦吧啦的就不看了,先只了解它是基于tcp且可以用来推流的一个应用层协议就行了。
RTMP协议推流流程
然后看看它的一个推流过程
在TCP三次握手后(补个图)
RTMP建流&Play
●客户端在收到来自服务器的建流命令(createstream)的成功结果(_result)后发送(play)命令。
●服务器在接收到play命令后,发送一个来设置块大小(SetChunkSize)消息。
●服务器发送另一个用户控制消息,指定事件“流记录”(StreamIsRecorded)和流ID。这个消息的头2字节携带事件类型,最后4字节携带流ID。
●服务器发送另一个用户控制消息,指定事件“流开始”(StreamBegin)。向客户端指示流的开始。
●如果客户端发送的播放(play)命令成功,服务器发送命令消息(onStatus),NeStream.Play.Start & NeStream.Play.Reset。
只有当客户端发送的play命令设置了reset标志时,服务器才会发送NeStream.Play.Reset。
●如果没有找到要播放的流,服务器将发送onStatus消息NeStream.Play.StreamNotFound。
●之后,客户端播放服务器发送的音频和视频数据
Wireshark抓个RTMP流
湖南卫视的RTMP流
ffplay rtmp://58.200.131.2:1935/livetv/hunantv
抛开握手不看流程如下:
Client :
connect(‘livetv’)Server :
Window Acknowledgement Size 5000000 Set Peer Bandwidth 5000000,Dynamic Set Chunk Size 4096 _result(‘NetConnection.Connect.Success’)Client :
Window Acknowledgement Size 5000000 createStream()Server :
_result()
Client :
getStreamLength() play(‘hunantv’) Set Buffer Length 1,3000msServer :
Stream Begin 1 onStatus(‘NetStream.Play.Start’) RtmpSampleAccess() onMetaData()Server :
Video Data Audio Data …
其他关于协议细节再看看协议规范 rtmp_specification_1.0.pdf
参考 : rtmp_specification_1.0.pdf
关注公众号:lmcjl_com(长按复制)
本文来自作者:小默,不代表懒猪博客立场!
转载请注明:https://my.lmcjl.com/166134.html
本文链接:https://my.lmcjl.com/post/1996.html
4 评论