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之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ...
 
随机推荐
- [转帖]DevOps & CI/CD 常见面试题汇总
			
https://www.cnblogs.com/Dev0ps/p/15123168.html 什么是 DevOps答:用最简单的术语来说,DevOps 是产品开发过程中开发(Dev)和运营(Ops) ...
 - [转帖]TiKV Config Learn the TiKV configuration file
			
The TiKV configuration file supports more options than command-line parameters. You can find the def ...
 - [转帖]如何在KingbaseES数据库查看数据库和表的大小
			
关键字 kingbaseES,数据库大小,表大小 1.查看单个数据库的大小 使用ksql连接到数据库,使用sys_database_size函数 kapp=# select sys_database_ ...
 - [转帖]ORACLE USERENV函数
			
https://www.cnblogs.com/youngerger/p/8862210.html ORACLE USERENV函数 USERENV返回关于当前会话的信息.此信息可以用于编写一个应用程 ...
 - CentOS7 安装Oracle11g的过程.
			
1. 安装preinstall https://www.cnblogs.com/mjiu/ 里面有一个简单方法: cd /etc/yum.repos.d wget http://yum.oracle. ...
 - sed 删除部分行以及删除包含某些行的命令
			
sed的简单学习 前言: 最近进行mysql数据库的备份恢复操作,发现source 命令执行时数据库表的速度非常缓慢, 本来想通过这种方式处理一下,能够减少数据备份的处理. 删除包含内容的信息 sed ...
 - 数据结构与算法 第二章线性表(48课时课程笔记)Data Structure and Algorithms
			
2.1 线性表的类型定义 一个线性表是n个数据元素的有限序列. (1)结构初始化 InitList(&L) 构造一个空的线性表L. (2)销毁结构 DestroyList(&L) (3 ...
 - Linux策略路由详解
			
概述 在Linux中,我们通常使用route命令来做路由信息的管理.但是该命令仅仅只能用于基本路由信息的管理,面对功能更加强大的基于策略的路由机制,route命令就显得捉襟见肘.在传统路由算法中,只能 ...
 - 正则表达式match方法和search方法
			
正则表达式, //match() 方法可在字符串内检索指定的值 找到返回相关数据,找不到返回null var part = /Box/ig; var str = "this is box,i ...
 - [西湖论剑 2022]web部分题解(更新中ing
			
[西湖论剑 2022]Node Magical Login 环境!启动!(ノへ ̄.) 这么一看好像弱口令啊,(不过西湖论剑题目怎么会这么简单,当时真的傻),那就bp抓包试一下(这里就不展示了,因为是展 ...