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之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ...
随机推荐
- Oracledb_exporter 获取表大小信息的简单方法
Oracledb_exporter 获取表大小信息的简单方法 背景 用我儿子的现状作为背景: 我爱学习, 学习让我妈快乐. 下载exporter exporter 可以在github上面下载最新版本是 ...
- [转帖]PostgreSQL 10.0 preview 功能增强 - 国际化功能增强,支持ICU(International Components for Unicode)
https://developer.aliyun.com/article/72935 标签 PostgreSQL , 10.0 , International Components for Unico ...
- [转帖]怎么查看Linux服务器硬件信息,这些命令告诉你
https://zhuanlan.zhihu.com/p/144368206 Linux服务器配置文档找不到,你还在为查询Linux服务器硬件信息发愁吗?学会这些命令,让你轻松查看Linux服务器的C ...
- [转帖]《Linux性能优化实战》笔记(一)—— 平均负载
最近在看极客时间的<Linux性能优化实战>课程,记录下学习内容. 一. 平均负载(Load Average) 1. 概念 我们都知道uptime命令的最后三列分别是过去 1 分钟.5 分 ...
- Redis Cluster in K3S
Redis Cluster in K3S 学习资料 https://www.cnblogs.com/cheyunhua/p/15619317.html https://blog.csdn.net/cq ...
- 查看dmesg 里面部分内容的精确时间
for i in `dmesg |grep "stuck for" |awk '{print $1}' |awk -F "." '{print $1}' |aw ...
- 不想做架构师的Gopher不是好程序员
最近我们在组队学习<手把手带你写一个web框架>,强制PUSH,坚持每天学习打卡,不完成惩罚发红包的那种. 你别说,效果还真挺好. 昨天学到了架构部分,很受启发,光学不写假把式.(还是得坚 ...
- 【JS 逆向百例】37网游登录接口参数逆向
声明 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 逆向目标 目标:37网游登录 主页:https://www.37.co ...
- #region在多种编程语言及IDE中进行代码折叠,包括python msvc++ c#等
vs/rider中折叠C#代码 在写C#的时候,在visual studio中可以使用#region和#endregion来进行代码折叠,那么在pycharm中是否可以呢? //这里有很多的代码... ...
- C++ 实现的Ping类的封装
Ping 使用 Internet 控制消息协议(ICMP)来测试主机之间的连接.当用户发送一个 ping 请求时,则对应的发送一个 ICMP Echo 请求消息到目标主机,并等待目标主机回复一个 IC ...