三、RTMP协议 视频Chunk和音频Chunk到底长啥样?

news2024/12/30 2:33:24

重要概念

RTMP Chunk Header

RTMP Chunk Header的长度不是固定的,分为: 12 Bytes、8 Bytes、4 Bytes、1 Byte 四种,由RTMP Chunk Header前2位决定。

FLV VideoTagHeader

分析RTMP流时,经常看到与0x170x27进行比较的情况,那0x170x27究竟是什么东东呢?

  • 0x17
    1: key frame(for AVC, a seekable frame)关键帧,比如I帧
    7: AVC

  • 0x27
    1: inter frame(for AVC, a non-seekable frame) 不是关键帧,比如P帧
    7: AVC
    故可通过与0x170x27的比较,来判断视频帧是否为关键帧。
    第二个字节是AVPacketType,这个也很常用,用来判断包的类型:
    0x00 -- AVC sequence header (即AVCc 保存AVC的profie和 SPS PPS等信息)
    0x01 -- AVC NALU 普通的NALU
    0X02 -- AVC end of sequence

FLV AudioTagHeader

AudioTagHeader的长度为2个字节。
AAC的前4个比特是:二进制的1010,即10进制的10。
AAC时,第二个字节用于指定包的类型(AACPacketType)。
如果AACPacketType = 0,则是AAC Sequence header(解码信息);
如果AACPacketType = 1,还是AAC raw(原始音频数据)。

AACPacketType = 0

AACPacketType = 1

RTMP层次(数据发送角度)

H.264的NALU是如何一步步变成RTMP Video Chunk的呢?
AAC的ADTS是如何一步步变成RTMP Audio Chunk的呢?

RTMP Video Chunk (H.264/AVC)

RTMP Video Chunk (H.264/AVC) 封装过程简图

RTMP Video Chunk (H.264/AVC) 封装过程详图

Video Chunk 举例1 AVC sequence header

0500000000003f0901000000 // 12字节的RTMP Chunk Header
17  // 1: keyframe 7:AVC 表示是AVC的关键帧
00  // 0x00: 表明当前Packet的类型是 AVC sequence header
000000 // 3字节的Composition Time
// 以下(到结尾)为实际的AVC sequence header
01 // AVC sequence header的开始 固定为0x01
4d // H.264的profile 0x4d即十进制的77 表示是 Main Profile
40
28 // H.264的level
ff
e1 // 即二进制11100001 后5位为SPS的格式 即1
002b // 2个字节 SPS的长度  即十进制的43
// 实际的SPS 以0x67开头
674d4028965200f0044f
cbff88700b4008000003
00080000030197010003
e800000fa00fe31c0da1
62d920
// 一个字节 PPS的个数 
01
// PPS的长度
0004
// 实际的PPS 以0x68开头
68eb7352

Video Chunk 举例2 关键帧的Chunk

050000000009590901000000  // 12字节的RTMP Chunk Header
17 // 1: keyframe 7:AVC 表示是AVC的关键帧
01 // 0x01: 表明当前Packet的类型是 NALU
000078
000000020910
// 4个字节 SPS的长度
0000002b
// 实际的SPS 以0x67开头
674d4028965200f0044f
cbff88700b4008000003
00080000030197010003
e800000fa00fe31c0da1
62d920
// 4个字节 PPS的长度
00000004
68eb7352 // 实际的PPS
00000016
06000980009e34000003000040010500000300002880
000008f9 // 关键帧的数据长度(从后续一直到结尾)
658880400afec077814b449b525dc855ff7a0ea8aad586c5
00000300000300000300000300003ebfcc2647000003000
0145000000898000004dc0000030350000003032400000
3038800000303f8000004c80000086800001010000018a
000003b0000030000030000030000030000030000
... // 由于数据量比较大 此处略去若干字节

RTMP Audio Chunk (AAC)

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

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

相关文章

Azide-PEG-acid,N3-PEG-COOH,叠氮-聚乙二醇-羧基多用于点击化学

Azide-PEG-acid(N3-PEG-COOH),该化学试剂的中文名为叠氮-聚乙二醇-羧基,它所属分类为Azide PEG Carboxylic acid PEG。 该peg试剂的分子量均可定制,有:1000、2000、3400、20000、10000、5000 。该试剂质量…

k8s部署

kubernetes简要 Kubernetes 是用于自动部署, 扩展和管理容器化应用程序的开源系统. 它将组成应用程序的容器组合成逻辑单元, 以便于管理和服务发现 kubernetes 功能简介 服务发现和负载均衡 存储编排 自动部署和回滚 自动完成装箱计算 自我修复 密钥与配置管理 主机规…

UE5蓝图常用流程节点总结

整理了一下平常做功能开发比较常用的蓝图节点,目录如下: 1. ExecuteConsoleCommand 2. Do N 3. Do Once 4. DoOnceMultiInput 5. Gate 6.MultiGate 7. Branch 8. Sequence 9. FlipFlop 10. Delay 11. Retriggerable Delay 1. ExecuteConsole…

OffiSmart Summit智慧办公及空间管理上海线下峰会精彩亮点抢先看

“聚焦行业生态格局焕新,赋能智慧办公全面落地”——OffiSmart Summit上海国际智慧办公与空间管理峰会即将盛大召开,2022下半年不容错过的智慧办公行业盛会!时间:2022年11月22日 9:00 - 16:30 地点:上海市浦东新区卓美…

Python3《机器学习实战》学习笔记(九):ANN人工神经网络基础详解

文章目录一、简介二、ANN算法细节详解2.1 深度学习要解决的问题2.2 深度学习应用领域2.3 计算机视觉任务2.4 视觉任务中遇到的问题2.4.1回顾K近邻算法2.4.2为啥不能用K近邻2.5得分函数2.6损失函数2.7前向传播流程2.8反向传播计算2.9神经网络整体架构2.10神经元个数对结果的影响…

【Linux】Jetson nano 使用记录,安装torch1.8、yolov5 tensorrt加速、java等

Jetson nano一、u盘系统安装1.1 烧录EMMC引导1.2 烧录U盘系统二、启动、环境配置2.1 设置vnc分辨率2.2. 更新软件三、启动、环境配置3.1 安装conda3.2 安装python3.6版本torch1.83.3 配置yolov5 tensorrt加速3.3.1 转换wts和engine3.3.2使用python脚本运行engine其它记录安装ja…

Postgresql顺滑升级步骤(11升级到14)

首先下载pgsql14的源码包进行安装: yum install postgresql14 –y yum install postgresql14-server -y 附带安装 yum install postgresql14-libs yum install postgresql14-contrib yum install postgresql14-devel 注:如果旧版本装了插件&#…

生态环境影响评价制图流程

生态现状评价内容中基本图件构成包含:项目区域地理位置图、工程平面图、调查样方、样线、点位、断面等布设图、土地利用现状图、地表水系图、植被类型图、植被覆盖度图、归一化植被指数图、生态系统类型图、土壤侵蚀图、物种适宜生境分布图等。 介绍 2.2.遥感常用数…

基于微信小程序的核酸检测系统源码

开发环境及工具: 大等于jdk1.8,大于mysql5.5,idea(eclipse),微信开发者工具 技术说明: springboot mybatis 小程序 代码注释齐全,没有多余代码,适合学习(毕设)&#…

动态自适应可变加权极限学习机ELM预测算法附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

Vue(十)——页面路由(2)

目录 router-link的replace属性 编程式路由导航 缓存路由组件 两个新的生命周期钩子 路由守卫 全局守卫 独享守卫 组件内守卫 路由器的两种工作模式 hash模式 history模式 router-link的replace属性 浏览器历史记录的操作模式:push模式 对历史记录的操作…

视频编解码之理论概述

本文主要讲解实时音视频技术中视频技术的编解码基础理论。 1、视频为何需要压缩? 未经压缩的数字视频的数据量巨大存储困难:一张DVD只能存储几秒钟的未压缩数字视频。传输困难 1兆的带宽传输一秒的数字电视视频需要大约4分钟。2、主要压缩了什么东西&am…

【Pytorch with fastai】第 12 章 :从零开始的语言模型

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

[附源码]SSM计算机毕业设计8号体育用品销售及转卖系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【机器学习】机器学习知识点全面总结(监督学习+无监督学习)

目录:机器学习知识点全面总结一、监督学习1.1 单模型1.1.1 线性回归1.1.2 逻辑回归1.1.3 Lasso1.1.4 K近邻(KNN)1.1.5 决策树1.1.6 bp神经网络1.1.7 支持向量机(SVM)1.1.8 朴素贝叶斯1.2 集成学习1.2.1 Boosting1.2.1.1 GBDT1.2.1.2 Adaboost1.2.1.3 XGBoost1.2.1.4…

防火墙NAT配置实验

目录 一、NAT的种类 分为基于源IP的转换 基于目的的IP转换 外部用户找内部服务器 二、实验拓扑 登陆防火墙 三、配置NAT 配置接口 实验一 配置no-pat NAT 测试no-pat 实验二 NAPT配置 NAPT测试 实验三 配置Easy ip 实验四 配置NAT sever 测试Nat Sever 一、NAT的种…

C++类构造函数和析构函数

11.3 类构造函数和析构函数 构造函数:是为了在定义对象时自动初始化其成员变量的值。 构造函数没有返回值,也没有被声明为void类型;因此,构造函数没有声明类型。 11.3.1 声明和定义一个构造函数 构造函数原型:在这…

windows安装配置git和ToriseGit

目录1、下载安装git2、下载安装ToriseGit3、配置ToriseGit4、公司钥生成1、下载安装git 下载地址 安装:所有都按照默认,直接next就行 2、下载安装ToriseGit 下载地址 下图中两个都要下载,第二个是语言包 安装: 1、先安装主程…

C++行为型模式-职责链模式

1.1 基本概念 职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这类对象链接成一条链,并沿着这条链传递请求,直到有对象处理它为止。 1.2 …

Neural Collaborative Filtering论文笔记

ABSTRACT 深度神经网络在语音识别、计算机视觉和自然语言处理等方面取得了巨大的成果,但是对于推荐系统尚且缺少。虽然即使有用深度学习作为推荐,但是都是对建模起辅助作用。当涉及到用户和项目之间的交互,都会选择流行的矩阵分解&#xff0…