IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> RTMP协议 -> 正文阅读

[系统运维]RTMP协议


一、RTMP是什么?

RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。RTMP与HTTP一样,都属于TCP/IP四层模型的应用层。

二、RTMP与HLS比较

HLS
HLS 的基本原理就是当采集推流端将视频流推送到流媒体服务器时,服务器将收到的流信息每缓存一段时间就封包成一个新的 ts 文件,同时服务器会建立一个 m3u8 的索引文件来维护最新几个 ts 片段的索引。当播放端获取直播时,它是从 m3u8 索引文件获取最新的 ts 视频文件片段来播放,从而保证用户在任何时候连接进来时都会看到较新的内容,实现近似直播的体验。相对于常见的流媒体直播协议,例如 RTMP 协议、RTSP 协议等,HLS 最大的不同在于直播客户端获取到的并不是一个完整的数据流,而是连续的、短时长的媒体文件,客户端不断的下载并播放这些小文件。这种方式的理论最小延时为一个 ts 文件的时长,一般情况为 2-3 个 ts 文件的时长。HLS 的分段策略,基本上推荐是 10 秒一个分片,这就看出了 HLS 的缺点:
1.通常 HLS 直播延时会达到 20-30s,而高延时对于需要实时互动体验的直播来说是不可接受的。
2.HLS 基于短连接 HTTP,HTTP 是基于 TCP 的,这就意味着 HLS 需要不断地与服务器建立连接,TCP 每次建立连接时的三次握手、慢启动过程、断开连接时的四次挥手都会产生消耗。
不过 HLS 也有它的优点:
1.数据通过 HTTP 协议传输,所以采用 HLS 时不用考虑防火墙或者代理的问题。
2.使用短时长的分片文件来播放,客户端可以平滑的切换码率,以适应不同带宽条件下的播放。
3.HLS 是苹果推出的流媒体协议,在 iOS 平台上可以获得天然的支持,采用系统提供的 AVPlayer 就能直接播放,不用自己开发播放器。

RTMP
相对于 HLS 来说,采用 RTMP 协议时,从采集推流端到流媒体服务器再到播放端是一条数据流,因此在服务器不会有落地文件。这样 RTMP 相对来说就有这些优点:
1.延时较小,通常为 1-3s,参考播放器 如ijkplayer、毫秒级的播放器,可以参考大牛直播SDK的RTMP播放器。
2.基于 TCP 长连接,不需要多次建连。
因此业界大部分直播业务都会选择用 RTMP 作为流媒体协议。通常会将数据流封装成 FLV 通过 HTTP 提供出去。但是这样也有一些问题需要解决:
1.iOS 平台没有提供原生支持 RTMP 或 HTTP-FLV 的播放器,这就需要开发支持相关协议的播放器。

三、RTMP创建流的基本流程

基本流程:
1.socket建立连接
2.RTMP握手
3.建立RTMP连接
4.创建RTMP流

1. RTMP握手

RFC文档握手流程:
在这里插入图片描述
实际握手流程
在这里插入图片描述

2. 建立RTMP连接

交互滑动窗口大小;设置带宽
RFC文档连接流程:
在这里插入图片描述
实际连接流程
在这里插入图片描述

3. 创建RTMP流

在这里插入图片描述
如果有流要先释放掉
无实际作用flash communication
创建流
返回状态
在这里插入图片描述
推流过程
metadata中包含音视频的基本信息,如分辨率,采样大小等
在这里插入图片描述
拉流过程
在这里插入图片描述
RTMP处理流程:

  1. 首先,我们在RTMP连接之前,要创建 socket,通过socket建立tcp连接
  2. 在 tcp 上,创建 rtmp connection
  3. 然后rtmp 握手协议
  4. 握手结束,创建连接
  5. 创建结束,创建流
  6. 创建流结束,主播端,推送流,公众端,接受流 /拉流

四、RTMP消息结构

basic header(2bit fmt + 6bit data(2~63))必填,message header与extended timestamp可选
data = 0时 basic header为2字节,CSID范围为64到64+2的8次方;data = 1时,basic header为4字节,CSID范围为64+2的8次方到64+2的8次方+2的24次方;data为2~63时,basic header为1字节,data此时为chunk stream ID即CSID
Message header
当数据量大,需要拆分多个块传输时,第一个块的message header四个部分都是存在的,后面的块如果与前面块的streamID,TypeID等相同,则可以省略
Extended timestamp
三字节时间辍无法表示时,置为FFFFFF,则扩展时间辍存在
在这里插入图片描述
在这里插入图片描述
2:结束当前流,3:设置ack,从哪个ack开始确认,4:设置滑动窗口大小,5:设置传输带宽
15,18:AMF为flash的编码格式,data message一般为meta数据
17,20:创建流,推流,拉流都属于命令消息

RTMP的握手没有header和body

RTMP消息详解:https://www.jianshu.com/p/df987acf1246

五、RTMP与FLV协议关系

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 14:11:49  更:2021-10-07 14:14:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:41:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码