FMP4与DASH的概念理解

2023-05-02 15:41:24 浏览数 (2)

缩写:

HLS:HTTP Live Streaming 

ABR:Adaptive Bit Rate

DASH:Dynamic Adaptive Streaming over HTTP

查找HLS的切片格式的时候发现有ABR/DASH/FMP4等新概念,记录下这些概念,以备后续使用!

普通MP4,fMP4,DASH的组成部分差异:

普通MP4

fMP4

DASH(MPEG-DASH)

ftyp moovmdat

moofmdatmoofmdat

Initialization SegmentMedia SegmentMedia Segment

MPEG-DASH支持TS和MP4 / ISO BMFF媒体段。HLS只支持MPEG-2 TS。DASH媒体段通常比HLS短,2至4秒比较常见。DASH不需要特定的编解码器。视频可以使用H264编码,也可以用其他编码,VP9和H265也是比较受欢迎的编码。一般而言,与HLS相比,DASH可以提供实质上更低的端对端延迟。这对于现场直播的工作流程很重要。此外, MPEG-DASH的基于模板的MPD不需要更新,可以在网络边缘服务器进行缓存,HLS则需要周期性地更新传播多次。

MP4 


MP4(MPEG-4 Part 14)是一种常见的多媒体容器格式(也可以理解为视频的封装格式,对应H264/H265/VP9等视频编码格式而言),对应的标准为ISO/IEC 14496-12,即信息技术视听对象编码的第12部分:ISO 基本媒体文件格式(Information technology Coding of audio-visual objects Part 12: ISO base media file format)。

一些概念:

track:表示一些sample的集合,对于媒体数据来说,track表示一个视频或音频序列。

hint track:这个特殊的track并不包含媒体数据,而是包含了一些将其他数据track打包成流媒体的指示信息。

sample:对于非hint track来说,video sample即为一帧视频,或一组连续视频帧,audio sample即为一段连续的压缩音频,它们统称sample。对于hint track,sample定义一个或多个流媒体包的格式。

sample table:指明sampe时序和物理布局的表。

chunk:一个track的几个sample组成的单元。

Suffixes = ".mp4", ".m4a";  Mac OS Type = "mpg4";  Mac OS Creator = "TVOD";

MIME="video/mp4" and "audio/mp4"

普通MP4 由索引文件头文件moov box和媒体数据mdat box组成,MP4基本的box为:

MP4  ->      ftyp box

                    moov box

                    mdat box

fMP4 


fMP4 是基于 MPEG-4 Part 12 的流媒体格式,RFC: ISOBMFF,与 mp4 很相似,但也有一些区别:

  1. fMP4 不需要一个 moov Box 来进行 initialization,fMP4 的 moov Box 只包含了一些 track 信息。
  2. fMP4 的 视频/音频 metadata 信息与数据都存在一个个 moof、mdat 中,它是一个流式的封装格式。

之前理解MP4文件不支持流式播放,这种理解是错误的,MP4的格式本身是支持边下载边播放的,并不需要下载完整的MP4文件,但需要长时间缓冲MP4头部数据,而fMP4区别于MP4最大的一点,则是更好的适应流式播的需求

fMP4 由分片组成,可以按整个文件存储,也可以按分片存储:

- 如果按照单个文件存储,每个输出是一个m4s文件。 完整的fMP4视频可以描述为如下形式: 

   moov (moof mdat) * N 

   其中moof box是分片(fragment)的标识, mdat box存放的是当前分片的媒体数据;

- 如果按照分片存储,每个分片是一个m4s文件,输出对应了多个m4s。

   fMP4中的第一个分片,对应了DASH协议中Initialization Segment;其后的分片,则对应Media Segment。

DASH


什么是DASH,简单理解是一种服务端、客户端的流媒体解决方案,维基百科DASH的定义:

DASH is an adaptive bitrate streaming technology where a multimedia file is partitioned into one or more segments and delivered to a client using HTTP.

当前Android的ExoPlayer支持MPEG-DASH,YouTube、Netflix、三星、索尼、松下等TV上支持MPEG-DASH。

如果使用HLS支持ABR,则限制条件很多,参考(https://blog.csdn.net/vn9PLgZvnPs1522s82g/article/details/84207032),要求每个分片的起始的IDR帧在PTS上面一定要对齐的,如果不对齐的话,不同码率切换就不是无缝切换,而DASH则很好的解决了这个问题。

DASH服务端: 

将视频内容分割为一个个分片,每个分片可以存在不同的编码形式(不同的codec、profile、分辨率、码率等); 

DASH播放器端: 

就可以根据自由选择需要播放的媒体分片,可以实现adaptive bitrate streaming技术,不同画质内容无缝切换,提供更好的播放体验。

DASH中的重要概念

MPD :媒体文件的描述文件(manifest),作用类似HLS的m3u8文件。MPD文件以XML格式组织,其层次结构参图1。

Representation :对应一个可选择的输出(alternative)。如,480p video,720p video, 44100采样 audio,22050采样audio,都使用Representation描述。

Segment(分片) :每个Representation会划分为多个Segment。Segment分为4类,其中,最重要的是:Initialization Segment(每个Representation都包含1个Init Seg),Media Segment(每个Representation的媒体内容包含若干Media Seg)!

支持fmp4封装的开源项目:

https://github.com/samsha1971/rtsp2fmp4/tree/master/rtsp2fmp4

https://github.com/ireader/media-server

MPEG-DASH 开源Library:

https://github.com/bitmovin/libdash

MPEG-DASH标准:

https://standards.iso.org/ittf/PubliclyAvailableStandards/c075485_ISO_IEC_23009-1_2019.zip

https://w3c.github.io/media-source/isobmff-byte-stream-format.html

参考:

https://github.com/liwf616/awesome-live-stream/wiki

https://www.shangmayuan.com/a/f53015d71afd4ed6b2ba63ca.html

http://xhelmboyx.tripod.com/formats/mp4-layout.txt

https://juejin.im/post/5dd119b5f265da0bf350d19b

https://segmentfault.com/a/1190000008810572

0 人点赞