流媒体协议RTMP解析

阅读: 评论:0

流媒体协议RTMP解析
RTMP协议
  RTMP是Real Time Messaging Protocol(实时消息传输协议)的⾸字母缩写。该协议基于TCP,是⼀个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是⼀种设计⽤来进⾏实时数据通信的⽹络协议,主要⽤来在Flash/AIR平台和⽀持RTMP协议的流媒体/交互服务器之间进⾏⾳视频和数据通信。
  RTMP协议是⼀个互联⽹五层体系结构中应⽤层的协议。RTMP协议中基本的数据单元称为消息(Message)。当RTMP协议在互联⽹中传输数据的时候,消息会被拆分成更⼩的单元,称为块(Chunk)。
⼀、定义
Payload(载荷):包含于⼀个数据包中的数据,例如⾳频采样或者视频压缩数据。
Packet(数据包):⼀个数据包由固定头和载荷数据构成。⼀些底层协议可能会要求对数据包进⾏封装。
Port(端⼝):TCP/IP使⽤⼩的正整数对端⼝进⾏标识。OSI传输层使⽤的运输选择器 (TSEL) 相当于端⼝。
Transport address(传输地址):⽤以识别传输层端点的⽹络地址和端⼝的组合,例如⼀个IP地址和⼀个TCP端⼝。
Message stream(消息流):通信中消息流通的⼀个逻辑通道。
Message stream ID(消息流ID):每个消息有⼀个关联的ID,使⽤ID可以识别出该消息属于哪个消息流。
Chunk(块):消息的⼀段。消息在⽹络发送之前被拆分成很多⼩的部分。块按照时间戳的顺序进⾏端到端的传输。
Chunk stream(块流):通信中允许块流向⼀个特定⽅向的逻辑通道。块流可以从客户端流向服务器,也可以从服务器流向客户端。
Chunk stream ID(块流 ID):每个块有⼀个关联的ID,使⽤ID可以识别出该块属于哪个块流。
Multiplexing(合成):将独⽴的⾳频/视频数据合成为⼀个连续的⾳频/视频流,这样就可以同时发送视频和⾳频了。
DeMultiplexing(分解):Multiplexing 的逆向处理,将交叉的⾳频和视频数据还原成原始⾳频和视频数据的格式。
Remote Procedure Call(RPC 远程⽅法调⽤):允许客户端或服务器调⽤对端的⼀个⼦程序或者程序的请求。
Metadata(元数据):关于数据的描述。⽐如电影的 metadata 包括电影标题、持续时间、创建时间等等。
Application Instance (应⽤实例):应⽤实例运⾏于服务器上,客户端可连接这个实例并发送连接请求,连接服务器。
Action Message Format (AMF,操作消息格式):AMF是Adobe独家开发出来的通信协议,它采⽤⼆进制压缩,序列化、反序列化、传输数据,从⽽为Flash 播放器与Flash Remoting⽹关通信提供了⼀种轻量级的、⾼效能的通信⽅式。如下图所⽰。
  AMF的初衷只是为了⽀持Flash ActionScript的数据类型,⽬前有两个版本:AMF0和AMF3。AMF从Flash MX时代的AMF0发展到现在的AMF3。AMF3⽤作Flash Playe 9的ActionScript 3.0的默认序列化格式,⽽AMF0则⽤作旧版的ActionScript 1.0和
2.0的序列化格式。在⽹络传输数据⽅⾯,AMF3⽐AMF0更有效率。AMF3能将int和uint对象作为整数(integer)传输,并且能序列
化 ActionScript 3.0才⽀持的数据类型, ⽐如ByteArray,XML和Iexternalizable。
⼆、RTMP规范简单分析
  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。消息的报⽂结构如图3所⽰。
                             消息
  2.消息块
  在⽹络上传输数据时,消息需要被拆分成较⼩的数据块,才适合在相应的⽹络环境上传输。RTMP协议中规定,消息在⽹络上传输时被拆分成消息块(Chunk)。消息块⾸部(Chunk Header)有三部分组成:⽤于标识本块的Chunk Basic Header,⽤于标识本块负载所属消息的Chunk Message Header,以及当时间戳溢出时才出现的Extended Timestamp。消息块的报⽂结构如图4所⽰。
                            消息块
  3.消息分块
  在消息被分割成⼏个消息块的过程中,消息负载部分(Message Body)被分割成⼤⼩固定的数据块(默认是128字节,最后⼀个数据块可以⼩于该固定长度),并在其⾸部加上消息块⾸部(Chunk Header),就组成了相应的消息块。消息分块过程如图5所⽰,⼀个⼤⼩为307字节的消息被分割成128字节的消息块(除了最后⼀个)。
                           RTMP分块
  RTMP传输媒体数据的过程中,发送端⾸先把媒体数据封装成消息,然后把消息分割成消息块,最后将分割后的消息块通过TCP协议发送出去。接收端在通过TCP协议收到数据后,⾸先把消息块重新组
合成消息,然后通过对消息进⾏解封装处理就可以恢复出媒体数据。
三、RTMP流媒体播放过程
  本⽂描述了从打开⼀个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.服务器发送设置带宽(Set Peer Bandwidth)协议消息到客户端。
  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 & set,告知客户端“播
放”命令执⾏成功。
  e.在此之后服务器发送客户端要播放的⾳频和视频数据。
             播放流

本文发布于:2023-05-12 05:12:54,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/2/95999.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:消息   协议   数据   客户端
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图