Apple Live照片文件格式

苹果将​​在iOS 9 / iPhone 6s上推出Live Photo 。 文件格式在哪里logging?

这是链接 。 否则,这里是文字:

现场照片

实时照片是iOS 9的一项新function,它允许用户使用比传统照片更丰富的环境来捕捉和重温自己喜欢的时刻。 当用户按下快门button时,相机应用程序会捕捉更多的内容以及常规照片,包括照片前后的audio和附加帧。 浏览这些照片时,用户可以与他们互动,并播放所有捕获的内容,使照片成为现实。

iOS 9.1引入了API,允许应用程序合并Live Photos的播放,并导出数据以供共享。 在Photos框架中有新的支持来从PHImageManager对象获取PHLivePhoto对象,PHImageManager对象用于表示包含Live Photo的所有数据。 您可以使用PHLivePhotoView对象(在PhotosUI框架中定义)来显示实况照片的内容。 PHLivePhotoView视图负责显示图像,处理所有用户交互,并应用视觉处理来回放内容。

您也可以使用PHAssetResource访问PHLivePhoto对象的数据以进行共享。 您可以使用PHImageManager或UIImagePickerController为用户照片库中的资产请求一个PHLivePhoto对象。 如果您有共享扩展名,则还可以使用NSItemProvider获取PHLivePhoto对象。 在共享的接收端,您可以从发件人最初导出的一组文件中重新创build一个PHLivePhoto对象。

显示实时照片的指南

请务必记住,实时照片仍然是一张照片。 如果您必须在不支持PHLivePhotoView的环境中显示Live Photo,build议您将其作为普通照片展示。

不要单独显示实况照片的额外帧和audio。 实时照片的内容以一致的方式呈现,在所有应用中使用相同的视觉处理和交互模型,这一点非常重要。

build议您通过将PHLivePhotoView类方法livePhotoBadgeImageWithOptions:PHLivePhotoBadgeOptionsOverContent提供的徽章放在照片的左上angular,将照片标识为实况照片。

请注意,当用户在照片应用中滑动浏览照片时,不会提供视觉效果。

分享实时照片的指南

实时照片的数据作为PHAssetResource对象中的一组文件导出。 将这些file upload到服务器时,必须将其保存为一个单元。 当您在接收端使用这些文件重buildPHLivePhoto时,文件将被validation; 如果文件不是来自同一个资源,则加载失败。

如果您的应用允许用户在分享照片之前对照片应用效果或调整,请务必对“实时照片”的所有帧应用相同的调整。 或者,如果您不支持调整实况照片的全部内容,请将其作为常规照片共享,并向用户显示适当的指示。

如果您的应用具有用于分享照片的用户界面,则应该让用户播放整个内容,以便他们确切知道他们正在共享的内容。select照片以在应用中分享时,用户还应该能够closures“实时照片”所以他们可以把它作为一个传统的照片。

现场照片有两个资源。 它们与资产标识符(UUID作为string)绑定在一起。

  1. 一个JPEG; 这必须具有[17 : assetIdentifier] kCGImagePropertyMakerAppleDictionary的元数据条目(17是Apple Maker的注释资产标识符键)。
  2. 使用H.264以适当的帧率(12-15fps)和大小(1080p)编码的Quicktime MOV。 这MOV必须有:
    • ["com.apple.quicktime.content.identifier" : assetIdentifier]顶级QuickTime元数据条目。 如果使用AVAsset你可以从asset.metadataForFormat(AVMetadataFormatQuickTimeMetadata)
    • 定时元数据跟踪["com.apple.quicktime.still-image-time" : 0xFF] ; 实际的静止图像时间与此元数据项目的显示时间戳相匹配。 有效载荷似乎只是一个单一的0xFF字节(aka -1),可以忽略。 如果使用AVAssetReader ,则可以使用CMSampleBufferGetOutputPresentationTimeStamp来获得这个时间。

assetIdentifier是将两个项目连接在一起的,定时元数据轨道告诉系统静止图像在电影时间轴上的位置。

在文档之外,实时照片由2个资源,一个图像和一个mov(quicktime电影文件)组成。 所以每个Live Photo都有2个“实际”文件通过Live Phototypes的包装连接起来。

实时照片实际上是两个文件。 原始的JPEG图像和全高清video。

格式的UTI是kUTTypeLivePhoto

 @available(OSX 10.12, *) public let kUTTypeLivePhoto: CFString /* * * kUTTypeLivePhoto * * Live Photo * * UTI: com.apple.live-photo * * */