软编码Flv 到Mp4 容器(十三) fmp4 生成ftyp和moov所必要的 flv数据

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数据


本章分两部分来说ftyp和moov


首先来说ftyp
ftyp不需要任何flv的数据,只要按照第五章所写的就可以了


moov box

moov box有很多固定的16进制数据,但是大部分还是需要flv数据来进行支持,下面列表列出了moov box中,需要额外数据的box

- mvhd box 需要刻度值,时长
- tkhd box 需要 trackId ,时长,宽度,高度
- mdhd box 需要时间刻度值,时长
- stsd box
    - soun box 需要channelCount,sampleRate,config
    - vide box 需要宽度,高度,avcc
- trex box 需要trackId

由上表可见,我们不仅需要flv metadata tag中的,时长,宽高,是否有音视频等,还需要一些视频tag和音频tag方面的数据,所以说,moov box的生成,需要flv metadata tag+(video tag or audio tag).
有视频的页面,用video tag,单音频的页面用audio tag

首先,我们先来看解析完flv metadata tag后,所持有的数据列表
软编码Flv 到Mp4 容器(十三) fmp4 生成ftyp和moov所必要的 flv数据_第1张图片

由此我们可见,拿到的数据只是一部分

再来看flv.js运行起来的输出
软编码Flv 到Mp4 容器(十三) fmp4 生成ftyp和moov所必要的 flv数据_第2张图片

stsd box 下,有soun box ,有 vide box,正常的fmp4文件(通过ffmpeg 转码的),moov中有两个trak box,一个包含soun box,一个包含vide box, flv.js将一个flv数据,转出了2份fmp4文件,每份fmp4中moov只含有一个trak box,一份只有视频,一份只有音频,MediaSource开启了两个sourcebuffer,所以产生出上图的两次Initialization Segment.

我们也可以只转出一个fmp4文件,只要moov中含有2个trak box就可以了,转出一个fmp4文件时候,需要等待第一个metadata tag,video tag, audio tag加载完毕,才能进行moov封装

软编码Flv 到Mp4 容器(十三) fmp4 生成ftyp和moov所必要的 flv数据_第3张图片

这是本系列博客对应的github 代码库,生成出来的mp4文件的moov box,可以对应软编码Flv 到Mp4 容器(四) fmp4 总览和基础讲解的box列表进行参照

你可能感兴趣的:(视频编码,fmp4,es6,前端)