关闭

RTMP 协议

193人阅读 评论(0) 收藏 举报
分类:
RTMP协议是一个互联网TCP/IP五层体系结构中应用层的协议。RTMP协议中基本的数据单元称为消息(Message)。当RTMP协议在互联网中传输数据的时候,消息会被拆分成更小的单元,称为消息块(Chunk)。

1 消息

消息是RTMP协议中基本的数据单元。不同种类的消息包含不同的Message Type ID,代表不同的功能。RTMP协议中一共规定了十多种消息类型,分别发挥着不同的作用。例如,Message Type ID在1-7的消息用于协议控制,这些消息一般是RTMP协议自身管理要使用的消息,用户一般情况下无需操作其中的数据。Message Type ID为8,9的消息分别用于传输音频和视频数据。Message Type ID为15-20的消息用于发送AMF编码的命令,负责用户与服务器之间的交互,比如播放,暂停等等。消息首部(Message Header)有四部分组成:标志消息类型的Message Type ID,标志消息长度的Payload Length,标识时间戳的Timestamp,标识消息所属媒体流的Stream ID。消息的报文结构如下图所示。


2 消息块
在网络上传输数据时,消息需要被拆分成较小的数据块,才适合在相应的网络环境上传输。RTMP协议中规定,消息在网络上传输时被拆分成消息块(Chunk)。消息块首部(Chunk Header)有三部分组成:用于标识本块的Chunk Basic Header,用于标识本块负载所属消息的Chunk Message Header,以及当时间戳溢出时才出现的Extended Timestamp。消息块的报文结构如下图所示。


3 消息分块

在消息被分割成几个消息块的过程中,消息负载部分(Message Body)被分割成大小固定的数据块(默认是128字节,最后一个数据块可以小于该固定长度),并在其首部加上消息块首部(Chunk Header),就组成了相应的消息块。消息分块过程如下图所示,一个大小为307字节的消息被分割成128字节的消息块(除了最后一个)。


RTMP传输媒体数据的过程中,发送端首先把媒体数据封装成消息,然后把消息分割成消息块,最后将分割后的消息块通过TCP协议发送出去。接收端在通过TCP协议收到数据后,首先把消息块重新组合成消息,然后通过对消息进行解封装处理就可以恢复出媒体数据。

2.1 Chunk Basic Header [1-3字节]
HeaderType+ChannelID组成,其中ChannelID的大小决定了整个Chunk Basic Header的大小
2.1.1  

这个字段编码了消息块流的

ID

和消息块的类型,消息块类型决定了消息包头的编码格式,长度完全

取决于可变长的消息块流

HeaderType(fmt):决定了Chunk Message Header的编码方式和大小,在第一个字节的高两位
Bits Chunk Message Header Length
00   12 bytes
01   8 bytes
10   4 bytes
11   1 byte
2.1.2 ChannelID:
ChannelID 用途
02              Ping 和ByteRead通道
03              Invoke通道 我们的connect() publish()和自字写的NetConnection.Call() 数据都是在这个通道的
04              Audio和Vidio通道
05 06 07     服务器保留,经观察FMS2用这些Channel也用来发送音频或视频数据
2.2 Chunk Message Header
以最大fmt =00 length(Chunk Message Header) == 12 为例
Chunk Message Header的结构是:timestamp,message_length,message_type,msg_stream_id
其中message_type是一个枚举变量:
type为1,2,3,5,6的时候是协议控制消息
type为4的时候表示 User Control Messages [Event_type + Event_Data] Event_type有Stream BeginStream End...
type为8,音频数据
type为9,视频数据
type为18 元数据消息[AMF0]
type为20 命令消息 Command Message(RPC Message)
These messages are sent to perform some operations like connect, createStream, publish, play, pause on the peer.
命令消息主要分成两种NetConnection和NetStream。
connect,call,close,createStream命令可以在NetConnection中发送。
coonect(name,TranscationID,Command Object pair)
play,publish,seek,pause等命令可以在NetStream中发送。
2.3 Ext Time Stamp
2.4数据
RTMP流媒体播放过程
RTMP协议规定,播放一个流媒体有两个前提步骤:第一步,建立一个网络连接(NetConnection);第二步,建立一个网络流(NetStream)。其中,网络连接代表服务器端应用程序和客户端之间基础的连通关系。网络流代表了发送多媒体数据的通道。服务器和客户端之间只能建立一个网络连接,但是基于该连接可以创建很多网络流。

播放一个RTMP协议的流媒体需要经过以下几个步骤:握手,建立连接,建立流,播放。RTMP连接都是以握手作为开始的。建立连接阶段用于建立客户端与服务器之间的“网络连接”;建立流阶段用于建立客户端与服务器之间的“网络流”;播放阶段用于传输视音频数据。
参考:http://blog.csdn.net/leixiaohua1020/article/category/1362941
RTMP协议中文版
http://wenku.baidu.com/link?url=Lc4gR-FLeCkHCMM1NL-FcAUtKFTRaFn0tcdoqcid6Dtvu_Q2wlSQ-GMY711Ptc_TdeG2KU0E9e-aHddFVZJSMwt2CujY2p7AdHg8Vr15HuG
RTMP协议英文版
http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/rtmp/pdf/rtmp_specification_1.0.pdf
开源项目 RTMP Dump
http://rtmpdump.mplayerhq.hu/


0
0
查看评论

RTMP协议中文翻译(首发)

翻译:阿宝  更新:2016-09-11  来源:彩色世界(https://blog.hz601.org/2016/07/03/real-time-messaging-protocol/index.html)            Adobe公司的实时消息传输协议摘要  此备忘录描述了 Adob...
  • shishuo365
  • shishuo365
  • 2016-09-11 20:29
  • 2590

rtmp协议规范

译序:         本文是为截至发稿时止最新 Adobe 官方公布的 RTMP 规范。本文包含 RTMP 规范的全部内容。是第一个比较全面的 RTMP 规范的中译本。由于成文时间仓促,加上作者知识面所限,翻译错误之处在所...
  • ly402609921
  • ly402609921
  • 2016-10-09 17:50
  • 1995

RTMP协议规范1.0中文版

RTMP协议规范1.0 译注 本文档主要翻译于http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/rtmp/pdf/rtmp_specification_1.0.pdf。 绝大部分使用直译,小部分使用意译。专有名词基本不翻译,既保留规范...
  • noahsun1024
  • noahsun1024
  • 2016-08-10 22:47
  • 1590

rtmp官方协议详解

标准规范学习:rtmp消息结构,包括几个部分:时戳:4  byte,单位毫秒。超过最大值后会翻转。长度:消息负载的长度。类型ID:Type Id 一部分ID范围用于rtmp的控制信令。还有一部分可以供上层使用,rtmp只是透传。这样可以方便的在rtmp上进行扩展。消息流ID:Message...
  • chgaowei
  • chgaowei
  • 2016-04-26 10:00
  • 15537

rtmp协议官方规范

1. 简介         Adobe 公司的实时消息传输协议 (RTMP) 通过一个可靠地流传输提供了一个双向多通道消息服务,比如 TCP [RFC0793],意图在通信端之间传递带有时间信息的视频、音频和数据消息流。实现通常对不同类型的消息分配不同的优先...
  • wtf347066703
  • wtf347066703
  • 2016-10-11 16:36
  • 990

RTMP协议从入门到放弃

RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing)的问题。随着VR技术的发展,视频直播等领域逐渐活跃起来,RTMP作为...
  • lipengshiwo
  • lipengshiwo
  • 2016-11-21 22:55
  • 20003

Rtmp协议简单分析(一)——协议数据

首先说下rtmp协议包的格式。握手之后,rtmp传输一个数据默认的长度是128bytes,这128bytes不包括包头的长度,只是数据的长度,文档上面没有说明,很憋了我一段时间,数据超过这个长度之后就要分块,超过128bytes的数据放到下一个块中,以此类推。块大小是可配置的,最大块是65535字节...
  • leiych
  • leiych
  • 2014-01-14 18:05
  • 1095

流媒体-RTMP交互过程及协议解析

一、RTMP交互过程 1 简要介绍 播放一个RTMP协议的流媒体需要经过以下几个步骤:握手,建立网络连接,建立网络流,播放。RTMP连接都是以握手作为开始的。建立连接阶段用于建立客户端与服务器之间的“网络连接”;建立流阶段用于建立客户端与服务器之间的“网络流”;播放阶段用于传输视音频数据。其中,...
  • mm792261167
  • mm792261167
  • 2017-04-07 09:45
  • 733

基于Rtmp协议的流媒体直播实现

最近需要实现一个类似于视频直播这样的功能,很幸运的是,在网上找到了两篇博文,写的不错,省了很多时间精力,在此感谢博主的分享。 由于博主的文章较长且散,我在此对代码进行了整理和打包,有需要的朋友可以直接点击链接进行下载。 一、介绍一下包中的内容: RtmpPush:是Android推流端,主要...
  • u012604745
  • u012604745
  • 2017-06-19 13:36
  • 727

RTMP协议分析及H.264打包原理

RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议...
  • caoshangpa
  • caoshangpa
  • 2016-10-20 14:20
  • 6367
    个人资料
    • 访问:2110次
    • 积分:65
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:4篇
    • 译文:0篇
    • 评论:0条
    文章存档