点播场景Mp4文件头size分析以及各式对比

简介:

视频格式对比&mp4的moov信息分析

MP4封装中的moov信息

moov是metadata container,存放着视频的信息,mp4的结构如下:
moov.png

我们重点关注,track中的stbl信息,track可以有多个,一般是一路流一个,比如包含声音和图像,那就是两个track。
在stbl中,我们主要关注几个stss,stts,ctts,stsc,stsz,stco

  • stss,同步sample表,标识了媒体流中的关键帧,提供随机访问点,如果都是关键帧,则该项不存在
  • stts,sample时长信息,提供时间和sample的映射关系,音频track中该项和同步参数有关,async=1是该项很小
  • ctts,时间合成偏移表,如果解码顺序和显示顺序一致,则不会出现该项,不一致时会出现,一般来说B帧会影响该表,没有B帧时该表不存在。
  • stsc,sample to chunk,为了优化数据访问,多个sample会封装到一个chunk中,该项标识了封装信息,一般和时长有关,可能可以通过参数指定优化该项大小,暂时还不确定。
  • stsz,sample的大小表,和时长以及帧率有关,如果指定了默认的sample size,该项会不存在,暂时未找到如何指定
  • stco,chunk偏移量表,一般和时长以及帧率有关。

下面列举了一个视频再不同时长以及不同帧率下的moov大小信息,经过测试,发现和分辨率影响不大,部分使用了async=1,bf=0,原始视频为4.74G,150分钟,测试视频是从中截取的两段,分别为60分钟和30分钟

len
fps
帧率
sr
采样率
moov
Byte
vTrack
Byte
aTrack
Byte
vStssByte vCtts
Byte
vStsc
Byte
vStsz
Byte
vStcoByte aStts
Byte
aStsc
Byte
aStsz
Byte
aStco
Byte
3600 60 44100 6364304 4251445 2112645 3716 1533144 1241200 864028 608888 815352 67780 620180 608884
3600 60 44100 4193393 2951690 1241489 3744 X 1462996 864024 620188 272 328 620248 620192
3600 25 44100 2303285 722950 1580121 1832 X 388 360148 360084 272 599068 620248 360084
3600 25 12000 1005173 666510 338449 1832 X 134944 360148 168848 272 28 168852 168848
1800 60 44100 3183328 2125817 1057297 1888 765280 621688 432028 304464 408416 33868 310104 304460
1800 60 44100 2097745 1476126 621405 1916 X 731356 432032 310084 272 400 310200 310084
1800 25 44100 1153045 362110 790721 976 X 400 180152 180084 272 299716 310200 180084
1800 25 12000 503585 333642 169729 976 X 67288 180152 84488 272 28 84492 84488

从上表中可以看出,总体来说视频track的大小和帧的总数有关,音频和视频长度有关系,其他相关信息暂不明确。而且stco的影响因素还不太清楚,导致该项会出现较大差别,音频stco在fps=25时增大了,在不同sample_rate的情况下也会不同。

点播场景视频封装格式对比

主要对比一下几种封装格式(非编码格式),主要针对点播场景,不考虑直播场景,因为直播最主要的是时延问题。

  • mp4,一套用于音频、视频信息的压缩编码标准,由ISO和MPEG制定。广泛支持
  • flv,Adobe提出的一种流媒体格式,需要flash支持,ios不支持,http-flv支持http传输
  • hls,Apple提出的流媒体协议,http传输,支持动态自适应,广泛支持
  • dash,MPEG提出的,http传输,动态自适应,国外支持的较多。国内还在推广阶段,有的cdn已经支持dash,而且dash各大公司均有参与,比较中立。

mp4

  • 单一文件,将音视频流封装到一个文件中,方便管理和下载
  • 基本上是通用标准,几乎被所有的设备、服务端、cdn等支持
  • 拖动方便,只需要服务器支持range
  • 文件头(moov)信息随着视频长度的增加而增加,而播放器会先处理完头信息才会播放,短视频影响不大,长视频会导致开始播放前等待时间过长,影响秒开
  • 考虑到会下载文件头,比较适合短视频处理场景
  • 关于fmp4,不需要moov进行初始化,所以moov会比较小,metadata信息在每一段的moof中,有些播放器可以播放,但是有一些需要加载完全部fmp4才可以播放。可以作为hls和dash的分片。

flv

  • 封装格式简单,单一文件,不需要大的文件头
  • 加载速度极快,方便秒开
  • pc端支持度较高,app端支持不足,h5可以用js软解

hls

  • 动态自适应
  • 对视频切片,可以秒开
  • 拖动相应快
  • ts文件过多会造成服务器文件碎片化,难于管理
  • m3u8文件需要不断变更(直播,点播影响不大)
  • http请求,广泛支持

dash

  • 动态自适应
  • 对视频切片,可以秒开
  • 拖动相应快
  • 基于模板情况下mpd可以不更新,直接缓存。
  • 国外主流视频站点都支持,国内还在推广中,bilibili支持
  • 国外主流cdn支持,国内阿里云cdn和网宿支持等都支持

mp4虚拟hls技术

  • 将mp4文件映射为一个个小的ts文件,基于hls播放时,动态将ts文件记录的range从mp4中取出,拼装成真正的ts返回播放,优点是不需要下载文件头,实现秒开,同时mp4文件仍旧作为整体存在


下面就一些方面对比这几种格式:

视频格式 传输类型 文件类型 秒开 支持性 优势 劣势
mp4 一般http 单一 短视频可以 广泛支持 几乎是通用格式 长视频会造成文件头过大
hls http 分片 可以 广泛支持 码率自适应 长视频会造成ts文件过多
flv 一般http 单一 可以 flash 格式简单,加载速度快 多端兼容复杂,拖拽不够准确
dash http 分片 可以 H5支持,后续可能有更多支持 码率自适应,中立标准 国内使用不广泛,cdn支持度还不够
相关文章
|
3月前
|
存储 编解码
如何将BDMV文件转换为MKV或MP4?
许多拥有蓝光光驱的用户可能在电脑上存储了一些BDMV文件。虽然这些文件提供了高质量的视频和音频,但由于其文件格式的限制,它们可能无法在某些设备上播放。因此,将BDMV文件转换为常见的MKV或MP4文件就变得非常重要。本文将介绍一种简单而有效的方法来完成这个转换过程。
193 2
|
PHP 调度 数据安全/隐私保护
【源码解读】TP5读取本地图片输出后,设置header头无效,图片乱码
在Thinkphp程序中读取本地图片,做出加工处理(如合并二维码等水印),然后输出给客户端,一直输出图片内容乱码。 设置了header image/png 不生效。 写下这篇TP源码排查文章,看看问题到底出现在哪个步骤。
427 0
【源码解读】TP5读取本地图片输出后,设置header头无效,图片乱码
|
23天前
|
数据采集 语音技术
**source_len字段表示的是音频数据中有效语音部分的长度**。
**source_len字段表示的是音频数据中有效语音部分的长度**。
9 1
|
4月前
|
计算机视觉 索引
opencv读取MP4文件和摄像头数据
opencv读取MP4文件和摄像头数据
53 0
|
8月前
av_seek_frame实战--跳转到文件指定时间后开始推流或写入新文件
av_seek_frame实战--跳转到文件指定时间后开始推流或写入新文件
75 0
av_seek_frame实战--跳转到文件指定时间后开始推流或写入新文件
|
9月前
|
存储 编解码 算法
MP4文件格式的解析,以及MP4文件的分割算法
MP4文件格式的解析,以及MP4文件的分割算法
123 0
|
12月前
|
存储 编解码 算法
MP4格式解析
MP4视频文件封装格式是基于QuickTime容器格式定义的,因此参考QuickTime的格式定义对理解MP4文件格式很有帮助。MP4文件格式是一个十分开放的容器,几乎可以用来描述所有的媒体结构,MP4文件中的媒体描述与媒体数据是分开的,并且媒体数据的组织也很自由,不一定要按照时间顺序排列,甚至媒体数据可以直接引用其他文件。同时,MP4也支持流媒体。MP4目前被广泛用于封装h.264视频和AAC音频,是高清视频的代表。MP4格式的官方文件后缀名是“.mp4”,还有其他的以mp4为基础进行的扩展或者是缩水版本的格式,包括:M4V, 3GP, F4V等。
208 0
|
编解码 移动开发 Android开发
一文分析 mp4对比m3u8 第一帧加载慢的原因
公司要求对视频的 秒开率(1秒内成功加载的播放数 / 播放总数)、失败率 (播放失败的次数 / 播放总数) 等进行优化。经过线上AB测试发现,`m3u8视频(第一段切片为1~3秒)`在秒开率、失败率等性能指标上均优于`普通mp4视频`。这里探究一下,m3u8视频(第一段切片为1~3秒) 在秒开率上均优于 普通mp4视频 的原因。
907 0
|
计算机视觉
ffmpeg用mp4分段将hls保存到m3u8
ffmpeg用mp4分段将hls保存到m3u8 我正在寻找一个命令ffmpeg,用mp4分段文件保存实时输入(rtmp或hls)以使m3u8成为可能。我知道这是可能的,即有infohttps://bitmovin.com/hls-news-wwdc-2016/但我尝试的每个命令都会生成ts文件。
3960 0