| |
|
开发:
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协议解析 |
背景 当前用到的直播场景有很多, 比如视频通话, 个人直播, 赛事直播;直播的协议也有很多; 比如HTTP+FLV:流式tag+渐进式下载(理论延迟1-3s) HLS: ts分片+索引管理(理论延时10s+,跟切片时间大小有关) RTMP: tcp流+chunk块传输(理论延迟1-3s) 下面详细描述一下RTMP RTMP(Real Time Messaging Protocol) 使用Flash Player作为播放器客户端; 协议有很多变种: 1.RTMP本身, 基于TCP.默认使用1935端口的明文协议; 2.RTMPS,通过TLS/SSL链接传输的RTMP 3.RTMPE,使用Adobe自有安全机制加密的RTMP 4.RTMPT,将RTMP封装在HTTP中,用于穿透防火墙,通常使用TCP的80和443端口; 5.RTMFP,基于UDP的RTMP 包格式 RTMP的逻辑处理基本单元是Message. 传输的基本单元是Chunk即消息块,多个消息块(也可能一个)拼接成一个Message; 如果一个有效的消息, 数据量超出当前ChunkSize的话, 会被拆分成多个分块来分批传输.而接收端会根据Chunk中包含的data长度, message id和message长度把chunk还原成完整的Message; 具体协议的字段就不详细描述了 步骤
Client->Server, 内容是C0+C1 Server->Client,内容是S0+S1+S2 Client->Server,内容是C2 C0和S0表示的是RTMP版本号 Client->Server, 内容是C0+C1 Server->Client,内容是S0+S1+S2 Client->Server,内容是C2 C0和S0表示的是RTMP版本号 RTMP包头里面的StreamID,是每个消息的唯一标识, 就是我们上面讲到的message和chunk; 同一个chunk streamid是属于同一个message的;
getStreamLength: 获取’‘3402000000131000001’'流的长度. 一个完整的推流地址, 到这里也就可以推出来了. connect+getStreamLength Play: 播放指定流,等待服务端传输音视频数据; publish: 开始上传音视频数据 onStatus: NetStream.Play.Reset消息只有在客户端发送play消息设置了reset标志才会发, 如果客户的请求的播放流不存在, 服务端应返回NetStream.Play.StreamNotFound. 当然这个一般业务层都会拦截; 到这里, 整个RTMP的主体流程就结束了; 参考文档 https://www.adobe.com/content/dam/acom/en/devnet/rtmp/pdf/rtmp_specification_1.0.pdf |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/16 6:48:11- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |