rtmp直播地址获取 rtmp推流

想了解下直播常见协议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 评论

留下您的评论.