本文描述了从打开一个RTMP流媒体到视音频数据开始播放的全过程。
注意:RTMP中的逻辑结构
RTMP协议规定,播放一个流媒体有两个前提步骤:第一步,建立一个网络连接(NetConnection);第二步,建立一个网络流(NetStream)。其中,网络连接代表服务器端应用程序和客户端之间基础的连通关系。网络流代表了发送多媒体数据的通道。服务器和客户端之间只能建立一个网络连接,但是基于该连接可以创建很多网络流。他们的关系如图所示:
1 简要介绍
播放一个RTMP协议的流媒体需要经过以下几个步骤:握手,建立连接,建立流,播放。RTMP连接都是以握手作为开始的。建立连接阶段用于建立客户端与服务器之间的“网络连接”;建立流阶段用于建立客户端与服务器之间的“网络流”;播放阶段用于传输视音频数据。
2 握手(HandShake)
一个RTMP连接以握手开始,双方分别发送大小固定的三个数据块
a)握手开始于客户端发送C0、C1块。服务器收到C0或C1后发送S0和S1。
b)当客户端收齐S0和S1后,开始发送C2。当服务器收齐C0和C1后,开始发送S2。
c)当客户端和服务器分别收到S2和C2后,握手完成。
握手
3建立网络连接(NetConnection)
a)客户端发送命令消息中的“连接”(connect)到服务器,请求与一个服务应用实例建立连接。
b)服务器接收到连接命令消息后,发送确认窗口大小(Window Acknowledgement Size)协议消息到客户端,同时连接到连接命令中提到的应用程序。
c)服务器发送设置带宽()协议消息到客户端。
d)客户端处理设置带宽协议消息后,发送确认窗口大小(Window Acknowledgement Size)协议消息到服务器端。
e)服务器发送用户控制消息中的“流开始”(Stream Begin)消息到客户端。
f)服务器发送命令消息中的“结果”(_result),通知客户端连接的状态。
建立连接
4建立网络流(NetStream)
a) 客户端发送命令消息中的“创建流”(createStream)命令到服务器端。
b) 服务器端接收到“创建流”命令后,发送命令消息中的“结果”(_result),通知客户端流的状态。
建立流
5 播放(Play)
a)客户端发送命令消息中的“播放”(play)命令到服务器。
b)接收到播放命令后,服务器发送设置块大小(ChunkSize)协议消息。
c)服务器发送用户控制消息中的“streambegin”,告知客户端流ID。
d)播放命令成功的话,服务器发送命令消息中的“响应状态” NetStream.Play.Start & NetStream.Play.reset,告知客户端“播放”命令执行成功。
e)在此之后服务器发送客户端要播放的音频和视频数据。
播放流
RTMP协议规范(中文翻译):http://download.csdn.net/detail/leixiaohua1020/6563059
相关推荐
需要先创建推流的流媒体地址,然后再创建一个对象启动推流,创建过程如下。 RtmpPublishManager* rpm = new RtmpPublishManager("rtmp://192.168.16.88:1935/hls/test0", read_fd[0]); rpm->ffmpeg_init(NULL); rpm-...
内容由流媒体协议等基本知识,视频媒体基本知识,流媒体服务器搭建实战,流媒体工具使用实战等内容组成。由本人“天地会珠海分舵”(http://blog.csdn.net/zhubaitian)耗时一个月整理而成,现分享给大家。 章节内容...
这里有最基本的简单编译部署过程 Android直播实现(二)srs流媒体服务器部署 播放器 android端的播放使用vitamio,还是国内的开源播放器,是不是感觉国内的前辈们越来越屌了^~^! vitamio支持几乎所有常见的的视频...
本文介绍的是利用nginx和ffmpeg搭建流媒体服务器的过程。例如这种场景:公司内部需要同时观看在线直播时,如果每个人直接观看必然给出口带宽带来压力,影响正常访问外网的同事。所以可以在内网通过nginx+ffmpeg拉...
网络媒体流拉取播放器是在开发RTSP和RTMP推拉流功能时的测试利器,在日常测试使用过程中已经过详细参数优化,值得各位收藏。
这篇文章主要介绍了python处理RSTP视频流过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python链接海康摄像头,并以弹出框的方式播放实时视频流, ...
可以搭建一个接收摄像头国标协议推流的国标流媒体服务,然后实现RTSP/RTMP/HTTP-FVL/HLS/WS/SRT等协议分发视频流。 3. BXC_SipServer负责信令模块,ZLMediaKit负责流媒体模块。 4. BXC_SipServer作为国标流媒体...
主要特点支持,可以将流推送到并从中播放支持代理推/拉请求支持 / / 播放支持rtmp推送流由唯一确定可配置的推/拉支持,消除了rtmp握手过程支持(通过http)检查当前服务器/流的状态支持 (比rtmp / flv慢约一秒) ...
:white_heavy_check_mark: Pending , On Live和Finish live stream过程中的实时更新状态 :white_heavy_check_mark: 直播时,直播员和观众可以聊天并发送心声教学使用使用节点媒体服务器入门我们首先需要RTMP服务器...
本文详细介绍了centos环境下搭建nginx 流媒体服务器的过程,包括搭建nginx服务器,播放插件的安装和部署,ffmpeg推流等详细内容。希望对初学者有帮助,能够少走弯路。
带状态回调处理程序的RTMP流。 纵向和横向动态定位。 前后摄像头热开关。 流式传输时录制到MP4。 带有GPUImage的精美滤镜。 回声消除和自动增益控制支持。 测试 您可以构建自己的私有RTMP服务器 。 切记自己...
:television: 实时流RTMP服务器 使用RTMP进行实时流以实现React Native App实时流 客户端: : 演示版v2 注意:这是2.0版的演示 演示版v1 注意:这是1.0版的演示 流光 观看者 特征 :check_mark_button: 带有输入...
视音频在网络上传播的时候,常常采用各种流媒体协议,例如HTTP,RTMP,或是MMS等等。这些协议在传输视音频数据的同时,也会传输一些信令数据。这些信令数据包括对播放的控制(播放,暂停,停止),或者对网络状态的...
也可以单独使用的RTMP推送库,通过EasyRTMP我们就可以避免接触到稍显复杂的RTMP推送流程,只需要调用EasyRTMP的几个API接口,就能轻松、稳定地把流媒体音视频数据推送给Red5、Ngnix、crtmpserver等RTMP服务器:...
秘钥可以随便填写一个,用来播放的时候识别播放哪个流媒体的,例如填写test等。 填写完毕后,点击开始串流,就说明我们的流媒体服务器搭建成功了。 5、观看直播(拉流) 观看直播就比较简单了,可以简单的使用h5的...
RTSP过滤器可让您将流媒体源保存到文件而无需转码,并且在运行中生成新文件时不会丢失帧。 TvideoGrabber还支持采用罗技C920(H264),Blackmagic Decklink,Hauppauge Colossus等硬件编码器捕捉设备。 大多数编码...
服务器上去,为移动端播放提供音视频支持(注意,由于旁路的RTMP流是通过ffmpeg子进程实现,并且有音频转码的过程,所以性能将有很大的下降)。 非常感谢 孤峰赏月/hx() 提供的mp3音频支持。 分支说明 原项目有4个...
NGINX服务器 ...需要在Ubuntu 16.04上安装 不要最小化使用Ubuntu。 使用常规的16.04图像 #安装步骤 ... 安装是自动的,最初的部分除外,您需要为时区和日期配置选择... 使NGINX服务器访问Shell脚本需要此过程。 如果要允
当时的名字叫ixibi,发展至今大概可以分为这五个阶段,中间还有细节升级便不再描述: 第1阶段(基础流媒体直播)-采用FMS(Adobe Flash Media Server)作为流媒体服务器,官方Flash作为rtmp播放器,实
通过android移动端实时采集视频,同时在拍摄过程中支持多种实时滤镜效果,只要调用视频直播接口,通过3G、4G、WIFI等网络,推流发送给云端流媒体直播系统处理,并通过CDN视频加速分发做现场直播播出,供远程观看...