前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >容器格式的乐趣 第二章:MP4与CMAF

容器格式的乐趣 第二章:MP4与CMAF

作者头像
用户1324186
发布2019-07-31 16:01:40
3.1K0
发布2019-07-31 16:01:40
举报
文章被收录于专栏:媒矿工厂媒矿工厂

本文为媒矿工厂编译的技术文章

原标题:Fun with Container Formats – Part 2

作者:Armin Trattnig

翻译整理:陈晋进

MP4 标准概述

MPEG-4 Part 14(MP4)是最常用的容器格式之一,通常文件以.mp4结尾。它不仅能用于HTTP上的动态自适应流传输(DASH),还能用于Apple提出的的HLS流传输。MP4基于QuickTime文件格式标准下的ISO基础媒体文件格式(MPEG-4 Part 12)。MPEG代表Moving Pictures Experts Group,是国际标准化组织(ISO)和国际电工委员会(IEC)合作建立的组织。MPEG的设立是为了规范音频和视频压缩和传输的标准。MPEG-4则指的是对视频的编码。MP4支持多种编解码器。最常用的视频编解码器是H.264和HEVC。AAC是最常用的音频编解码器。AAC是著名的MP3音频编解码器的后继者。

图1 MP4

ISO基础媒体文件格式

ISO Base Media File Format(ISOBMFF,ISO基础媒体文件格式,MPEG-4第12部分)是MP4容器格式的基础。ISOBMFF是定义基于时间的多媒体文件的标准。基于时间的多媒体通常指音频和视频,通常以稳定的流形式传输。它设计灵活,易于扩展,使得多媒体数据便于互换,管理,编辑以及呈现。ISOBMFF的基本组件是box,也称为atom。该标准通过使用类和面向对象的方法来定义box。通过继承的方式,所有的box都扩展了最基类的box,通过添加新的类属性能够使每个box具体用于某个目的。

对基类的介绍以FileTypeBox作为示例:

图2 FileTypeBox

FileTypeBox用于标识ISOBMFF文件的用途和用法,通常位于文件的开头。一个box也可以有子box,从而形成一个box的树框架。例如,MovieBox(moov)可以有多个TrackBox(trak)。ISOBMFF环境中的轨道(track)是单个媒体流。例如,MovieBox包含用于视频的TrackBox和用于音频的一个box。 二进制编解码器数据可以存储在媒体数据盒(mdat)中。轨道通常引用其二进制编解码器数据。

Fragmented MP4(fMP4)

使用MP4还可以将电影分成多个片段。其优点在于,当使用DASH或HLS进行流传输时,播放器软件仅需要下载观看者想要观看的片段。碎片化的MP4文件通常由MovieBox和TrackBox组成,用于指示可用的媒体流。Movie extend box(mvex)用于指示电影在片段中是否继续播放。另一个优点在于,片段可以存储在不同的文件中。每个视频片段都包括一个moof,其与Movie box(moov)非常相似,包含单个片段中包含的媒体流的信息。例如,它包含10秒视频的时间戳信息,这些信息存储在片段中,每个片段都有自己的媒体数据(MediaData,mdat) box。

代码语言:javascript
复制

调试(f)MP4文件

调试过程中,通常需要查看(f)MP4文件的box(atom)来发现box的错误以及不需要的配置。可以使用如下的工具获得媒体文件所包含的内容,:

  • MediaInfo(https://mediaarea.net/en/MediaInfo/Download)
  • ffprobe,它是ffmpeg二进制文件的一部分(https://ffbinaries.com/downloads)

然而,这些工具不会显示(f)MP4文件的box的结构。若要显示,可以借助以下工具完成:

  • Boxdumper(https://github.com/l-smash/l-smash)
  • IsoViewer(https://github.com/sannies/isoviewer)
  • MP4Box.js(http://download.tsi.telecom-paristech.fr/gpac/mp4box.js/filereader.html)
  • Mp4dump(https://www.bento4.com/)

图3 查看MP4文件的box

MPEG-CMAF

由于某些平台仅支持某些容器格式,内容分发者想要为所有的平台提供服务是具有挑战性的。为了分发某一部分内容,可能需要以不同的容器格式(例如MPEG-TS和fMP4)生成和提供内容的副本。这不仅会增加内容创建的基础架构的额外成本以及托管相同内容的多个副本的存储成本,还会使CDN缓存效率降低。MPEG-CMAF旨在解决这些问题。CMAF不通过创建另一种容器格式,而是通过融合为OTT媒体分发的现有容器格式为一体。CMAF与fMP4密切相关,因而从fMP4到CMAF的过渡代价非常小。此外,Apple公司也参与CMAF的开发,使得苹果设备上不得不对MPEG-TS格式转复用的步骤成为了历史,CMAF将取代其为苹果设备服务。

在MPEG-CMAF中,使用MPEG-CENC(通用加密),DRM(数字版权管理)解决方案使得其互操作性也得到了改进。从理论上来说,可以对内容进行一次加密,并将其与所有不同的最先进的DRM系统一起使用。但是,如今仍没有标准化的加密方案,况且仍有竞争对手,例如Widevine和PlayReady——而这些系统并不相互兼容,但DRM行业也逐步转向一种通用加密格式。

Chunked CMAF

MPEG-CMAF的一个特点是可以在所谓的CMAF块中编码段。这种分块编码的方式,结合使用HTTP分块传输编码传递媒体文件的方法,降低了实时流传输中的延迟。

图4 分块CMAF

在传统的fMP4中,视频片段必须整个完全下载之后才可以播放。使用分块编码,视频片段中任何完全加载的块都可以被分别解码并播放,未完全加载的剩余部分则依然继续被加载。这使得实时等待时间不再取决于片段的总时间,因为即使是不完整的一个视频片段的片段,也可以在客户端被分段加载和播放。

总结

本文翻译自Bitmovin博客上的《Fun with container formats》系列博文的第二篇,这个系列总共有三篇,分析四种最常见的容器格式及其重要性。这篇介绍了MP4与CMAF这两种容器格式。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 媒矿工厂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档