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协议规范(中文翻译):http://download.csdn.net/detail/leixiaohua1020/6563059

RTMP规范简单分析相关推荐

  1. FFmpeg源代码简单分析:configure

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

  2. Adobe 官方公布的 RTMP 规范+未公布的部分

    RTMP 规范中文版 PDF 下载地址 译序: 本文是为截至发稿时止最新 Adobe 官方公布的 RTMP 规范.本文包含 RTMP 规范的全部内容.是第一个比较全面的 RTMP 规范的中译本.由于成 ...

  3. Adobe 官方公布的 RTMP 规范

    转自: http://blog.csdn.net/simongyley/article/details/24977705 译序: 本文是为截至发稿时止最新 Adobe 官方公布的 RTMP 规范.本文 ...

  4. FFmpeg源代码简单分析 configure

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! ==== ...

  5. Android 系统(261)---SIM卡不识或者掉卡简单分析

    SIM卡不识或者掉卡简单分析 1. 识卡大体过程 2.不识卡问题 不识卡的主要原因:  ①Modem发生错误,异常或者重启.  ②没有收到卡回的ATR  ③有收到卡回的ATR,但是后面跟卡通信出现异常 ...

  6. FFmpeg源代码简单分析:makefile

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

  7. FFmpeg源代码简单分析:结构体成员管理系统-AVClass

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

  8. FFmpeg源代码简单分析:avio_open2()

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

  9. FFmpeg源代码简单分析:常见结构体的初始化和销毁(AVFormatContext,AVFrame等)

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

最新文章

  1. Keil5.15使用GCC编译器链接.a库文件
  2. 关于多人操作数据的处理策略
  3. UA MATH564 概率论 QE练习题1
  4. 高等数理统计(part3)--常见的连续型分布
  5. Java基础-String、StringBuffer、StringBuilder的区别
  6. php请求要通过什么协议,php – 发送多个应用程序协议请求(类似于mailto:)
  7. 二下语文书电子课本_沪教版牛津英语小学五年级上册高清电子课本教材书(三年级起点)...
  8. 时间序列深度学习:状态 LSTM 模型预测太阳黑子(下)
  9. Thymeleaf模板引擎详细介绍
  10. java中基本类型占了几个字节(byte、char等)
  11. 锐取电视墙服务器型号,锐取录播系统 CL4000系列多媒体录播一体机--投影时代产品专区...
  12. 域名显示服务器错误,域名解析出现错误是怎么回事?
  13. 知识图谱 01:知识图谱概述
  14. 字节跳动,正在动摇腾讯的根基
  15. MapGuide API
  16. 修改安卓系统应用,将自己的app变成系统应用(需要root)
  17. office2016增强版注册
  18. GIF动态图怎么制作?试试这些简单方便的制作方法
  19. javaScript-工具库
  20. 调制解调器拨号失败服务器无响应,解决调制解调器的一般问题

热门文章

  1. Java 蓝桥杯 判断闰年
  2. php防止远程提交,php防止远程提交表单的有关问题
  3. php如何跟踪调试,PHP使用debug_backtrace方法跟踪调试代码调用详解
  4. java 虚拟机类型的卸载_《深入理解Java虚拟机》:类加载和初始化(二)
  5. java override 用法_Java中@Override的作用
  6. 2019/7/19 Bootstap练习
  7. MySql 应用语句
  8. mybatis sql xml 字符逃脱
  9. [转]OC与JS的交互详解
  10. NOI2011 阿狸的打字机题解