直播-rtmp学习

RTMP(实时消息传输协议),官方介绍如下:

Adobe’s Real Time Messaging Protocol (RTMP), an application-level protocol designed for multiplexing and packetizing multimedia transport streams (such as audio, video, and interactive content) over a suitable transport protocol (such as TCP).

这里这样简单的理解rtmp:

NetConnection 命令

NetConnection 管理着一个客户端应用和服务器端之间的双相连接。此外,它还提供远程方法的异步调用。

NetConnection 可以发送以下命令:

  • connect
  • call
  • close
  • createStream

NetStream 命令

NetStream 定义了传输通道,通过这个通道,音频流、视频流以及数据消息流可以通过连接客户端到服务端的 NetConnection 传输。

以下命令可以由客户端使用 NetStream 往服务器端发送:

  • play
  • play2
  • deleteStream
  • closeStream
  • receiveAudio
  • receiveVideo
  • publish
  • seek
  • pause

握手

命令执行时消息流动如下:

1. 客户端发送 connect 命令到服务器端以请求对服务器端应用实例的连接。

2. 收到 connect 命令后,服务器端发送协议消息 ‘窗口确认大小‘ 到客户端。服务器端也会连接到 connect 命令中提到的应用。

3. 服务器端发送协议消息 ‘设置对端带宽‘ 到客户端。

4. 在处理完协议消息 ‘设置对端带宽‘ 之后客户端发送协议消息 ‘窗口确认大小‘ 到服务器端。

5. 服务器端发送另一个用户控制消息 (StreamBegin) 类型的协议消息到客户端。

6. 服务器端发送结果命令消息告知客户端连接状态 (success/fail)。这一命令定义了事务 ID (常常为 connect 命令设置为 1)。这一消息也定义了一些属性,比如 FMS 服务器版本 (字符串)。此外,它还定义了其他连接关联到的信息,比如 level (字符串)、code (字符串)、description (字符串)、objectencoding (数字) 等等。

播放

命令执行时的消息流动是为:

1. 当客户端从服务器端接收到 createStream 命令的结果是为 success 时,发送 play 命令。

2. 一旦接收到 play 命令,服务器端发送一个协议消息来设置块大小。

3. 服务器端发送另一个协议消息 (用户控制),这个消息中定义了 ‘StreamIsRecorded‘ 事件和流 ID。消息在前两个字节中保存事件类型,在后四个字节中保存流 ID。

4. 服务器端发送另一个协议消息 (用户控制),这一消息包含 ‘StreamBegin‘ 事件,来指示发送给客户端的流的起点。

5. 如果客户端发送的 play 命令成功,服务器端发送一个 onStatus 命令消息 NetStream.Play.Start & NetStream.Play.Reset。只有当客户端发送的 play 命令设置了 reset 时服务器端才会发送 NetStream.Play.Reset。如果要播放的流没有找到,服务器端发送 onStatus 消息 NetStream.Play.StreamNotFound。

之后,服务器端发送视频和音频数据,客户端对其进行播放。

发布

参考资料

1.http://blog.csdn.net/defonds/article/details/17534903

时间: 2024-08-24 15:58:53

直播-rtmp学习的相关文章

Android 如何直播RTMP流

在android上,视频/音频流直播是极少有人关注的一部分.每当我们讨论流媒体,RTMP(Real Time Messaging Protocol)是不可或缺的.RTMP是一个基本的视频/音频直播流协议,但是不幸的是Android标准的VideoView不支持RTMP的播放.因此,如果想在android上播放RTMP直播流,你必须使用支持RTMP协议的库.  库播放由 RTMP 协议传输的流媒体. Android Vitamio 库 Vitamio是一个android和ios上基于FFmpeg的

Android直播推流学习

Android直播推流学习 Android直播推流学习 第一部 第二部 第三部 第四部 第一部 本文也主要是一步步分析spydroid源码. 首先spydroid的采用的协议是RTSP,目前我知道支持RTSP协议的服务器是Darwin,但是Darwin比较复杂,所以大家可以选择EasyDarwin,大家可以去搜搜看看.还是继续说spydroid吧,spydroid这个项目大家可以在github上搜到的,不过作者也是很久没有更新了,如果大家只做推流的话可以看看原作者的另外一个项目Spydroid.

直播技术学习笔记(一)

播放器相关技术: 1.开源项目jjdxm_ijkplayer是基于ijkplayer简单的UI界面: ijkplayer是一个基于 FFmpeg n2.6 的开源 Android/iOS 视频播放器: 2.虚拟按键的隐藏方法: rootView = getLayoutInflater().from(this).inflate(R.layout.activity_calrity,null); setContentView(rootView); /**虚拟按键的隐藏方法*/ rootView.get

iOS 视频直播的学习之路 ---- 直播大时代

首先,今天偶尔看了庄明浩先生的一篇演讲,大概内容如下(想看完整版的在这里 https://zhuanlan.zhihu.com/p/20717041): 直播大概是最近一段时间被资本市场疯狂关注,现在我们看到的这些公司上线都已经有段时间.以斗鱼为代表的直播平台,自14年创立到 现在已经有俩年的时间了.映客这一波为代表公司 ,创立的时候应该是15年年初.在15年下半年的时候,他们火过一波.今天为什么关注呢?有很多的原因,有资本市场的原因,有行业发展的原因,当然也有这些公司估值的原因等等.作为一个观

rtmp学习(二)

用于Flash播放器和服务器之间传输音频.视频.数据 RTMP协议本身既可以传输多媒体数据,也可以控制多媒体播放 RTMP是应用层协议 消息(基本数据单元) Message Type ID(1-7用于协议控制,RTMP协议自身管理使用,控制协议的stream id必须是0,chunk stream id必须是2,8传输音频数据,9传输视频数据,15-20用于发送AMF编码,负责用户与服务器之间的交互,比如播放暂停等) 消息块 Chunk Basic Header用于标识本块 Chunk Mess

从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直播程序员写代码> 来介绍它. Livecoding.tv是在2015年2月在美国正式上线的.公司的总部位于旧金山,创办人也是一位程序员. 网上直播已经不是新鲜事了,但正儿八经地直播程序员写代码确实少见.难怪品玩的编辑在他的文章中这样写道:"这么逗的一个东西,你跟我说它是一个教育平台?呃,然而好

nginx视频直播/点播服务干货分享

近年互联网直播业务非常火热.我也研究了下,发现nginx上配置视频直播点播也很容易实现,特分享一下.一.ubuntu14.04安装nginx及nginx_rtmp_module扩展 nginx根据是否已安装和安装的方式不同,有一下三种方式安装及扩展安装.1.全新安装nginx和nginx_rtmp_module扩展 #!/bin/sh apt-get update apt-get install -y gcc libpcre3 libpcre3-dev openssl libssl-dev ma

小程序直播功能开发经过 开发直播小程序的过程 微信直播小程序 直播答题小程序开发 小程序怎么做直播

公司要开发一个直播的小程序,现在直播小程序应用场景也很多.比如电商的直播,在线直播购物下单.还有就是一些教育类的,小程序直播答题.也研究了下微信小程序的直播文档,然后百度也搜了下各位前辈的开发历程.这里我总结下我开发的一些经过. 首先你要注册好一个你的小程序,然后申请小程序的类目,只要下面这些类目你能申请到就可以开通小程序的直播功能.然后就开始开发啦. 如下是微信小程序的要求: 暂只针对如下类目开放,需要先通过类目审核,再在小程序管理后台,"设置"-"接口设置"中自

基于nginx的rtmp的服务器(nginx-rtmp-module)

一,首先下载安装nginx需要依赖的库文件: 1.1,选定源码目录 选定目录 /usr/local/RTMP cd /usr/local/RTMP 1.2,安装PCRE库 cd /usr/local/RTMP 到www.pcre.org 下载pcre-8.37.tar.gz , 然后拷贝到/usr/local/HLS tar -zxvf pcre-8.37.tar.gz cd pcre-8.37 ./configure make make install 1.3,安装zlib库 cd /usr/