FLV 格式详解资料整理,关键帧格式解析写入库等等
FLV 是一种比较简单的视频封装格式。大致可以分为 FLV 文件头,Metadata元数据,然后一系列的音视频数据。
资料够多:
FLV格式解析图
知乎用户 @Linux服务器研究 画了一张格式解析图,比较全,但默认背景是白色,太过刺眼。我用 photopea 改为黑暗模式,更适合程序员参考(请拖拽到新标签页,放大食用):

一个 C# 写的FLV转录库,我把他转换为 Java
Flv-streamer-2-file
作用是输入FLV视频流,实时解析,实时更新视频时长(duration)。
库是好库,c#也是好语言,但没有 Java 简单易懂。
理解一个格式,最好的方式就是用 Java 写个解析转换库。 —— ME
我将之转换为 Java ,添加写入关键帧索引的功能,一切竟然如此简单,宛若拨云见月。
Appxmod / Flv-stream-saver-java: Pure Java library to parse and save flv stream, with keyframes support.
关键帧索引
关键帧索引指的是:一系列关键帧的时间点,映射到 ==> 文件偏移。
关键帧索引位于 onMetadata 元数据。Metadata 是一个 AMF 编码的 EcmaArray ,可以把它当作一个有序的 HashMap<String, Object>。在上面的 Java 库中,我用 JSON 存储解析结果。
关键帧索引(keyframes)就存于 Metadata[“keyframes”] 之中,格式如下:
keyframes (AsObject)
– times (Strict Array)
– filepositions (Strict Array)
AsObject 类似于 EcmaArray,唯一区别是写入时,不写数组长度。
Strict Array 可以看作 ArrayList。数字以 double 方式存储。两个 Strict Array 的长度相等。
times 时间点的单位是秒。filepositions 文件位置的单位是字节,位置是关键帧的起始地址,即 previous tagsize。
关键帧是特殊的帧,有别于 inter frame 等。关键帧索引有助于快速 seek,但不是唯一因素。播放器的支持也很重要。有的即使没有索引,也能用二分法快速 seek 。
FLV 文件中,除了开头九个字节,其他都是TAG。TAG类型有 SCRIPTDATA,AUDIO,VIDDEO,类型标于 TAG HEADER 中。TAG HEADER 11个字节,仅靠 previous tagsize 4个字节,后面就是 TAGDATA。TAGDATA 又有自己的 HEADER 头,其中第一个字节标明当前是否是关键帧。若是,则此字节高数位四位等于1 ( byte>>4==1 )。
SCRIPTDATA 并非脚本,而是数据。Metadata 就是此类型的一个 TAG,一般位于文件头部位置,所以存储关键帧索引时,通过预留位置的方式,最大存储6000多个索引(大小可调)。
【 previous tag size / tag header / tag data 】
tag header 11个字节,其中也包含当前 tag data 的大小。与 previous tag size 不同的是,tag header 中的本TAG大小存储于其中 3 个字节,仅包括 tag data。 所以之后的 previous tag size == 本 tag_data.length + 11。
除了关键帧索引,还有 avc nalu 啥的有助于网络流媒体快速播放。太过复杂没有研究,但是参考链接中有人用 c# 研究了。
参考链接
全部链接见上面我写的 Java 库GitHub地址。
除了参考链接,还有一些在线或离线的FLV工具,可以查看 metaedata、查看关键帧等,编写过程离不开这些。

相关文章:
FLV 格式详解资料整理,关键帧格式解析写入库等等
FLV 是一种比较简单的视频封装格式。大致可以分为 FLV 文件头,Metadata元数据,然后一系列的音视频数据。 资料够多: FLV格式解析图 知乎用户 Linux服务器研究 画了一张格式解析图,比较全,但默认背景是白色ÿ…...
《深度学习》OpenCV 高阶 图像直方图、掩码图像 参数解析及案例实现
目录 一、图像直方图 1、什么是图像直方图 2、作用 1)分析图像的亮度分布 2)判断图像的对比度 3)检测图像的亮度和色彩偏移 4)图像增强和调整 5)阈值分割 3、举例 二、直方图用法 1、函数用法 2、参数解析…...
coredump-N: stack 消耗完之后,用户自定义信号处理有些问题 sigaltstack
https://mzhan017.blog.csdn.net/article/details/129401531 在上面一篇是关于stack耗尽的一个小程序例子。 https://www.man7.org/linux/man-pages/man2/sigaltstack.2.html 这里提到一个问题,就是如果栈被用光了,这个时候SIGSEGV的用户自定义的handler处理可能就没有空间进…...
数据库有关c语言
数据库的概念 SQL(Structured Query Language)是一种专门用来与数据库进行交互的编程语言,它允许用户查询、更新和管理关系型数据库中的数据。关系型数据库是基于表(Table)的数据库,其中表由行(…...
【网页播放器】播放自己喜欢的音乐
// 错误处理 window.onerror function(message, source, lineno, colno, error) {console.error("An error occurred:", message, "at", source, ":", lineno);return true; };// 检查 particlesJS 是否已定义 if (typeof particlesJS ! undefi…...
【第27章】Spring Cloud之适配Sentinel
文章目录 前言一、准备1. 引入依赖2. 配置控制台信息 二、定义资源1. Controller2. Service3. ServiceImpl 三、访问控制台1. 发起请求2. 访问控制台 总结 前言 Spring Cloud Alibaba 默认为 Sentinel 整合了 Servlet、RestTemplate、FeignClient 和 Spring WebFlux。Sentinel…...
怎么debug python
1、打开pycharm,新建一个python程序,命名为excel.py。 2、编写代码。 3、点击菜单栏中的“Run”,在下拉菜单中选择“debug excel.py”或者“Debug...”,这两个功能是一样的,都是调试功能。 4、调试快捷键:C…...
Java 递归
目录 1.A方法调用B方法,很容易理解! 2.递归:A方法调用A方法,就是自己调用自己! 3. 递归的优点: 4. 递归结构包括两个部分: 5. 递归的三个阶段 6. 递归的缺点&#…...
获取业务库的schema信息导出成数据字典
获取业务库的schema信息导出成数据字典 场景:需要获取业务库的schema信息导出成数据字典,以下为获取oracle与mysql数据库的schema信息语句 --获取oracle库schema信息 selecttt1.owner as t_owner,tt1.table_name,tt1.column_name,tt1.data_type,tt1.dat…...
力扣: 快乐数
文章目录 需求分析代码结尾 需求 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 …...
一般位置下的3D齐次旋转矩阵
下面的矩阵虽然复杂,但它的逆矩阵求起来非常简单,只需要在 sin θ \sin\theta sinθ 前面加个负号就是原来矩阵的逆矩阵。 如果编程序是可以直接拿来用的,相比其它获取一般旋转轴不经过原点的三维旋转矩阵的途径或算法,应该能…...
每日一题——第八十六题
题目:写一个函数,输入一个十进制的数,将其转换为任意的r进制数 #include<stdio.h> void convertToBaseR(int num, int r); int main() {int num, r;printf("请输入十进制的整数:");scanf_s("%d", &…...
十、组合模式
组合模式(Composite Pattern)是一种结构型设计模式,它允许将对象组合成树形结构来表示“部分-整体”的层次关系。组合模式能够让客户端以统一的方式对待单个对象和对象集合,使得客户端在处理复杂树形结构的时候,可以以…...
一分钟了解网络安全风险评估!
网络安全风险评估是一种系统性的分析过程,旨在识别和评估网络系统中的潜在安全风险。这个过程包括识别网络资产、分析可能的威胁和脆弱性、评估风险的可能性和影响,以及提出缓解措施。网络安全风险评估有助于组织了解其网络安全状况,制定相应…...
【springsecurity】使用PasswordEncoder加密用户密码
目录 1. 导入依赖2. 配置 PasswordEncoder3. 使用 PasswordEncoder 加密用户密码4. 使用 PasswordEncoder 验证用户密码 1. 导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifac…...
从0到1实现线程池(C语言版)
目录 🌤️1. 基础知识 ⛅1.1 线程概述 ⛅1.2 linux下线程相关函数 🌥️1.2.1 线程ID 🌥️1.2.2 线程创建 🌥️1.2.3 线程回收 🌥️1.2.4 线程分离 🌤️2. 线程池概述 ⛅2.1 线程池的定义 ⛅2.2 为…...
Visual studio自动添加头部注释
记事本打开VS版本安装目录下的Class.cs文件 增加如下内容:...
【C#生态园】提升性能效率:C#异步I/O库详尽比较和应用指南
优化异步任务处理:C#异步I/O库全面解析 前言 在C#开发中,异步I/O是一个重要的主题。为了提高性能和响应速度,开发人员需要深入了解各种异步I/O库的功能和用法。本文将介绍几个常用的C#异步I/O库,包括Task Parallel Library、Asy…...
管理医疗AI炒作的三种方法
一个人类医生和机器人医生互相伸手。 全美的医院、临床诊所和医疗系统正面临重重困难。他们的员工队伍紧张且人员短缺,运营成本不断上升,服务需求常常超过其承受能力,限制了医疗服务的可及性。 人工智能应运而生。在自ChatGPT推出将AI推向聚…...
VMware Workstation Pro Download 个人免费使用
参考 VMware Workstation Pro Download...
AI Agent配置安全扫描:AgentLint工具实战与供应链风险防护
1. 项目概述:AI Agent配置的“安全门卫”最近在折腾Claude Code和Cursor这类AI编程助手时,我发现了一个既让人兴奋又有点不安的事实:这些工具的配置文件(比如.claude/目录、CLAUDE.md或.cursorrules)功能强大到可以执行…...
OpenClaw狂欢暗藏安全隐患,深圳机密计算科技端云一体方案筑牢AI Agent安全基座
AI Agent时代,安全信任的崩塌2026年初,OpenClaw横空出世,仅用60天打破React保持十年的GitHub Star纪录,成为当年热度最高的现象级开源项目。2026年3月,在英伟达GTC全球开发者大会上,黄仁勋直言称“OpenClaw…...
Alph:一键统一配置AI编程助手MCP服务器的命令行工具
1. 项目概述:告别手动配置的混乱时代 如果你和我一样,日常开发中同时用着 Cursor、Claude Code、Gemini CLI 这些 AI 编程助手,那你一定对下面这个场景深恶痛绝:每次想给它们接入一个新的 MCP 服务器,都得像个考古学家…...
从ARIMA差分到MIM网络:一个老派时间序列技巧如何革新了深度学习预测
从差分思想到记忆网络:传统时间序列技巧如何重塑深度学习架构 在气象预报的雷达回波图中,降水云团的形态每秒钟都在剧烈变化;城市交通流量监测数据里,早晚高峰的波动与平峰期形成鲜明对比;股票市场的价格曲线更是以难以…...
如何快速搭建AI聊天前端:SillyTavern完整教程与角色扮演系统指南
如何快速搭建AI聊天前端:SillyTavern完整教程与角色扮演系统指南 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 想象一下,你能够与任何AI角色进行沉浸式对话&#…...
别再死记硬背了!用Python和C语言手把手带你理解CRC32查表法的实现原理
从数学到代码:用Python和C语言彻底搞懂CRC32查表法的实现 在数据传输和存储过程中,错误检测是确保数据完整性的关键环节。CRC32作为一种广泛应用的校验算法,从网络协议到压缩工具,再到文件系统,几乎无处不在。但很多开…...
百度网盘Mac版破解SVIP插件:3步实现免费高速下载的终极方案
百度网盘Mac版破解SVIP插件:3步实现免费高速下载的终极方案 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘Mac版的龟速下载…...
ARM CoreSight DAP-Lite调试架构与双协议切换技术
1. ARM CoreSight DAP-Lite技术架构解析作为ARM调试体系的核心组件,DAP-Lite(Debug Access Port Lite)是嵌入式系统开发中连接调试工具与片上资源的桥梁。我在实际芯片调试中发现,这个仅约2mm面积的IP模块,却能实现传统…...
马斯克诉奥尔特曼案第三周:微软与 OpenAI 举证反击,争议焦点浮出水面
【案件进展概述】智东西 5 月 12 日消息,今天,马斯克诉奥尔特曼案进入第三周,被告方关键证人相继出庭,微软 CEO 萨提亚纳德拉 (Satya Nadella)、OpenAI 联合创始人兼前首席科学家 伊利亚苏茨克维 ÿ…...
如何绕过Cursor Pro试用限制:技术原理与实战指南
如何绕过Cursor Pro试用限制:技术原理与实战指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your trial re…...
