rtmp协议

news2024/11/17 14:50:07

目录

1 rtmp格式

 2 header

3 chunk data


1 rtmp格式

Real Time Messaging Protocol(实时消息传送协议协议)是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的私有协议。  在RTMP协议中信令和媒体数据都称之为Message,包含Message head。RTMP协议是基于TCP的,直播最低延时通常3秒左右。由于TCP的包长度受限于MTU(1500个字节),而RTMP的Message长度可能超过MTU,会采取分片,将消息体拆分成多个chunk data

RTMP 协议来的传输单元是 chunk。一个 RTMP 包就是一个 chunk。RTMP消息组成:包头,包体。包头可以是4种长度的任意一种:12, 8, 4, 1 byte(s).完整的RTMP包头应该是12bytes,包含了时间戳,AMFSize,AMFType,StreamID信息, 8字节的包头只纪录了时间戳,AMFSize,AMFType,其他字节的包头纪录信息依次类推 。包体最大长度默认为128字节,通过chunkSize可改变包体最大长度,通常当一段AFM数据超过128字节后,超过128的部分就放到了其他的RTMP封包中。

RTMP 协议最多支持 65597 个流(chunk)。

 2 header

chunk header中Chunk stream ID 是用来区分消息信道的。CS ID(块流ID) 范围为: 3 ~ 65599。

                                                     Adobe建议的CS ID设置

 

                                                                                 AMFType消息类型

StreamID

 StreamID是音视频流的ID,如果AMFType!=0x08或!=0x09那么 StreamID为0。
ChannelID 和StreamID之间的计算公式:StreamID=(ChannelID-4)/5+1 参考red5
例如当ChannelID为2、3、4时StreamID都为1当ChannelID为9的时候StreamID为2

基本头分为三种情况由Base Header第一个字节后六个bits决定

    (后六个bits==0):基本头长度为2字节第二个字节表示块流ID
    (后六个bits==1):基本头长度为3字节,第二三个字节表示快流ID
    (1<后六个bits<=64):基本头长度为1字节,后6bits表示块流ID

3 chunk data

如果 AMFType = 0×09, 数据就是 Video Data。Video Data由多个video tag组成,一个video tag,包含:SPS,PPS,访问单元分隔符,SEI,I帧包

                                                                        VideoTagHeader结构

AVCPacketType表示 VIDEODATA

IF AVCPacketType ==0 AVCDecoderConfigurationRecord(AVC sequence header)//包含sps,pps等信息。解码器stop之后再次start之前,如seek、快进快退状态切换等,都需要重新送一遍sps和pps的信息。AVCDecoderConfigurationRecord在FLV文件中一般情况也是出现1次,也就是第一个 video tag.
IF AVCPacketType == 1 One or more NALUs (Full frames are required)

 

 

 

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

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

相关文章

Intellij IDEA 提示 Thrift Support 支持不兼容

最近升级 Intellij IDEA 后老提示 Thrift Support 不兼容。 后来看了下这个插件已经不少时间没有更新了&#xff0c;也一直不知道这个插件是干什么 用的&#xff0c; 后来看了下&#xff0c;这个插件是&#xff1a; Thrift是一种接口描述语言和二进制通讯协议&#xff0c;它被…

【031】基于Vue的学生宿舍管理系统课设(含源码、数据库、运行教程

前排提示&#xff1a;项目源码已放在文末 基于VueSpringbootmysql员工考勤管理系统(多角色登录、请假、打卡) 开发环境&#xff1a;SpringbootMysqlVueNodejsMavenJDK1.8&#xff0b;redis 技术栈&#xff1a;spring-boot、mysql、mybatis-plus 数据库&#xff1a; 源码、…

Centos7单机部署Flink13.6及测试FinkCDC同步MySQL

一、背景 公司CDH6.3.2里面的版本是Flink1.12.0。而因为FlinkCDC2.0.0只支持Flink1.13.0以后&#xff0c;版本不匹配&#xff0c;所以只能升级版本。但是升级版本是个大工程&#xff0c;要编译、要parcel制作工具&#xff0c;而且是生产环境的升级&#xff0c;没办法因为要测试…

初识Spring MVC框架,Spring MVC工作原理

Java EE三层架构 在Java EE开发中&#xff0c;系统经典的三层架构包括表现层、业务层和持久层。三层架构中&#xff0c;每一层各司其职&#xff0c;表现层(Web层&#xff09;负责接收客户端请求&#xff0c;并向客户端响应结果;业务层( Service层&#xff09;负责业务逻辑处理…

3 手工推导Neural Networ

线性模型假设的问题 如上图&#xff0c;对非线性类边界的数据进行分类 一个解决方案是将数据映射到更高维的空间&#xff0c;就变成线性可分的了。 ϕ \phi ϕ 是一个映射函数&#xff0c;将x从一个低维空间映射到高维空间。 ϕ \phi ϕ 可不可以是一个线性函数&#xff1f; …

RK3568平台开发系列讲解(驱动基础篇)GPIO使用以及gpio-leds驱动讲解

🚀返回专栏总目录 文章目录 一、GPIO 介绍二、RK3568 GPIO 状况三、GPIO 引脚计算四、ITX-3568JQ LED4.1 LED 原理图4.2 LED 设备树4.3 LED 使用五、gpio-leds驱动5.1 介绍5.2 数据结构5.3 驱动分析沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 GPIO使用…

[Hadoop]Apache Hadoop、HDFS

目录 大数据导论与Linux基础 Apache Hadopp概述 Hadoop介绍 Hadoop现状 Hadoop特性优点 Hadopp架构变迁 Apache Hadopp集群搭建 Hadopp集群简介 Hadoop集群模式安装 Hadoop集群启停命令、Web UI HDFS分布式文件系统基础 分布式存储系统的核心属性及功能含义 HDFS简…

Linux多路转接之epoll

文章目录 一、select方案和poll方案还存在的缺陷二、epoll的认识1.epoll的基本认识2.epoll的原理3.epoll函数接口 三、编写epoll服务器四、epoll工作方式1.LT模式2.ET模式 一、select方案和poll方案还存在的缺陷 多路转接方案一开始是select方案&#xff0c;但是select方案缺点…

基于segment anything model(SAM)相关性研究的各个方向论文/项目汇总

目录 简介anything项目整理AnyObjectAnyGenerationAny3DAnyModelAnyTaskAnyX 论文汇总AnyObejctAnyGenerationAnyModelAnyTask 简介 有关anything相关的主流任务: 2d检测相关&#xff08;AnyObject&#xff09;, 3d检测相关&#xff08;Any3D&#xff09;,AI生成相关&#xff…

栈和队列OJ题:LeetCode--225.用队列实现栈

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;今天给大家带来的是LeetCode--225.用队列实现栈 数 据 结 构 专 栏&#xff1a;数据结构 个 人 主 页 &#xff1a;stackY、 LeetCode 专 栏 &#xff1a;LeetCode刷题训练营 LeetCode--225.用队列实现栈&#xff…

软件测试工程师如何提高自己的竞争力?

案例一来自我们的资深功能测试工程师招聘。当时&#xff0c;有一位拥有近 9 年测试经验的资深测试候选人&#xff0c;我对他的简历还是比较满意的&#xff0c;所以就安排了面谈。但是&#xff0c;在聊的过程中我很快发现&#xff0c;这位候选人绝大多数的测试经验积累都“强”绑…

精彩回顾 | 2022(第二届)超级CSO年度评选颁奖盛典

2023年5月13日&#xff0c;2022&#xff08;第二届&#xff09;超级CSO年度评选颁奖盛典在上海举行&#xff0c;来自全国各地近200位来宾、业界专家、企业代表、合作伙伴以及CSO/CISO共同出席。本次盛典得到了包括中国网络安全审查技术与认证中心&#xff08;CCRC&#xff09;、…

什么是即时 AI ?有哪些应用场景

什么是即时 AI &#xff1f; 即时 AI 是全球首款通过自然语言描述&#xff0c;快速生成可编辑的 UI 设计稿的设计工具。 输入文字描述后&#xff0c;即可一次性生成4张 包含矢量图层和图标、支持二次编辑、分层结构清晰 UI 设计稿。 即时 AI 目前已面向全部用户免费开放&#…

无效数据处理攻略: 如何从源头开始预防无效数据带来的风险

数据处理在现代社会中变得越来越重要&#xff0c;而对于数据的可靠性和准确性&#xff0c;我们始终非常关注。然而&#xff0c;即使在对数据进行了精心管理的情况下&#xff0c;无效数据依然可能存在&#xff0c;并可能对数据分析和决策带来不良影响。因此&#xff0c;处理无效…

[Windows驱动开发]-BlackBone实现内存读取的三种方式

文章目录 &#x1f6eb; 导读需求开发环境 升级优化&#xff08;vs2019&#xff09;相关地址Blackbone工程中的lib库添加Blackbone工程修改tools工程修改 旧文章整理&#xff08;vs2017&#xff09;功能描述内存读取-BlackBone库的集成内存读取-检测参数内存读取-ReadProcessMe…

【 数据处理系统 】(草稿)

文章目录 第3章 总体设计3.1 系统设计目标和原则3.2 系统架构设计3.3 数据采集模块设计3.4 数据预处理模块设计3.4.1 业务数据预处理模块设计3.4.2 日志数据预处理模块设计 3.5 数据存储设计3.6 数据仓库设计3.7 可视化模块设计 第4章 详细设计与实现4.1 数据采集模块4.1.1 数据…

一、11.C内存分配/堆栈

C内存分配/堆栈 01.C内存分配❤️ #include <stdio.h>const int g_A = 10; //常量区 int g_B = 20; //数据段 static<

【小菜鸡刷题记】----双指针篇

【小菜鸡刷题记】----双指针篇 剑指 Offer 18. 删除链表的节点剑指 Offer 22. 链表中倒数第k个节点剑指 Offer 25. 合并两个排序的链表剑指 Offer 52. 两个链表的第一个公共节点剑指 Offer 21. 调整数组顺序使奇数位于偶数前面剑指 Offer 57. 和为s的两个数字剑指 Offer 57 - I…

《斯坦福数据挖掘教程·第三版》读书笔记(英文版) Chapter 6 Frequent Itemsets

来源&#xff1a;《斯坦福数据挖掘教程第三版》对应的公开英文书和PPT Chapter 6 Frequent Itemsets The market-basket model of data is used to describe a common form of many-many relationship between two kinds of objects. On the one hand, we have items, and on…

YOLOv8 独家原创改进:独家首发最新原创EfficiCLNMS改进点,改进有效可以直接当做自己的原创改进点来写,新的增强预测帧

💡该教程为属于《芒果书》📚系列,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀 💡本篇文章为YOLOv8改进:独家首发最新EfficiCL-NMS改进点,新的增强预测帧率。 💡对自己数据集改进有效的话,可以直接当做自己的原创改进点来写!!!改进点先到…