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协议规范(中文翻译):http://download.csdn.net/detail/leixiaohua1020/6563059
RTMP规范简单分析相关推荐
- FFmpeg源代码简单分析:configure
===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...
- Adobe 官方公布的 RTMP 规范+未公布的部分
RTMP 规范中文版 PDF 下载地址 译序: 本文是为截至发稿时止最新 Adobe 官方公布的 RTMP 规范.本文包含 RTMP 规范的全部内容.是第一个比较全面的 RTMP 规范的中译本.由于成 ...
- Adobe 官方公布的 RTMP 规范
转自: http://blog.csdn.net/simongyley/article/details/24977705 译序: 本文是为截至发稿时止最新 Adobe 官方公布的 RTMP 规范.本文 ...
- FFmpeg源代码简单分析 configure
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! ==== ...
- Android 系统(261)---SIM卡不识或者掉卡简单分析
SIM卡不识或者掉卡简单分析 1. 识卡大体过程 2.不识卡问题 不识卡的主要原因: ①Modem发生错误,异常或者重启. ②没有收到卡回的ATR ③有收到卡回的ATR,但是后面跟卡通信出现异常 ...
- FFmpeg源代码简单分析:makefile
===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...
- FFmpeg源代码简单分析:结构体成员管理系统-AVClass
===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...
- FFmpeg源代码简单分析:avio_open2()
===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...
- FFmpeg源代码简单分析:常见结构体的初始化和销毁(AVFormatContext,AVFrame等)
===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...
最新文章
- Keil5.15使用GCC编译器链接.a库文件
- 关于多人操作数据的处理策略
- UA MATH564 概率论 QE练习题1
- 高等数理统计(part3)--常见的连续型分布
- Java基础-String、StringBuffer、StringBuilder的区别
- php请求要通过什么协议,php – 发送多个应用程序协议请求(类似于mailto:)
- 二下语文书电子课本_沪教版牛津英语小学五年级上册高清电子课本教材书(三年级起点)...
- 时间序列深度学习:状态 LSTM 模型预测太阳黑子(下)
- Thymeleaf模板引擎详细介绍
- java中基本类型占了几个字节(byte、char等)
- 锐取电视墙服务器型号,锐取录播系统 CL4000系列多媒体录播一体机--投影时代产品专区...
- 域名显示服务器错误,域名解析出现错误是怎么回事?
- 知识图谱 01:知识图谱概述
- 字节跳动,正在动摇腾讯的根基
- MapGuide API
- 修改安卓系统应用,将自己的app变成系统应用(需要root)
- office2016增强版注册
- GIF动态图怎么制作?试试这些简单方便的制作方法
- javaScript-工具库
- 调制解调器拨号失败服务器无响应,解决调制解调器的一般问题
热门文章
- Java 蓝桥杯 判断闰年
- php防止远程提交,php防止远程提交表单的有关问题
- php如何跟踪调试,PHP使用debug_backtrace方法跟踪调试代码调用详解
- java 虚拟机类型的卸载_《深入理解Java虚拟机》:类加载和初始化(二)
- java override 用法_Java中@Override的作用
- 2019/7/19 Bootstap练习
- MySql 应用语句
- mybatis sql xml 字符逃脱
- [转]OC与JS的交互详解
- NOI2011 阿狸的打字机题解