RTMP消息详细介绍
本文继上篇简单分析了RTMP协议如何进行通信进一步详细分析RTMP的消息都有哪些,以及这些消息有什么作用。
一、RMTP消息
由上一篇文章可知RTMP 消息有分成两个部分,一个是头部,一个是有效负载。服务器和客户端通过网络发送 RTMP 消息相互进行通讯。消息可以包括音频,视频,数据,甚至其它任何数据。
二、消息头
消息类型(Message Type):字段占用 1 字节来表示消息类型。类型的 ID 范围在(1-6)保留给协议控制消息。
长度(Length):字段占用 3 字节来表示有效负荷以字节为单位的长度。
时间戳(Timestamp):字段占用 4 字节来表示消息的时间戳。
消息流 ID(Message Stream Id):字段占用 3 字节来消息流的 ID。

三、有效负载
消息的其它部分就是有效负载,这是包含在消息中的实际数据。
四、消息分类
RTMP 消息可以是任意类型的,包括音频消息,视频消息,复合消息,命令消息,共享对象消息,数据消息、用户控制消息和协议控制消息。
用户控制消息:RTMP 使用类型 ID 为 4 的消息做为用户控制消息,用户控制消息应该(SHOULD)消息流 ID 0(称为控制流),并且通过 RTMP 块流发送,使用块流 ID 为 2。
协议控制消息:RTMP 块流使用类型为 1、2、3、5 和 6 的消息用于协议控制消息。这些消息包含 RTMP块流协议需要的信息。这个协议控制消息必须(MUST)使用 ID 为 0 消息流(称为控制流)并且用 ID 为 2 块流发送。协议控制消息在接收到时尽快处理。
命令消息:在客户端与服务器之间传递 AMF 编码的命令。消息类型 ID 为 20 用于表示AMF0 编码,消息类型 ID 为 17 用于 AMF3 编码。
音视频消息:客户端或服务器发送这个消息来向对象发送音频数据,类型为 8 的消息保留给音频消息,类型为 9 的消息保留给视频消息。
复合消息:复合消息是包含多个子消息的一个单独的消息,类型为 22 的消息用作复合消息。
元数据消息:客户端用这个消息向对端发送 Metadata 或者任意的用户数据。Metadata 包函了数据(音频、视频)的详细信息,像创建时间,时长,主题等等。这些消息使用消息类型 18 表示 AMF0,用消息类型 15 来表示 AMF3。
共享对象:共享对象是一个 Flash 对象(一个键值对的集合),用来同步多个客户端,应用实例等等。消息类型为 19 表示使用 AMF0,16 保留用作 AMF3 编码共享事件。
在以上类型中,协议控制消息被chunk流使用,其余类型消息都用来客户端和服务端通信。
关于各种类型的详细描述,请参考rmtp消息协议.pdf
RTMP消息详细介绍的更多相关文章
- RabbitMQ消息队列(一): Detailed Introduction 详细介绍
http://blog.csdn.net/anzhsoft/article/details/19563091 RabbitMQ消息队列(一): Detailed Introduction 详细介绍 ...
- 柯南君:看大数据时代下的IT架构(2)消息队列之RabbitMQ-基础概念详细介绍
一.基础概念详细介绍 1.引言 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用.通讯的问题而苦恼.挣扎?如果是,那么恭喜你,消息服务让你可以很轻松 ...
- EQueue - 一个纯C#写的分布式消息队列介绍2
一年前,当我第一次开发完EQueue后,写过一篇文章介绍了其整体架构,做这个框架的背景,以及架构中的所有基本概念.通过那篇文章,大家可以对EQueue有一个基本的了解.经过了1年多的完善,EQueue ...
- Android manifest之manifest标签详细介绍
AndroidManifest详细介绍 本文主要对AndroidManifest.xml文件中各个标签进行说明.索引如下: 概要PART--01 manifest标签PART--02 安全机制和per ...
- Ubuntu根目录下各文件夹的功能详细介绍
Ubuntu的根目录下存在着很多的文件夹,但你知道他们都存放着哪些文件呢?这些是深入了解Ubuntu系统必不缺少的知识,本文就关于此做一下介绍吧. /bin/ 用以存储二进制可执行命令文件. / ...
- httpclient详细介绍
1.HttpClient简介 HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 ...
- iOS开发——实用OC篇&多种定时器详细介绍
多种定时器详细介绍 在软件开发过程中,我们常常需要在某个时间后执行某个方法,或者是按照某个周期一直执行某个方法.在这个时候,我们就需要用到定时器. 然而,在iOS中有很多方法完成以上的任务,到底有 ...
- Strom-7 Storm Trident 详细介绍
一.概要 1.1 Storm(简介) Storm是一个实时的可靠地分布式流计算框架. 具体就不多说了,举个例子,它的一个典型的大数据实时计算应用场景:从Kafka消息队列读取消息( ...
- [转] 引用 Java自带的线程池ThreadPoolExecutor详细介绍说明和实例应用
PS: Spring ThreadPoolTaskExecutor vs Java Executorservice cachedthreadpool 引用 [轰隆隆] 的 Java自带的线程池Thre ...
随机推荐
- org.hibernate.MappingException:Unknown entity:java.util.ArrayList
1.错误描述 [CQ] ERROR [http-apr-8888-exec-3] com.opensymphony.xwork2.util.logging.commons.CommonsLogger. ...
- 第一篇:操纵MySQL数据库(1) - 基于MySQLdb库
前言 本文讲解在Python语言中使用MySQLdb库操纵MySQL数据库的方法. 准备工作 1. 安装Python和MySQL2. 安装MySQLdb (exe下载地址:http://sourcef ...
- 描述一下Spring框架的作用和优点?
Spring框架的作用和优点如下: 1.Spring是一个开源的轻量级的应用开发框架,其目的是用于简化企业级应用程序开发,减少侵入: 2.Spring提供的IOC和AOP应用,可以将组建的耦合度降低至 ...
- 【CJOJ1167】【洛谷1894】[USACO4.2]完美的牛栏
题面 Description 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来 ...
- docker 一键安装zabbix server、zabbix agent
基本原理.须知:1.zabbix 分为zabbix server和zabbix agent,其中zabbix server需要web环境,并且其数据存储在独立的数据库中:2.docker是一种容器服务 ...
- ngrx/store effects 使用总结1:计数器
本教程案例github:https://github.com/axel10/ngrx_demo-counter-and-list angular2+ 的学习成本应该是三大框架中最高的一个,教程及案例稀 ...
- codeforces 286E Ladies' Shop
题目大意:n个小于等于m的数,现在你需要在[1,m]中选择若干个数,使得选出的数能组成的所有数正好与n个数相同,给出最少要选多少个数. 题目分析: 结论一:选择的若干个数一定在n个数中. 证明:否则的 ...
- 设计模式——组合模式(C++实现)
组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构. 组合模式使得用户对单个对象和组合对象的使用具有一致性. 是一种结构型模式 使用场景: 1.用于对象的部分-整体层次结构,如树 ...
- linux kexec内核引导
linux kexec 介绍 kexec的功能是用一个运行的内核去运行一个新内核,就像运行一个应用程序一样.这种机制因为跳过了bootloader,可以实现系统的快速重启.另外kdump也是基于kex ...
- java中一个引人深思的匿名内部类
前两天去面试javaweb问到一个问题,在你的项目中有没有用到线程,我特么的一想,这东西不是在c层面的吗,所以说我不了解线程..... 后来回去想啊想啊,我操这特么的不是再问我事物的控制,消息队列的回 ...