当前位置: 首页 > article >正文

RTMP视频流的帧格式分析

RTMPReal-Time Messaging Protocol是基于 TCP 的协议其底层传输的数据实际上封装了 FLVFlash Video格式的 Tag。在 RTMP 流中数据被切分成一个个 Chunk块进行发送。为了让你深入理解我将模拟抓取一个真实场景一个主播正在推流内容包含一段 H.264 视频和 AAC 音频。以下是详细的分析1. RTMP Chunk Header包头分析无论音频还是视频数据包的最外层都是 RTMP Chunk Header。假设数据(Hex):03 00 00 00 00 00 04 05 00 00 00详细解析:03:Format (2 bit) Chunk Stream ID (6 bit)。Format0表示这是一个完整的 Chunk Header包含时间戳、长度、类型等全部信息。CSID3表示块流 ID 为 3。00 00 00:Timestamp (3 bytes)。时间戳为 0通常是流的第一个包。00 00 04:Message Length (3 bytes)。消息体长度为 4 字节这是一个极小的包通常用于发送握手后的配置信息。05:Message Type ID (1 byte)。类型为 5表示Audio Data如果是 9 则是 Video Data。00 00 00:Stream ID (4 bytes)。流 ID 为 0。2. 音频包详细分析AAC 音频在 RTMP 中有两种主要的包类型AAC Sequence Header配置信息和AAC Raw Data声音数据。示例场景发送 AAC 配置信息这是推流开始后发送的第一个音频包解码器需要它来知道采样率、声道数等。假设 Payload 数据(Hex):AF 00 11 90 56 E5(注意不包含上面的 Chunk Header这里是 Tag Body 的内容)详细格式解析:AF:Sound Format Info (1 byte)高 4 位1010(10):Sound Format AAC。高 3-2 位11(3):Sample Rate 44 kHz。高 1 位1(1):Sample Size 16-bit。高 0 位1(1):Sound Type Stereo (立体声)。总结: 44100Hz, 16位, 立体声 AAC。00:AAC Packet Type (1 byte)00AAC Sequence Header(AudioSpecificConfig)。01 AAC Raw Data (真正的音频帧)。分析: 这里00说明这是配置包告诉播放器如何初始化解码器。11 90 56 E5:AudioSpecificConfig Data (4 bytes)这是 AAC 的 ADTSAudio Data Transport Stream头部信息去掉同步字后的紧凑格式。通常包含 Profile (如 LC)、Sampling Frequency Index、Channel Configuration 等信息。播放器会将这部分数据提取出来构建解码器上下文。示例场景发送真实的音频帧假设 Payload 数据:AF 01 [后面跟随一长串 AAC 压缩数据]AF: 同上音频格式信息。01:AAC Packet Type 1。表示后面的数据是裸的 AAC ES (Elementary Stream) 数据不包含 ADTS 头因为 RTMP/FLV 已经在配置包里定义了格式这里为了节省带宽不再重复发送头部。3. 视频包详细分析H.264 视频在 RTMP 中也分两种AVC Sequence Header(SPS/PPS) 和AVC NALU(I帧/P帧/B帧)。示例场景发送 AVC 配置信息 (SPS/PPS)这是推流的第一个视频包没有画面只有元数据。假设 Payload 数据(Hex):17 00 00 00 00 01 67 42 ...(注为了演示清晰简化了数据长度)详细格式解析:17:Frame Type Codec ID (1 byte)高 4 位0001(1):Frame Type Keyframe (IDR 帧)。1: Keyframe (I帧)2: Inter frame (P帧/B帧)3: Disposable inter frame…低 4 位0111(7):Codec ID AVC。7 H.264 (AVC)12 H.265 (HEVC)含义: 这是一个关键帧的配置包。00:AVCPacket Type (1 byte)00AVC Sequence Header。01 AVC NALU unit。分析: 这里00表示这是包含 SPS 和 PPS 的配置包。00 00 00:Composition Time (3 bytes)仅在 Packet Type 为 1 时有意义。这里因为是 Header通常为 0。01 ...:DecoderConfigurationRecord Data这里存储的是 ISO BMFF 格式的 AVCDecoderConfigurationRecord。它包含ConfigurationVersion、AVCProfileIndication、ProfileCompatibility、AVCLevelIndication、LengthSizeMinusOne通常为 3表示 NALU 长度用 4 字节表示。紧接着是SPS (Sequence Parameter Set)和PPS (Picture Parameter Set)的数据。示例场景发送关键帧数据 (I-Frame)假设 Payload 数据:17 01 00 00 1D 00 00 00 01 67 42 ...(注实际长度字段取决于配置)详细格式解析:17:Frame Type Keyframe (1),Codec ID AVC (7)。01:AVCPacket Type AVC NALU (1)。表示这是真正的视频画面数据。00 00 1D:Composition Time (3 bytes)。表示解码时间戳与显示时间戳之间的偏移量 (PTS - DTS)。假设值为 29ms0x001D意味着这个帧应该比解码时间晚 29ms 显示B帧常用但在纯 I/P 帧流中通常为 0。00 00 00 01:NALU Start Code (4 bytes)(虽然 FLV 通常使用 Length 字段但在分析底层 H.264 码流时常见 Start Code但在 RTMP Tag Body 内部通常是 [长度][数据] 的结构)。修正在 FLV 结构中这里应该是NALU Length。如果 LengthSizeMinusOne3这里就是 4 字节长度。假设 Length 00 00 00 1C(28 字节)。67 ...:NALU Data。67(十进制 103) 代表 NALU 类型为 SPS (非关键 IDR)。但这里如果是 I 帧通常会包含 SPS/PPS如果 IDR 周期性插入配置或者类型65(IDR slice)。实际数据结构示例循环[4 Bytes: Length] [1 Byte: NALU Header] [N Bytes: Payload][4 Bytes: Length] [1 Byte: NALU Header] [N Bytes: Payload]4. 总结对比表字段位置音频包 (AAC)视频包第一个字节AF(Sound FormatAAC, 44k, Stereo, 16bit)17(Frame TypeKeyframe, CodecAVC)第二个字节00(Seq Header) 或01(Raw Data)00(Seq Header) 或01(NALU)后续字节AAC AudioSpecificConfig 或 Raw ES Data3字节 CompTime DecoderRecord 或 NALU Units核心点记忆配置包 是必须先发送的包含了解码必需的表头信息。音频 AAC00类型是头01类型是去掉 ADTS头的裸流。视频 AVC00类型是 SPS/PPS 头01类型是 NALU 单元。Composition Time只在视频01类型中有意义用于音画同步中的补正。希望这个详细的数据包分析能帮你理解 RTMP 流的内部结构

相关文章:

RTMP视频流的帧格式分析

RTMP(Real-Time Messaging Protocol)是基于 TCP 的协议,其底层传输的数据实际上封装了 FLV(Flash Video)格式的 Tag。在 RTMP 流中,数据被切分成一个个 Chunk(块)进行发送。为了让你…...

ok-ww终极指南:基于图像识别的鸣潮自动化战斗完整解决方案

ok-ww终极指南:基于图像识别的鸣潮自动化战斗完整解决方案 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 在《鸣潮》这…...

如何永久保存微信聊天记录:终极数据备份与年度报告生成指南

如何永久保存微信聊天记录:终极数据备份与年度报告生成指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/…...

杀戮尖塔2mod二次元猎宝

关于《杀戮尖塔2》(Slay the Spire 2)的 “二次元猎宝”(Anime Treasure Hunter)Mod,该作品目前是社区中关注度较高的综合性扩展 Mod。 镜像从夸克下载 1. 作者 该 Mod 通常由 国内 Mod 开发团队/个人“五月&#x…...

5个AI象棋实战技巧:从新手到高手的Vin象棋完全指南

5个AI象棋实战技巧:从新手到高手的Vin象棋完全指南 【免费下载链接】VinXiangQi Xiangqi syncing tool based on Yolov5 / 基于Yolov5的中国象棋连线工具 项目地址: https://gitcode.com/gh_mirrors/vi/VinXiangQi 你是否在象棋对弈中屡战屡败,面…...

2025届必备的AI辅助论文网站推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 针对用户输入特定主题或关键词,AI写作软件能依托先进自然语言处理技术&#xff…...

将 Claude Code 编程助手对接至 Taotoken 的配置指南

将 Claude Code 编程助手对接至 Taotoken 的配置指南 1. 准备工作 在开始配置前,请确保已具备以下条件: 有效的 Taotoken API Key(可在控制台「API 密钥」页面生成)目标模型 ID(可在 Taotoken 模型广场查看 Anthrop…...

Linux(CentOS 6/7)搭建 vsFTPD 服务器及排错实战(SELinux 导致无法切换目录)

环境说明虚拟机系统版本为CentOS 7,IP地址配置为静态IP(如192.168.1.100),确保网络连通性正常。安装 vsFTPD方法一:通过yum安装vsftpd服务:[rootlocalhost Packages]# yum install -y vsftpd验证安装是否成…...

C++版本的opencv速度比gradle版本快5-30倍

结论先说:性能差距非常大!C 版远优于 Gradle 依赖版你用的 implementation org.opencv:opencv:4.9.0 是 OpenCV Java 版,和 C 原生集成 性能差距至少 5~20 倍,实时图像处理(相机、视频)甚至能差 30 倍以上。…...

量子纠缠源同步丢失?C语言底层驱动调试日记(含逻辑分析仪抓取的1.25Gbps QKD时钟域切换波形+源码注释版)

更多请点击: https://intelliparadigm.com 第一章:量子纠缠源同步丢失?C语言底层驱动调试日记(含逻辑分析仪抓取的1.25Gbps QKD时钟域切换波形源码注释版) 凌晨三点十七分,QKD(量子密钥分发&am…...

OpenCore Legacy Patcher:让旧Mac免费升级最新macOS的终极指南

OpenCore Legacy Patcher:让旧Mac免费升级最新macOS的终极指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher是一款革命…...

提高记忆力就能提高成绩是真的吗破解流言 科学认知记忆力与成绩的关系

提高记忆力就能提高成绩是真的吗破解流言的核心结论非常明确:这个说法是片面的流言,记忆力只是影响成绩的众多因素之一,提高记忆力并不必然带来成绩提升,成绩提升是多维度因素共同作用的结果。 提高记忆力就能提高成绩是真的吗 底…...

anlogic pl中断驱动配置

TD工程,一秒给IN5拉高一次电平 设备树而言 / {plint {compatible = "milianke,plint";interrupt-parent = <&gic>;interrupts = <0 82 4>; }; };/ {plint {compatible = "milianke,plint";interrupt-parent = <&gic>;interrup…...

React/Next.js自定义光标库@muybuen/cursor深度实践指南

1. 项目概述&#xff1a;为现代Web应用注入灵魂的交互光标在构建现代Web应用&#xff0c;特别是基于React或Next.js的富交互产品时&#xff0c;我们常常会不自觉地忽略一个最基础却又最直接的交互媒介——鼠标光标。默认的箭头指针千篇一律&#xff0c;它只是系统的一个指示器&…...

三维战场环境下的多无人机智能协同作战系统:基于混合GA-PSO的威胁规避与时间协同路径规划(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

(一区复现)基于强化学习和优化反步法的水面舰艇自适应跟踪控制研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

数据结构协议:跨语言数据一致性的核心解决方案

1. 项目概述&#xff1a;一个数据结构协议的探索最近在翻看一些开源项目时&#xff0c;偶然看到了k-kolomeitsev/data-structure-protocol这个仓库。单看标题&#xff0c;它像是一个关于“数据结构协议”的抽象概念库&#xff0c;但点进去深入探究后&#xff0c;我发现它的核心…...

基于STM32F1实现LADRC线性自抗扰控制(TD、ESO、LSEF编程),以直流电机调速控制为例,支持串口调试,上位机调试

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

2026届学术党必备的AI辅助写作神器实际效果

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 具备智能化解决方案的人工智能论文网站&#xff0c;是为协助学术写作而存在的&#xff0c;它…...

ARMv8调试寄存器详解:断点与观察点控制

1. ARMv8调试寄存器架构概述调试寄存器是现代处理器调试功能的核心硬件组件&#xff0c;它们为开发者提供了在硬件层面监控和干预程序执行流程的能力。在ARMv8架构中&#xff0c;调试寄存器主要分为两大类&#xff1a;断点控制寄存器&#xff08;DBGBCR_EL1&#xff09;和观察点…...

Adafruit Metro RP2350开发板解析与嵌入式开发实践

1. Adafruit Metro RP2350开发板深度解析作为一名长期从事嵌入式开发的工程师&#xff0c;当我第一次看到Adafruit Metro RP2350开发板时&#xff0c;立刻意识到这是一款在兼容性和性能之间取得巧妙平衡的产品。这款开发板最大的亮点在于它采用了Raspberry Pi最新推出的RP2350 …...

“红帽系统管理二”知识点问答题:第10章 控制启动过程

1. 请简要说明 RHEL9的启动过程。1&#xff09;通电自检&#xff1a;电脑通电后&#xff0c;BIOS/UEFI 先做硬件体检&#xff0c;确认 CPU、内存、硬盘等关键设备正常。2&#xff09;找启动盘&#xff1a;固件按配置顺序扫描可启动设备&#xff0c;定位系统盘。3&#xff09;加…...

开源项目复现全流程指南:从OPERA项目看环境搭建与代码调试

1. 项目概述&#xff1a;从“OPERA”看开源项目复现的完整路径最近在社区里看到不少朋友在讨论一个名为“OPERA”的项目&#xff0c;其仓库地址是shikiw/OPERA。乍一看这个标题&#xff0c;可能会让人联想到音乐剧或者某个软件&#xff0c;但在技术圈&#xff0c;尤其是开源社区…...

基于Gemini API的开源UI项目gemiui:从原理到部署的完整实践指南

1. 项目概述&#xff1a;一个为Gemini API量身定制的UI界面如果你最近在折腾AI应用开发&#xff0c;或者单纯想给自己搭建一个更顺手、更可控的AI对话前端&#xff0c;那么你很可能已经听说过或者正在寻找一个合适的开源UI项目。今天要聊的MarkShawn2020/gemiui&#xff0c;就是…...

Aieditor编辑器使用require.js集成到内容管理系统

1.首先打开http://www.aieditor.com.cn/编辑器官网 2.这里以HKCMS框架为例,其余的支持require.js引入的基本都适用本教程 效果: 3.打开编辑器文档,layui集成的方式,代码如下: <!doctype html> <html lang="en"> <head><title>AiEdit…...

手把手教你修复iText PDF的‘trailer not found’错误(附PDF模板保护指南)

手把手解决iText PDF的trailer not found错误与资源保护实战 当你正在开发一个需要处理PDF文档的Java应用时&#xff0c;突然遇到"Rebuild failed: trailer not found"这样的错误信息&#xff0c;确实会让人感到困惑。这个错误通常发生在使用iText库读取PDF文件流时&…...

AI应用开发工作空间:从架构设计到工程实践的全栈解决方案

1. 项目概述&#xff1a;一个为AI协同工作流打造的“数字工坊”最近在折腾AI应用开发的朋友&#xff0c;可能都遇到过类似的困境&#xff1a;想法很多&#xff0c;但真要把一个AI驱动的功能或产品从原型落地到可用状态&#xff0c;过程却异常繁琐。你需要处理模型调用、数据流转…...

Keyviz终极指南:5分钟掌握专业级键鼠操作可视化

Keyviz终极指南&#xff1a;5分钟掌握专业级键鼠操作可视化 【免费下载链接】keyviz Keyviz is a free and open-source tool to visualize your keystrokes ⌨️ and &#x1f5b1;️ mouse actions in real-time. 项目地址: https://gitcode.com/gh_mirrors/ke/keyviz …...

WorkshopDL:跨平台Steam创意工坊下载器的技术探索与实践

WorkshopDL&#xff1a;跨平台Steam创意工坊下载器的技术探索与实践 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否曾在Epic Games Store或GOG平台购买了心仪的游戏&…...

C语言写对了,芯片却没响应?存算一体指令调用时序校准实战(含逻辑分析仪波形对照表)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;C语言写对了&#xff0c;芯片却没响应&#xff1f;存算一体指令调用时序校准实战&#xff08;含逻辑分析仪波形对照表&#xff09; 在存算一体&#xff08;Computing-in-Memory, CIM&#xff09;芯片开…...