Rtmp 开发学习
RTMP——Real Time Messaging Protocol(实时消息传输协议)
RTMP 是由 Adobe 公司提出的,在互联网 TCP/IP 五层体系结构中应用层,RTMP 协议是基于 TCP 协议的,也就是说 RTMP 实际上是使用 TCP 作为传输协议。TCP 协议在处在传输层,是面向连接的协议,能够为数据的传输提供可靠保障,因此数据在网络上传输不会出现丢包的情况。不过这种可靠的保障也会造成一些问题,也就是说前面的数据包没有交付到目的地,后面的数据也无法进行传输。幸运的是,目前的网络带宽基本上可以满足RTMP协议传输普通质量视频的要求。
RTMP 传输的数据的基本单元为 Message,但是实际上传输的最小单元是 Chunk(消息块),因为 RTMP 协议为了提升传输速度,在传输数据的时候,会把 Message 拆分开来,形成更小的块,这些块就是 Chunk。
消息(Message)的结构

Message结构分析
1.Message Type:它是一个消息类型的ID,通过该ID接收方可以判断接收到的数据的类型,从而做相应的处理。Message Type ID 在 1-7 的消息用于协议控制,这些消息一般是 RTMP 协议自身管理要使用的消息,用户一般情况下无需操作其中的数据。Message Type ID 为8,9的消息分别用于传输音频和视频数据。Message Type ID 为 15-20 的消息用于发送 AMF 编码的命令,负责用户与服务器之间的交互,比如播放,暂停等。
2.Playload Length: 消息负载的长度,即音视频相关信息的的数据长度,4 个字节
3.TimeStamp:时间戳,3 个字节。
4.Stream ID:消息的唯一标识。拆分消息成 Chunk 时添加该 ID,从而在还原时根据该 ID 识别 Chunk 属于哪个消息。
5.Message Body:消息体,承载了音视频等信息。
消息块(Chunk)

通过上图可以看出,消息块在结构上与与消息类似,有 Header 和 Body。
1.Basic Header:基本的头部信息,在头部信息里面包含了chunk stream ID(流通道 Id,用来标识指定的通道)和 chunk type(chunk的类型)。
2.Message Header:消息的头部信息,包含了要发送的实际信息(可能是完整的,也可能是一部分)的描述信息。Message Header 的格式和长度取决于 Basic Header 的 chunk type。
3.Extended TimeStamp:扩展时间戳。
4.Chunk Data:块数据。
RTMP 在传输数据的时候,发送端会把需要传输的媒体数据封装成消息,然后把消息拆分成消息块,再一个一个进行传输。接收端收到消息块后,根据 Message Stream ID 重新将消息块进行组装、组合成消息,再解除该消息的封装处理就可以还原出媒体数据。由此可以看出,RTMP 收发数据是以 Chunk 为单位,而不是以 Message 为单位。需要注意的是,RTMP 发送 Chunk 必须是一个一个发送,后面的 Chunk 必须等前面的 Chunk 发送完成。
拓展:
- HLS协议介绍 (阿B直播选用的直播协议)
- 直播协议的选择:RTMP vs. HLS
Rtmp 开发学习的更多相关文章
- Android开发学习之路-RecyclerView滑动删除和拖动排序
Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...
- web前端开发学习内容
应该 具备的 知识技能 :懂web标准,熟练手写 xhtml css3 并符合 符合w3c标准 代码能 兼容主流浏览器.ie6.7.8.9 ff 等. ...
- Android开发学习路线图
Android开发学习方法: Android是一个比较庞大的体系,从底层的Linux内核到上层的应用层,各部分的内容跨度也比较大.因此,一个好的学习方法对我们学习Android开发很重要. 在此建议, ...
- NET开发学习项目资源(2)
NET开发学习项目资源 击标题链接即可下载. 目录: 1.征婚交友网站 前台交友信息和后台会员管理两大部分组成. 前台功能模块 该模块主要包括查询交友信息.显示交友信息.会员登录.会员信息管理.修改会 ...
- Civil 3D API二次开发学习指南
Civil 3D构建于AutoCAD 和 Map 3D之上,在学习Civil 3D API二次开发之前,您至少需要了解AutoCAD API的二次开发,你可以参考AutoCAD .NET API二次开 ...
- 【前端】移动端Web开发学习笔记【2】 & flex布局
上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...
- 【前端】移动端Web开发学习笔记【1】
下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...
- .net 网站开发学习资源
慕课网 前端基础学习 http://www.imooc.com/course/list?c=fe 了解需求 例子之一 http://wenku.it168.com/d_000517899.shtml ...
- 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址
驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...
- android开发学习笔记000
使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ...
随机推荐
- Cloudquery的学习安装与使用
Cloudquery的学习安装与使用 下载 官方下载地址: https://www.cloudquery.club/download https://pan.baidu.com/s/1a7XOrnMU ...
- [转帖]Shell编程之正则表达式与文本处理器(grep、sort、uniq、tr、cut)
目录 正则表达式概念 正则表达式的作用 元字符 grep命令在文本中查找指定的字符串 sort命令排序 uniq命令快捷去重 tr命令替换.压缩和删除 cut命令快速裁剪命令 expr substr ...
- [转帖]SSL数字证书分类DV/OV/EV
SSL证书的分类主要是通过下面两个维度进行分类: 1.根据验证模式分类 根据CA机构对申请者的身份审核范围分为:DV证书.OV证书.EV证书. 1.1.DV证书(域名证书) DV(Domain Val ...
- [转帖]【JVM】GC算法与垃圾收集器
引入 java 语言中一个显著的特点就是引入了java回收机制,是c++程序员最头疼的内存管理的问题迎刃而解,它使得java程序员在编写程序的时候不在考虑内存管理.由于有个垃圾回收机制,可以有效的防止 ...
- Redislabs的简单使用与benchmark测试结果
Redislabs的简单使用与benchmark测试结果 自己的理解 仅是理解. 没有看过源码 哨兵可以实现高可用, 但是对高吞吐是没有太大帮助的. 虽然可以实现主写从读, 但是在高并发的场景下延迟肯 ...
- open,os模块的常用函数
一.open用于读写文件 1.open的基本语法 : open(file,mode,buffering,encoding,errors.........),open中有如下几个参数,一般情况 下我们只 ...
- 你对iframe知道多少
iframe 嵌套第三方页面出现的问题 我们需要通过一个接口获取被嵌套的地址. 然后将改地址赋值给iframe的src中,代码如下 <template> <div> <i ...
- TypeScript接口的讲解-强制约束-可选属性-任意多个属性-只读属性
接口 接口:可以描述类的一部分抽象行为, 也可以描述数据的结构形状 接口一般首字母大写, 接口中 可以定义为 强制约束 可选属性 只读属性 任意属性 # 强制约束 // 定义接口 interface ...
- flask session 伪造
flask session 伪造 一.session的作用 由于http协议是一个无状态的协议,也就是说同一个用户第一次请求和第二次请求是完全没有关系的,但是现在的网站基本上有登录使用的功能,这就要求 ...
- Windows10磁盘占用100%和内存占用高
前言 公司配备了两台电脑,两台电脑都是安装的win10系统,一台是磁盘占用高,另一台是内存可用低. 具体情况如下: 一台外网机 8g内存,安装win10 专业版,开机一天后经常出现内存不够用,但其实都 ...