软编码Flv 到Mp4 容器(三) flv metadata tag解析

本文档是软编码FLV到MP4系列的第三部分,重点介绍FLV元数据(metadata)Tag的解析过程。通过解析metadata Tag,理解其结构和类型,包括Number、Boolean、String等。内容涵盖了metadata的读取方式,如从FLV文件中提取onMetaData信息,并介绍了详细解析流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://github.com/332065255/flv2fmp4

代码库


软编码Flv 到Mp4 容器(一)
软编码Flv 到Mp4 容器(二) flv tag拆解
软编码Flv 到Mp4 容器(三) flv metadata tag解析
软编码Flv 到Mp4 容器(四) fmp4 总览和基础讲解
软编码Flv 到Mp4 容器(五) fmp4 ftyp box 和moov>mvhd box详解
软编码Flv 到Mp4 容器(六) fmp4 moov>trak>tkhd box 和 moov>trak>mdia>mdhd box讲解
软编码Flv 到Mp4 容器(七) fmp4 mdia>hdlr box 和 mdia>minf> smhd 和dinf box讲解
软编码Flv 到Mp4 容器(八) fmp4 mdia>stbl>stsd box 讲解
软编码Flv 到Mp4 容器(九) fmp4 stts stsc stsz stco box 讲解
软编码Flv 到Mp4 容器(十) fmp4 mvex box 讲解
软编码Flv 到Mp4 容器(十一) fmp4 moof box详解
软编码Flv 到Mp4 容器(十二) fmp4 mdat box详解
软编码Flv 到Mp4 容器(十三) fmp4 生成ftyp和moov所必要的 flv数据


metadata的内容相对来说比较复杂
http://blog.youkuaiyun.com/zengraoli/article/details/7742278 这篇博客中讲了一部分
metadata的内容大致如下

  • Name:onMetaData
  • Value:Array数组
    • key:键
    • value:普通类型值
    • key:键
    • value:普通类型值
    • key:键
    • value:数组类型值
      • key:键
      • value:普通类型值

一般情况,只有两层数组

0 = Number
1 = Boolean
2 = String
3 = Object
4 = MovieClip (reserved, not supported)
5 = Null
6 = Undefined
7 = Reference
8 = ECMA array
9 = Object end marker
10 = Strict array
11 = Date
12 = Long string

metadata body的第一个字节,通常是0x02,所以是string类型,
第2-3个字节为长度,通常为10,后面读10个字节,转换charcode,即为onmetadata,
继续下一个字节是0x08,是数组类型,略过4个字节,这是数组长度,
下一个字节理论上也是0x02,读2个字节的字符长度,再读字符长度的uint8,就是字段名
后面的字节就是value值得类型,依次这么往下读

详细代码在flvdemux.js
代码借鉴了flv.js的代码

let le = (function() {
    let buf = new ArrayBuffer(2);
    (new DataView(buf)).setInt16(0, 256, true); // little-endian write
    return (new Int16Array(buf))[0] === 256; // platform-spec read, if equal then LE
})();
export default class flvDemux {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值