自适应流媒体传输(二)——为什么要使用fragmented MP4

原创 2016年12月02日 21:41:39

在DASH(自适应流媒体传输)中推荐使用的是fragmented Mp4(fMp4)格式,那么这种格式和传统的mp4格式有什么区别呢?

先说结论:在fMp4格式中包含一系列的segments(moof+mdat的组合),这些segments可以被独立的request(利用byte-range request),这有利于在不同质量级别的码流之间做码率切换操作

介绍一个可以输出mp4 box信息的工具:MP4dump 下面我们分别dump出一个regular mp4和一个fmp4的box信息,化简如下

regular mp4

[ftyp] size=8+16
[moov] size=8+9149
[mdat] size=8+17923439```

如果我们要在两个码流之间做码率切换,就需要找到两个码流中对应时间点的byte position,然而这时候我们只有一个巨大的mdat box,要在这里面找到一个具体的byte position无疑是复杂的。而且,在regular mp4中,有时moov会在巨大的mdat box之后,这也会影响起播的速度。

fmp4

[ftyp] size=8+28
[moov] size=8+790
[sidx] size=12+368
[moof] size=8+1304
[mdat] size=8+2447381
[moof] size=8+132
[mdat] size=8+164418
[moof] size=8+1304
[mdat] size=8+2612620
[moof] size=8+132
[mdat] size=8+124621```

但是在fmp4中就简单多了,首先我们注意到有一个sidx(segment index) box,它记录了各个moof+mdat组成的segment的精确byte position,所以我们只需要Load一个很小的sidx box就能方便的实现码率切换了。sidx box的具体内容如下,size对应各个segment的大小,duration对应时长。

entry 0000 = reference_type=0, referenced_size=388331, subsegment_duration=147456, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0
 entry 0001 = reference_type=0, referenced_size=1135797, subsegment_duration=147456, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0
 entry 0002 = reference_type=0, referenced_size=1266343, subsegment_duration=147456, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0
 entry 0003 = reference_type=0, referenced_size=1160677, subsegment_duration=147456, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0
 entry 0004 = reference_type=0, referenced_size=1180917, subsegment_duration=147456, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0
 entry 0005 = reference_type=0, referenced_size=842092, subsegment_duration=147456, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0
 entry 0006 = reference_type=0, referenced_size=1160963, subsegment_duration=147456, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0
 entry 0007 = reference_type=0, referenced_size=1203216, subsegment_duration=147456, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0
 entry 0008 = reference_type=0, referenced_size=1234885, subsegment_duration=147456, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0
 entry 0009 = reference_type=0, referenced_size=1166036, subsegment_duration=147456, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0
 entry 0010 = reference_type=0, referenced_size=1237774, subsegment_duration=147456, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0
 entry 0011 = reference_type=0, referenced_size=1162960, subsegment_duration=147456, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0
 entry 0012 = reference_type=0, referenced_size=1235166, subsegment_duration=147456, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0
......
 entry 0051 = reference_type=0, referenced_size=1195136, subsegment_duration=147456, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0
 entry 0052 = reference_type=0, referenced_size=1178021, subsegment_duration=147456, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0
 entry 0053 = reference_type=0, referenced_size=1222620, subsegment_duration=147456, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0
 entry 0054 = reference_type=0, referenced_size=1197275, subsegment_duration=147456, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0
 entry 0055 = reference_type=0, referenced_size=1161201, subsegment_duration=147456, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0
 entry 0056 = reference_type=0, referenced_size=1239388, subsegment_duration=147456, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0
 entry 0057 = reference_type=0, referenced_size=1186850, subsegment_duration=147456, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0
 entry 0058 = reference_type=0, referenced_size=1012514, subsegment_duration=147456, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0
 entry 0059 = reference_type=0, referenced_size=1110407, subsegment_duration=147456, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0
 entry 0060 = reference_type=0, referenced_size=1055466, subsegment_duration=147456, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0
 entry 0061 = reference_type=0, referenced_size=7954, subsegment_duration=24576, starts_with_SAP=1, SAP_type=1, SAP_delta_time=0

不仅如此,在fmp4中各个segment的duration是可以由我们自己指定的,从而可以保证不同码流的各个segment是time aligned且一定start with关键帧。

最后介绍一个工具Mp4Fragment,可以将regular MP4转换为fmp4.

各位看官,如果您觉得本人的博客对您有所帮助,可以扫描如下二维码进行打赏,打赏多少您随意
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nonmarking/article/details/53439481

classpath详解

设置类路径结构可通过对 JDK 工具使用 -classpath 选项(首选方法)或设置 CLASSPATH 环境变量来设置类路径。     C:> jdkTool -classpath path1;p...
  • wxyxl
  • wxyxl
  • 2001-05-15 15:11:00
  • 1558

Fragmented MP4文件格式

转自:http://blog.csdn.net/zhuweigangzwg/article/details/17222951   一、基本概念 1.mp4概述 MP4文件中的所有数据都装在b...
  • haima1998
  • haima1998
  • 2015-12-19 20:59:53
  • 1891

Fragmented MP4方案的优势

以下仅为转载,不代表完全同意文中观点。 Fragmented MP4简称fMP4。与MPEG2TS相比,Fragmented MP4文件有六个关键的优势: (1)内容与Meta...
  • charleslei
  • charleslei
  • 2016-04-06 18:49:25
  • 3035

mp4文件格式之fragment mp4

本文介绍的一种mp4文件格式称之谓fragmented mp4,有简称为FMP4,也有称之为ismv文件的。其文件格式与通常大家见到的mp4文件不同。下面通过两张图片来对比一下。        ...
  • charleslei
  • charleslei
  • 2015-04-09 22:28:56
  • 1008

ffmpeg 转换x264到Fragmented MP4

ffmpeg -re -i d:\test.264 -g 52 -acodec libvo_aacenc -ab 64k -vcodec libx264 -vb 448k -f mp4 -movfla...
  • lilihli
  • lilihli
  • 2017-02-15 12:33:53
  • 1064

mp4文件格式解析

目前网络上对mp4文件格式的总结已经相当多了,我就不在这里抄别人总结的东西了,想入门的话百度一下会有许多这方面的文章。这里介绍一下其他文章中很少涉及的一种mp4文件结构,即fragment mp4,也...
  • coloriy
  • coloriy
  • 2015-07-28 15:37:19
  • 3226

MP4(一)-结构

本文转载自网络,不过没找到原文在哪,感谢写这篇博文的哥们   一、基本概念 1.mp4概述 MP4文件中的所有数据都装在box(QuickTime中为atom)中,也就是说MP4文件由若干个b...
  • zhuweigangzwg
  • zhuweigangzwg
  • 2013-12-09 14:47:11
  • 12328

自适应流媒体传输(三)——和TS格式说再见

如果你读过MPEG-DASH(23009 - Dynamic Adaptive Streaming over HTTP)的spec,一定能感觉到整个标准对fMP4这种格式的强烈倾向性。HLS倒是一直喜...
  • nonmarking
  • nonmarking
  • 2017-01-18 20:36:06
  • 2487

MPEG DASH简析

MPEG DASH作为三大流媒体协议之一,诞生的目的是为了统一标准,因此是兼容SmoothStreaming和HLS的,然而协议内容较多,相对复杂,从各自协议的页数对比就能看出。   MP...
  • weiyuefei
  • weiyuefei
  • 2017-01-13 16:07:42
  • 622

fmp4视频文件及分析工具

  • 2017年08月18日 17:23
  • 42.52MB
  • 下载
收藏助手
不良信息举报
您举报文章:自适应流媒体传输(二)——为什么要使用fragmented MP4
举报原因:
原因补充:

(最多只允许输入30个字)