HEVC支持苹果HLS的几个关键问题

Stella981
• 阅读 774

HEVC支持苹果HLS的几个关键问题

尽管HEVC面临了一些棘手的状况,AV1和国产AVS2连续发起攻势,苹果加入AV1背后的AOM联盟AVS2发布了开源版xAVS2......但在苹果的封闭系统内,HEVC+HLS仍然是当下最佳的音视频方案。Jan Ozer撰文对HEVC在苹果设备上支持实现进行了解读,LiveVideoStack对本文进行了摘译,点击『阅读原文』访问英文原文。

文 / Jan Ozer

译 / Ant,鸿蒙

2017年的苹果WWDC大会上,苹果宣布HEVC支持HLS,涉及了iOS、MacOS和tvOS等系统终端。但任何升级改进都是一个过程,这里整理了开发者最关心的问题。

1.哪些设备支持HEVC播放?

所有预装或升级到iOS 11的苹果终端。

2.HEVC回放耗电吗?

在之前的文章中,我们测试发现,除了一些最老的设备存在明显的耗电问题,大部分最新的产品使用HEVC回放几乎不会对电池造成影响。

3.HEVC对我有什么好处?

节省带宽:一般而言,在1080P分辨率下,HEVC相比于H.264有近50%的带宽节省,很多OTT运营商的数据也证明了这一点。你可以通过查看服务器日志文件,来了解细节。

画质体验(Quality of Experience,QoE)提升:通过下表1可以看到,基于VMAF评测指标对比,VMAF得分相差无几的情况下,HEVC的码率比H.264减少50%左右。

HEVC支持苹果HLS的几个关键问题

表1:HEVC与H.264 QoE对比

VMAF得分由6个或更多的易观察的画质差异方面(JND)组成,JND代表这75%的观众能够察觉到差异。

高动态范围(HDR):HDR能带来更接近真实世界的观看体验,HEVC支持HDR,但这还需要显示设备的支持。

4.HEVC的成本有哪些?

编码和存储成本:很显然,您必须将视频编码为HEVC格式。如果您自己进行编码,则必须计算购买和维护额外编码平台的成本(如果需要)。如果您在云端进行编码,则成本将因编码梯度数量以及分辨率和数据速率而异。在大批量的情况下,每级梯度的编码成本应该能够控制在20美元/小时以下。但您可能还会因为其他目的使用H.264格式进行编码,所以一般成本会高于上面测算的。在服务器上的存储成本也可作如上的分析。

PPV和订阅服务的使用费:如果您正在分发订阅内容或PPV视频,您可能已经在MPEG LA H.264专利池中为H.264使用付了费。HEVC有三个专利池,分别是MPEG LA、HEVC Advance和Velos Media。 详情可见图1,这是Divideon公司的Jonatan Samuelsson2017年11月在Streaming Tech Sweden演示中的图片。

HEVC支持苹果HLS的几个关键问题

图1:HEVC IP 所有者和专利池

在这三个专利池中,MPEG LA的许可条款不包括内容使用费,HEVC Advance在2018-2019年对每个用户的收费是每月0.015美元。 Velos Media尚未公布任何建议版税条款,但截至2017年11月28日,该网站的Q&A显示:“由于涉及媒体内容,我们将花时间充分了解整个生态系统的动态构成,以确保我们的模型最好地支持HEVC技术的升级和采用。“因此,涉及内容的使用费问题可能也在考虑之中了。

对于左下角那些尚未加入专利池的公司,我们不好说他们是否计划收取与内容相关的使用费。可以说,流媒体制作商还没有跳上HEVC / HLS这趟列车的其中一个可能的原因,就是与内容相关的使用费收取问题还存在很多不确定性。

播放器开发成本:如果只是在iOS和MacOS的浏览器中回放,开发成本可以降到最低。但如果开发原生的App,那么成本会增加。

5.我应该了解哪些关键文档?

你应该了解以下两个来源的文档:

6.我知道如何用H.264编码,如果用HEVC还需要知道哪些?

如果您了解H.264编码,那么您在使用HEVC时就比较得心应手了。 HEVC与之前的H.264和MPEG-2非常类似,大部分关于数据速率、关键帧间隔、比特率控制和其他常见配置选项都非常相似。与H.264一样,HEVC具有不同的配置文件,其中Main和Main 10两个是用于配置HLS的。顾名思义,Main10以8位或10位比特深度编码,而Main仅为8位。 这两种HLS都可以处理,但是要注意您生成的HDR输出主要是Main 10格式的。请注意,如果您在HLS编码方面是新手,那么您可以好好学习编写规范中关于直播和VOD流比特率控制的详细规则。

大多数编码器在复杂性和质量之间会有一些折衷。例如,x265编解码器使用与x264相同的预置(ultra fast到placebo),而MainConcept使用从1到30的多个层次。一旦你熟悉了编解码器/编码器的这些控制,就可以让其达到比较理想的状态。

7.HEVC的使用环境要求

这些要求大致分为三大类:

HEVC编码文件:HLS编写规范规定:“HEVC的Profile,Level和Tier必须小于或等于Main10的Profile,Level 5.0,High Tier。”表2显示了the Wikipedia HEVC页面 的级别和层级限制。 值得一提的是,虽然您可以以高达每秒128帧的帧速率对1080p视频进行编码,但4K分辨率却限制在30 fps或更低。 请注意,HLS编写规范禁止所有编解码器的帧频超过60 fps。

HEVC支持苹果HLS的几个关键问题

表2:HEVC编码的级别和层级限制

编写规范中另一个值得注意的要求是“HEVC视频的容器格式必须是fMP4”,或者是分段的MP4文件,这意味着MPEG-2传输流不再使用了。这应该能够简化将未加密的HEVC编码视频传递到DASH和HLS客户端,因为两者都能够部署相同的比特流。从短期来看,PlayReady和FairPlay加密方案之间的差异可能会妨碍加密的fMP4内容与DASH和HLS端点的互操作性,尽管微软已经承诺在2018年PlayStation 4.0发布时解决这个硬件设备兼容性的问题。

HLS编写规范包含两个比特率梯度,一个用于视频文件,另一个用于拖放和扫描的特技播放(trick play)文件。视频比特率梯度如图4所示。请注意,建议的比特率梯度表明2K和4K分辨率视频的帧速率与源视频相同,也与所有其他即使低至540p分辨率的视频的帧速率相同。

但是,如果您使用的是60 fps 4K的视频源,则前面提到的Level 5规则会将其限制在30 fps,如表2所示。不幸的是,苹果公司没有发布任何带有2K / 4K视频的HLS示例,这些示例可能会解决这种表面上的不一致性。在真正得到解决之前,我推荐使用保守路线,将2K和4K HEVC视频限制在30 fps。

H.264编码文件:如上所述,编写规范要求一些视频应该用H.264编码,但没提供进一步的指导。所以我们看了一下苹果公司开发者网站上的混合HEVC / H.264梯度,看到苹果公司为HEVC和HLS提供了完全独立的编码梯度(每个梯度都有9个梯级,正如表3所规定的那样),两种格式中支持的最高分辨率都是1080p。通过查看主M3U8 manifest清单文件,我们发现,播放器首先选择编解码器,然后选择适当的梯级(请注意Apple播放列表对梯级(rungs)的称呼是“齿轮”(gear))。

HEVC支持苹果HLS的几个关键问题

表3:苹果公司建议的H.264,HEVC和HDR的编码梯度

有趣的是,在苹果公司发布其示例之前,对于HEVC / H.264梯度的最优构成有多种理论,包括一个为H.264提供较低质量梯级(rungs)的梯度,以及用于较高分辨率梯级的HEVC。在本次会议上,RealEyes的几位与会者和两位提供商表示,任何基于软件的播放器都很难在H.264和HEVC播放之间顺畅地切换,这更倾向于支持苹果的方法。显而易见的缺点是,它会使编码成本加倍,并大幅增加存储成本。

在其他成熟方法推出之前,我建议还是采用苹果公司的方法。同时,建议下载Master M3U8文件,研究其中的编码和演示细节。

支持I-Frame / Trick Play:苹果公司在iOS 5中添加了对视频在播放窗口或者作为缩略图时快进和快退形式的特技播放(Trick Play)的支持,并在Apple Technical Note TN2288中详细说明如何创建I-frame播放列表以支持此功能。在TN2288中,苹果公司表示:“您不需要自己来开发内容支持快进和快退播放。你需要做的就是指定I-frame的位置就可以了。 I-frame或者叫Intra-frame,都是编码不依赖于任何其他帧的已编码视频帧。要指定I-frames的位置,iOS 5引入了一个新的I-frame播放列表。“根据TN2288,您不需要为支持特技播放创建单独的编码文件,只需在现有的内容文件找到指向I-frame的播放列表即可。

在HLS编写规范中,苹果公司修改了这一建议,指出:“你应该每秒钟有一帧”密集“的I-frame格式。这些是只包含I-frame的专用格式。或者您可以使用普通内容中的I-frame,但特技播放性能会随着I-frame密度的提高而提高。

该规范还指出:“如果您为常规视频提供相同空间分辨率的多个比特率,那么您应该从该组中用于最低比特率的相同的视频源创建该分辨率的I-frame播放列表”。苹果公司提供了表4所示的建议编码梯度。如您所期望的那样,苹果公司的样本演示实现了这些提议,在所有建议的分辨率下都为H.264和HEVC提供单独的I-frame编码文件。

HEVC支持苹果HLS的几个关键问题

表4:HLS编写规范建议的特技播放编码梯度

根据我的统计,在H.264和HEVC内容和I-frame-only文件之间,苹果公司将源视频编码为28个单独的文件,这可能会压缩一些制作商的预算。对于4K制作商尤其如此。苹果公司的梯度不包括2K / 4K的迭代,因为它们编码成本最高,并且还要将总编码需求扩大到31个文件,甚至HDR可能还需要17个。

在会议期间,这些要求引起了与会者的重视和讨论,这里面包括许多多年来一直从事制作HLS演示文稿的参会者。大多数人表示,他们只提供了一到两个特技播放文件,很少是包含所有分辨率的,并且大多数指向现有文件中的I-frame,而不是编码单独的I-frame-only文件。生产商将不得不做出自己的成本/收益分析来决定最佳的方案。

8.我应该严格遵守苹果的建议参数吗?

有时候,在编写规范的最后一到两次修订的版本中,苹果公司会针对per-title编码实现指出“上述比特率是通过HLS交付的典型内容的初始编码目标。我们建议您根据您的具体内容和编码工作流程对其进行评估,然后进行相应的调整。“因此,苹果公司并没有规定固定的编码梯度。

除了数据速率之外,如果你研究苹果公司的梯度,你会注意到,对于2K以下的所有梯级,HEVC和H.264的分辨率基本相同。在会前会议上,一位技术精湛的与会者表示,对于HEVC,苹果公司的梯度应该有完全不同的梯级,以解决高分辨率视频需要更高效编解码器的问题。一篇题为“苹果公司错了:HLS中的HEVC编码规范”的文章对此作出了分析。

长话短说,文章提出HEVC的最佳梯度会去掉几个较低分辨率的梯级,并迫使较高分辨率梯级降低位置。表5左边显示了苹果公司建议的梯度,右边是一个更为优化的梯度(为动画电影“Sintel”定制),VMAF评分则评估两种选择的质量。如果您的目的是获得最佳的体验质量(QoE),那么使用Should Be梯度会比苹果公司指定的Was梯度获得更好的效果。

HEVC支持苹果HLS的几个关键问题

表5:左边是苹果公司的HEVC编码梯度,右边是推荐的编码梯度

9.我的直播选项是什么?

直播虽然刚刚起步,但正在迅速推出,演示材料列出了Bitmovin,Elemental,Harmonic和Hybrik的编码器,以及Wowza和Nimble Streamer的转码解决方案。 对于开发人员级别的制作者,MulticoreWare、MainConcept和Beamr都有SDK,并且讲义详细介绍了如何使用FFmpeg和Bento4产生视频输出。

10.编写规范怎么看待高动态范围(HDR)?

编写规范指出,HDR视频必须编码为HDR10或DolbyVision,HDR编码流应提供所有分辨率。如果您提供HDR内容,您还应该为主视频文件和特技播放文件以及H.264内容提供SDR内容,从而将视频流的单个文件数量提升至数十个之多。

请注意,苹果公司还没有提供一个带有HDR的示例文件,留下了一些没有回答的问题,比如所需的H.264内容是否也可以用作SDR内容,或者制作者是否也应该提供单独的HEVC编码的SDR流(和特技播放文件)。我猜测苹果公司总是会通过提供最广泛(和昂贵的)的方法来满足编写规范中规定的要求,让开发者根据成本和所需的体验质量选择他们自己的配置。

HEVC在HLS中虽然还是前期,但相关的话题和技术将快速展开。希望这些问题和回答能帮助你快速上手。

WebRTCon 2018 7折火热报名

WebRTCon希望与行业专家一同分享、探讨当下技术热点、行业最佳应用实践。如果你拥有音视频领域独当一面的能力,欢迎申请成为讲师,分享你的实践和洞察,请联系 speaker@livevideostack.com

点击阅读原文了解大会详情。

HEVC支持苹果HLS的几个关键问题

本文分享自微信公众号 - LiveVideoStack(livevideostack)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
ES6 新增的数组的方法
给定一个数组letlist\//wu:武力zhi:智力{id:1,name:'张飞',wu:97,zhi:10},{id:2,name:'诸葛亮',wu:55,zhi:99},{id:3,name:'赵云',wu:97,zhi:66},{id:4,na
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这