HEIF
HEIF是什么?
HEIF format & features?
HEIF优缺点,商业价值?
Nokia HEIF?
Android P对HEIF的支持情况?
IOS对HEIF的支持情况?
兼容性问题?
HEIF是什么?
HEIF是一个新的图片格式
不同于jpeg的是,heif是容器和编码分开的,编码可以是hevc,h264,vpx等(解码一样),由于容器和编码分开的设计,heif里可以放很多信息,包括多张图片,音频,文本等
它定义了封装格式,编码格式,以及图像的展示方式,甚至涉及到与用户如何交互
所以一套完整的 HEIF解决方案,一定是平台相关的,不只包含了拆包封包,还包括了编解码,展示,这些都需要与平台的接口整合
HEIF format & features?
Format:
compatible with the ISO Base Media File Format (ISOBMFF, ISO/IEC 14496-12)
Features:
Storage of burst photos.
Support for simultaneous capture of video and still images, i.e. storing still images and timed image sequences into the same file.
Efficient representation of animations and cinemagraphs.
Storage of focal and exposure stacks into the same container file.
Storage of images derived from other images of the file, either as derived images represented by non-destructive image editing operations or as pre-computed derived images.
Support for storing other media, such as audio and timed text, into the same container file with timed image sequences and synchronizing their playback.
HEIF优缺点,商业价值?
优点:
压缩比高,在相同的图片质量情况下,平比 JPEG 高两倍
能增加如图片深度信息,透明通道等辅助图片。(苹果正是通过这个就能实现动态的调整图片的景深)
支持存放多张图片,类似相册和集合。(实现多重曝光的效果)
支持多张图片实现 GIF 和 livePhoto 的动画效果
无类似 JPEG 的最大像素限制
支持缩略图
支持透明像素
分块加载机制
缺点:
应用不广泛,兼容性不好,平台应用都要支持适配,产业链条长
主要图片格式对比
Nokia HEIF?
Nokia的实现只有read/writer,相当于协议的拆包封包,其他都没有
它不是一个完整的解决方案
在Android上实现这个解决方案需要较大投入,两种实现方式都要较大投入:
1.嵌入android框架
2.独立SDK
Demo?
便于理解HEIF和Nokia API
实现了一个Demo,有些类型的显示方式需要投入较大精力比如grid,overlay实现不完全但是可以展示图片,static,sequences都是正常展示的
Demo最终实现设想?SDK方式
Android P对HEIF的支持情况?
Android P只支持静态的显示HEIF,无论什么类型的HEIF
对HEIF的解析是OK的,不论什么类型都可以解析出
只能封装静态的HEIF
由于HEIF的编解码器以hevc,avc,aac为主所以decode和encode一般都是支持的
支持HEIF扫描
有几个关心的问题:
HEIF的显示,ImageDecoder/BitmapFactory + ImageView
HEIF转Jpeg,BItmapFactory
YUV,Surface,Jpeg转HEIF,androidx.heifwriter.HeifWriter
在这里HEIF的主要价值是高压缩率,其他带来的价值没有得到体现,或者只是google试水
IOS对HEIF的支持情况?
支持静态heif的展示,不支持sequence,其他格式都是静态展示
从测试情况看不支持解析sequence类型
所以也不支持sequence类型的扫描
屏幕快照 2018-08-14 下午2.25.08
兼容性问题?
由于HEIF的使用还不像jpeg那么广泛,所以在用户使用环境中会有兼容的问题
比如我的手机支持HEIF,但是你的手机或电脑不支持,或者我想分享到朋友圈,微信不支持等等
苹果最先实现了HEIF商业化,它的一些做法可以借鉴:
1.分享的时候比如朋友圈,email等,把HEIF转成Jpeg
2.设备之间共享或多屏互动的时候,会查询对方是否支持HEIF,不支持的情况下转换成Jpeg
平台支持,应用适配需要一个过程
HEIF转Jpeg效率问题?
在Android P pixel XL上用bitmapfactory的方式试了下,resolution 1440x960 quality 100, 耗时在200ms左右,不同的机型CPU等效果是不一样的这个后边再次统计下,现在市面上Android P的手机太少
专利 专利 专利
之前介绍了heif format是跟mpeg4-12兼容的,那mpeg4parser是可以解析heif的大部分情况的
通过mpeg4 extractor或者mp4parser是不是可以避免专利方面的问题呢,暂时不清楚,可能会部分避开,但是heif定义的展示方式可能避不开,也许是google只实现了静态展示和封装的原因,纯属猜测。
Android P
上一节提到heif format是跟mpeg4-12兼容的
Android通过mediaextractor/mpeg4extractor/mediamux/mediacodec来解析解码和编码封装heif
Android8.0实际上就已经有代码加入了