sev*_*low 6 video core-animation objective-c avfoundation ios
我有一个问题,同步的外部内容CALayer与AVPlayer高精度.
我的第一个想法是在a中布置一个帧数组(等于视频中的帧数)CAKeyframeAnimation并与之同步AVSynchronizedLayer.然而,在逐帧逐步浏览视频时,看起来AVPlayer核心动画会在不同周期重绘,因为它们在同步之前会有轻微(但明显)的延迟.
没有通过核心视频处理和显示,有没有办法准确地与AVPlayer帧级别同步?
更新:2012年2月5日
到目前为止,我发现这样做的最好方法是预渲染通过AVAssetExportSession耦合AVVideoCompositionCoreAnimationTool和a CAKeyFrameAnimation.
然而,我仍然对学习任何实时方法感兴趣.
“高精度”是什么意思?
尽管文档声称 anAVAssetReader不是为实时使用而设计的,但实际上我使用它实时阅读视频没有任何问题(参见/sf/answers/295131301/)。返回的帧带有“演示时间戳”,您可以使用 来获取它CMSampleBufferGetPresentationTimeStamp。
您会希望项目的一部分成为此处的“主”计时员。假设您的CALayer动画计算速度很快并且不涉及磁盘访问等潜在的块状事物,我会使用它作为主时间源。当您需要绘制内容时(例如,在子类draw的选择器中UIView),您应该currentTime从CALayer动画中读取内容,如有必要,使用until returns >=继续AVAssetReader遍历 的视频帧,绘制帧,然后在 CALayer 上绘制 CALayer 动画内容顶部。copyNextSampleBufferCMSampleBufferGetPresentationTimeStampcurrentTime
| 归档时间: |
|
| 查看次数: |
2417 次 |
| 最近记录: |