您当前的位置:首页 > 电脑百科 > 网络技术 > 网络技术

RTMP协议推流交互流程

时间:2020-07-27 10:49:02  来源:  作者:

想了解下直播常见协议RTMP,可是看着网文,头疼,这里记录下RTMP协议推流播放的交互流程,细节可以再看规范,感觉会舒服一些。

RTMP(Real Time Messaging Protocol 实时消息传输协议)

RTMP是由Adobe公司提出的,在互联网TCP/IP五层体系结构中应用层,RTMP协议是基于TCP协议的······ , 吧啦吧啦的就不看了,先只了解它是基于tcp且可以用来推流的一个应用层协议就行了。

RTMP协议推流流程

然后看看它的一个推流过程

在TCP三次握手后(补个图)

RTMP协议推流交互流程

 

用RTMP协议的流媒体推流还需要经过以下几个步骤:

握手(RTMP连接都是以握手作为开始)

建立连接(建立客户端与服务器之间的“网络连接”)

建立流(建立客户端与服务器之间的“网络流”)

推流&播放

RTMP握手

首先服务端与客户端需要通过3次交换报文完成握手,RTMP是由三个静态大小的块,而不是可变大小的块组成的,客户端与服务器发送相同的三个chunk,客户端发送c0,c1,c2,服务端发送s0,s1,s2。

RTMP协议推流交互流程

 

●客户端发送 C0,C1 块,握手开始。

●客户端在发送 C2 之前客户端必须等待接收 S1 。

●客户端在发送任何数据之前客户端必须等待接收 S2。

●服务端在发送 S0 和 S1 之前必须等待接收 C0,也可以等待接收 C1。

●服务端在发送 S2 之前必须等待接收 C1。

●服务端在发送任何数据之前必须等待接收 C2。

RTMP建立连接

●客户端发送命令消息中的“连接”(connect)到服务器,请求与一个服务应用实例建立连接。

●服务器接收到连接命令消息后,发送确认窗口大小(Window Acknowledgement Size)协议消息到客户端,同时连接到连接命令中提到的应用程序。

●服务器发送设置带宽协议(Set Peer Bandwidth)消息到客户端。

●客户端处理设置带宽协议消息后,发送确认窗口大小(Window Acknowledgement Size)协议消息到服务器端。

●服务器发送用户控制消息中的“流开始”(Stream Begin)消息到客户端。

●服务器发送命令消息中的“结果”(_result),通知客户端连接的状态。

RTMP协议推流交互流程

 

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。

●之后,客户端播放服务器发送的音频和视频数据

RTMP协议推流交互流程

 

Wireshark抓个RTMP流

湖南卫视的RTMP流

ffplay rtmp://58.200.131.2:1935/livetv/hunantv

RTMP协议推流交互流程

 

抛开握手不看流程如下:

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,3000ms

Server :

Stream Begin 1  onStatus('NetStream.Play.Start')  RtmpSampleAccess()  onMetaData()

Server :

Video Data  Audio Data  ...

其他关于协议细节再看看协议规范 rtmp_specification_1.0.pdf

参考 : rtmp_specification_1.0.pdf



Tags:RTMP协议   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
1.RTMP描述RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的⼀种应⽤层的协议,⽤来解决多媒体数据传输流的多路复⽤(Multiplexing)和分包(p...【详细内容】
2020-10-14  Tags: RTMP协议  点击:(323)  评论:(0)  加入收藏
TSINGSEE青犀视频团队研发在更新升级视频平台时,都增加了WS-FLV的播放格式,之前的博文解决过EasyGBS新版ws_flv视频流无法播放问题,EasyDSS视频直播点播平台更新后也支持ws_flv...【详细内容】
2020-08-19  Tags: RTMP协议  点击:(154)  评论:(0)  加入收藏
想了解下直播常见协议RTMP,可是看着网文,头疼,这里记录下RTMP协议推流播放的交互流程,细节可以再看规范,感觉会舒服一些。RTMP(Real Time Messaging Protocol 实时消息传输协议)RTM...【详细内容】
2020-07-27  Tags: RTMP协议  点击:(102)  评论:(0)  加入收藏
▌简易百科推荐
写一个shell获取本机ip地址、网关地址以及dns信息。经常会遇到取本机ip、网关、dns地址,windows一个命令ipconfig /all全部获取到,但linux系统却并非如此。linux系统都自带ifc...【详细内容】
2021-12-27  K佬食古    Tags:shell   点击:(1)  评论:(0)  加入收藏
步骤1、配置 /etc/sysconfig/network-scripts/ifcfg-eth0 里的文件。it动力的CentOS下的ifcfg-eth0的配置详情:[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifc...【详细内容】
2021-12-24  忆梦如风    Tags:网卡   点击:(9)  评论:(0)  加入收藏
1、查找当前目录下所有以.tar结尾的文件然后移动到指定目录find . -name “*.tar” -execmv {}./backup/ ;注解:find –name 主要用于查找某个文件名字,-exec 、xargs可...【详细内容】
2021-12-17  郭主任    Tags:运维   点击:(19)  评论:(0)  加入收藏
对于经常上网的朋友来说,除了手机购物上网,pc端玩网页游戏还是很多小伙伴首选的,但是有时候明明宽带链接上了,打开浏览器却出现上不了网的现象,下面小编要来跟大家说说电脑有网络...【详细内容】
2021-12-16  小白系统    Tags:网页无法打开   点击:(28)  评论:(0)  加入收藏
在访问像github、gitlab这样的外国网站时,很有可能会出现页面加载不出来或找不到页面的错误。这时候有的朋友就会以为是网络的问题,于是把Wifi断掉连上自己手机的热点,结果却还...【详细内容】
2021-12-15  启施技术IT狼叔    Tags:外网   点击:(14)  评论:(0)  加入收藏
网络地址来源:获取公网IP地址 https://ipip.yy.com/get_ip_info.phphttp://pv.sohu.com/cityjson?ie=utf-8http://www.ip168.com/json.do?view=myipaddress...【详细内容】
2021-12-15  韦廷华12    Tags:外网ip   点击:(14)  评论:(0)  加入收藏
准备好软件IPOP、用ENSP模拟一下华为交换机 启动交换机 <Huawei>sysEnter system view, return user view with Ctrl+Z.[Huawei]sysname FTPClient[FTPClient]interface vla...【详细内容】
2021-12-15  思源Edward    Tags:交换机   点击:(22)  评论:(0)  加入收藏
我们经常用到netstat命令查看主机连接状况,包括连接ip、端口、状态等,今天就练习下shell分析netsat结果。描述假设netstat命令运行的结果我们存储在nowcoder.txt里,格式如下:Pro...【详细内容】
2021-12-14  K佬食古    Tags:netstat   点击:(19)  评论:(0)  加入收藏
什么是滑动窗口?窗口是操作系统开辟的一块缓存空间,发送方在收到接收方ACK应答之前,必须在缓冲区保留已发送的数据,如果按期收到确认应答,数据就可以从缓冲区移除。什么是滑动窗...【详细内容】
2021-12-14  DifferentJava    Tags:TCP   点击:(28)  评论:(0)  加入收藏
概述日常管理华为路由设备过程中,难为会忘记设备登录密码,那么该如何重置设备登录密码吗?本期文章将全面向各位小伙伴总结分享。重置华为设备登录密码思路先行 采用console登录...【详细内容】
2021-12-10  onme0    Tags:   点击:(27)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条