在iOS中捕获视频时,将数据存储在视频帧中

时间:2016-10-19 01:31:17

标签: ios objective-c avfoundation

如何在捕获视频的同时以每秒视频帧的形式存储时间或纬度等数据,并从iOS中保存的视频中检索此数据?

1 个答案:

答案 0 :(得分:2)

大多数视频格式都包含视频元数据,用于描述资产级别的整个视频。使用AVAssetWriter时,可以在写入之前添加MetaData项目以将其与输出文件相关联。 https://developer.apple.com/reference/avfoundation/avassetwriter#//apple_ref/occ/instp/AVAssetWriter/metadata

如果您愿意,可以使用常用键(https://developer.apple.com/reference/avfoundation/1668870-av_foundation_metadata_key_const/1669056-common_metadata_keys)来存储信息。

请注意,这只是在文件级别,而不是每帧。

如果您希望以“每秒帧数”类型时间参考存储信息,那么您可以构建自定义解决方案,与AVFoundation Recording locations in time domain with AVFoundation“已售出”的缓冲区进行交互。然后可以编写自己的自定义存储对于与视频文件同步的信息,您需要将其读回并自行处理。

我不相信有一种方法可以在实际视频文件中封装“每帧位置信息”(你可以做一个黑客并重新调整字幕AVAssetTrack并写入信息,然后将其拉出但不显示它 - 当在其他设备上播放视频时,这将是不可预测的。)

附加信息

在我写这篇文章一年后的评论之后,我做了一些调查。虽然您可以像建议的那样使用和滥用字幕轨道,但更好的解决方案是使用专门用于此的AVAsset元数据类型。 https://developer.apple.com/documentation/avfoundation/avmediatype/1390709-subtitle

有许多不同的AVAssetTrack类型,可让您将数据计时到视频中的某个点,包括

  • 音频
  • closedCaption
  • depthData(编辑时的BETA)
  • metaData< - 这可能是你想要的
  • metaDataObject< - 与此相结合
  • 多工
  • 文本
  • 时间码
  • 视频