流媒体协议--RTMP

文章目录

      • RTMP播放基本流程
        • TCP握手过程
        • RTMP握手过程
        • connect连接
        • createStream 创建流
        • play 播放命令
        • deleteStream删除流
        • RTMP数据组成

RTMP(Real Time Messaging Protocol)是一个应用层协议,主要用于在Flash player和服务器之间传输视频、音频、控制命令等内容。
该协议的突出优点是: 低延时。
RTMP基于TCP(tcp默认使用端口1935)

RTMP播放基本流程

  1. TCP三次握手
  2. RTMP握手
  3. connect连接
  4. createStream创建流
  5. play 播放流
  6. deleteStream删除流
TCP握手过程

流顺序: c–客户端 s–服务端
c – s
s–c
c–s
在这里插入图片描述

RTMP握手过程

c–s
s–c
c–s在这里插入图片描述在这里插入图片描述
一般的发送顺序如下:
1.客户端向服务端同时发送C0+C1
2. 服务端确认版本号后,向客户端同时发送S0+S1+S2
3. 客户端接收到S2后发送C2到服务端

C0: 客户端版本
C1: 服务器版本
当前版本为3

在这里插入图片描述
C1 和 S1数据包长度为1536字节,C2 和 S2 数据包长度都是 1536 字节,基本就是 S1 和 C1 的副本。

connect连接

c–s:
在这里插入图片描述

不同的 Application Instance可根据功能等进行区分,比如直播可以用live来表示,点播回放可以用vod来表示
如 rtmp://192.168.152.21/lrun/s1
run: 为Application Instance
s1: 为房间号

createStream 创建流

c–s
s–c
在这里插入图片描述
服务器返回的stream ID为1,为后续的视频或者音频ID
在这里插入图片描述
createStream命令用于创建逻辑通道,该通道用于传输视频、音频、metadata,在服务器的响应报文中会返回 ,用于唯一的标示该Stream

play 播放命令

客户端发送play命令来播放指定流。开始传输音视频数据。
如果发送play命令后想要立即播放,需要清空play队列中的其它流,并将reset置为true

deleteStream删除流

客户端发送删除流,指定Stream ID, 服务器不对次消息回应

RTMP数据组成

发送:
在这里插入图片描述
接收:
在这里插入图片描述
组成:

在这里插入图片描述

在这里插入图片描述
Messgae消息主要分为三类: 协议控制消息、数据消息、命令消息等
协议控制消息: Type ID = 1 2 3 5 6
数据消息: Message Type ID = 8 9 18
8: Audio 音频数据
9: Video 视频数据
18: Metadata 包括音视频编码、视频宽高等信息。
命令消息:Message Type ID =17,20

Message StreamID是音视频流的唯一ID, 一路流如果既有音频包又有视频包,那么这路流音频包的StreamID和他视频包的StreamID相同

默认的Chunk Size是128字节, 实际发送多为一个Message包含一个Chunk

RTMP消息优先级:在RTMP中,消息(Message)主要分为两大类:控制消息和数据消息。分优先级,优先级高的先行。优先级低的不能阻塞优先级高的。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/826280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

类和对象-对象特性-类对象作为类成员

类对象作为类成员 #include<iostream> #include<string> using namespace std; class Phone{ public:Phone(string pName){m_pNamepName;}string m_pName; }; class Person{ public:Person(string name,string pName):m_Name(name),m_Phone(pName){}string m_Nam…

【笔试强训_Day06】

文章目录 1.字符串相乘 1.字符串相乘 题目链接 解题思路&#xff1a; 高精度乘法&#xff0c;注意要学会下面这种列式相乘的形式&#x1f34e; 注意细节❗&#xff1a; ① &#x1f34e; 首先把列式相乘的数据都存放到数组中去&#xff0c; 然后再对数组中的数据进行取余进…

C++:运算符重载和“const”成员

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《C&#xff1a;运算符重载》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 文章目录 赋值运算符重载1. 运算符重载2.赋值运算符重载第一个点第二个点&…

迅雷下载不了的资源怎么下载?

我想下载Boost库&#xff0c;但是下载不下来 用迅雷下载是一直卡在0k 后来尝试在centos上用wget进行下载&#xff0c;竟然可以 wget https://boostorg.jfrog.io/artifactory/main/release/1.85.0/source/boost_1_85_0.tar.gz

揭开ChatGPT面纱(一):准备工作(搭建开发环境运行OpenAI Demo)

文章目录 序言&#xff1a;探索人工智能的新篇章一、搭建开发环境二、编写并运行demo1.代码2.解析3.执行结果 本博客的gitlab仓库&#xff1a;地址&#xff0c;本博客对应01文件夹。 序言&#xff1a;探索人工智能的新篇章 随着人工智能技术的飞速发展&#xff0c;ChatGPT作为…

go 语言 mage 安装踩坑

具体安装代码&#xff1a;mage 官方地址&#xff1a;Mage :: Mage git clone https://github.com/magefile/mage cd mage go run bootstrap.go 在go部署完后&#xff0c;执行上面的脚本&#xff0c;发现最后一句老是执行不成功&#xff1a; rootBDGF-7FPQW93:/home/gw00241401…

2024燃动智火-业务视角的中国企业AI+学习发展报告

来源&#xff1a;新华三 学习型组织的数字化转型是众多企业关注的焦点&#xff0c;数字战略需要人才升级&#xff0c;数字 化学习加速人才培养。AI 技术在学习中的运用&#xff0c;为企业学习型组织的数字化转型插 上了飞翔的翅膀。这份报告解码了AI 时代企业的学习发展&#…

混合现实(MR)开发框架

混合现实&#xff08;MR&#xff09;开发框架为开发者提供了构建MR应用程序所需的基本工具和功能。它们通常包括3D引擎、场景图、输入系统、音频系统、网络功能以及支持同时处理现实世界和虚拟世界信息的功能。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&…

springboot+ssm基于Java的小型企业银行账目管理系统代码Lw

本毕业设计课题要求学生基于软件工程方法&#xff0c;根据课题的需求&#xff0c;给出小型企业银行账目管理系统概要设计、详细设计、数据库的设计以及系统实现和测试&#xff0c;并撰写规范的毕业设计说明书。该系统的主要模块有&#xff1a;系统管理、帐目管理、查询统计、用…

vue.runtime.esm.js?c320:4625 [Vue warn]: Failed to resolve directive: lazy

使用图片懒加载插件报错 原因&#xff1a;vue2与懒加载插件默认版本不相容导致的 解决方法&#xff1a;重新安装lazyLoad npm install vue-lazyload1.3.3 --save-dev

如何使用 ArcGIS Pro 制作边界晕渲效果

在某些出版的地图中&#xff0c;边界有类似于“发光”的晕渲效果&#xff0c;这里为大家介绍一下如何使用ArcGIS Pro 制作这种晕渲效果&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的行政区划数据&#xff0c;除了行政区划数据&#xff0c…

ruoyi-nbcio-plus基于vue3的flowable多租户机制

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

MyBatis 面试题(八)

1. MyBatis-Plus 是什么框架? MyBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;它在 MyBatis 的基础上进行了功能扩展和增强&#xff0c;旨在简化开发、提高效率。这个框架提供了许多方便的功能&#xff0c;如自动生成 MyBatis 的 mapper 接口以及对应的实现类&#xff0…

VMWare ubuntu 18.04 网卡丢失

平台信息&#xff1a; ubuntu 18.04 ifconfig效果&#xff1a; lo: flags73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1000 (Local Loopback)RX packets 280 bytes 20…

数据库服务器NTP调整

查看时间&#xff1a; watch date --NTP配置 1、查看时间 ntpdate -q XX.XX.192.3 ntpdate XX.XX.192.3 2、配置时间服务器 vi /etc/ntp.conf server XX.XX.192.3 iburst 3、设置时间不允许回调 vi /etc/sysconfig/ntpd OPTIONS"-u ntp:ntp -p /var/run/ntpd.p…

成长工作思考

前言 这一篇&#xff0c;不是技术博客&#xff0c;而是个人发展的一些思考和总结&#xff0c;复盘才会做的更好&#xff0c;成长的道路当然不是随着时间推移 开场白 不劳而获的是时间&#xff0c;完全免费的&#xff0c;但是免费的同时也是最贵的。向前看仿佛时间悠悠无边&a…

【Flutter】多语言方案二:GetX 版

介绍 多语言方案&#xff1a;GetX版&#xff0c;需要手动自定义字符串引用常量&#xff0c;优点不需要自己管理状态。 目录 介绍运行效果一、安装 GetX二、使用1.语言配置 在lib/core下创建一个language文件夹&#xff0c;文件夹下创建一个local.dart文件2.language文件夹下创…

程序员自由创业周记#32:新产品构思

程序员自由创业周记#32&#xff1a;新产品构思 新作品 我时常把自己看做一位木匠&#xff0c;有点手艺&#xff0c;能做一些作品养活自己。而 加一、Island Widgets、Nap 就是我的作品。 接下来在持续维护迭代的同时&#xff0c;要开启下一个作品的创造了。 其实早在2022的1…

wujie微前端接入笔记

由于项目目前采用 wujie 方案,所以本文重点介绍 wujie !!! 如果图片打不开,请在本机访问,图片在外网图床 主应用 wujie src\components\Layout\WujieLayout : 无界子应用渲染的容器src\components\Layout\hooks: 无界相关的 hook子应用类似 1.什么是微前端 微前端是一种软…

进程间通信(1)管道

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…