gpt4 book ai didi

iOS/AVFoundation : Design pattern for asynch handlers when turning arrays of images into tracks and then into a single video?

转载 作者:行者123 更新时间:2023-12-01 19:09:25 28 4
gpt4 key购买 nike

您能否指出我的设计模式指南以使我的风格适应 AVFoundation 的异步方法?

工作一个应用程序,您可以在其中创建图像并将音频放置在其上的热点上。我正在实现导出到电影,该电影是在音频下播放效果(热点发光)的图像。

我可以可靠地创建视频和音频轨道,并且可以正确地将音频输入 AVMutableComposition 并进行播放。问题出在视频上。我已将其范围缩小到我为需要使用 AVFoundation 的异步编写方法的问题编写了同步解决方案。

当前的方法及其失败的地方(每个步骤都是自己的方法):

  • 创建字典数组。字典中的 2 个对象。一个字典对象是表示关键帧的图像,另一个对象是结束于该关键帧的音频 URL。第一个字典有开始关键帧但没有音频 URL。
  • 对于数组中的每个字典,将 UIImage 替换为起始图像->动画补间图像->结束状态图像的数组,并具有适当的 FPS 计数和音频持续时间。
  • 对于数组中的每个字典,将图像数组转换为无声mp4并使用[AVAssetWriter finishWritingWithCompletionHandler]保存,然后将字典中的图像数组替换为mp4的URL。 mp4 和音频 URL 的每个字典代表最终电影的片段,其中数组中字典的顺序指示最终电影的插入顺序

  • -- 以上所有作品,制作和订购正确的东西,视频和音频播放 --
  • 对于每个带有 mp4 和音频 URL 的字典,加载到 AVAssets 并插入 AVMutableComposition 轨道,一个轨道用于音频,一个轨道用于视频。音频加载和插入工作,播放。但是视频失败并且似乎失败了,因为步骤 4 在步骤 3 的 AVAssetWriter finishWritingWithCompletionHandler 完成所有 MP4 轨道之前开始。

  • 一种方法是通过 while 循环暂停并等待 AVAssetWriter 上的状态说完成。这有点违背框架。在实践中,它也会导致丑陋的,有时看似无限的等待循环结束。

    但是简单地将步骤 4 设置为 finishWritingWithCompletionHandler 的完成处理程序并非易事,因为我正在编写多个轨道,但我希望步骤 4 仅在写入最后一个轨道后启动。因为第 3 步基本上是一个 for-each 处理器,所以我认为所有完成处理程序都需要相同。我想我可以使用 bools 或 counters 来改变完成处理程序,但它感觉就像一个 kluge。

    如果上述任何一项有任何意义,有人可以给我/指出设计模式的入门知识,以进行这样的异步处理吗? TIA。

    最佳答案

    您可以use GCD dispatch groups对于那种问题。
    从文档:

    Grouping blocks allows for aggregate synchronization. Your application can submit multiple blocks and track when they all complete, even though they might run on different queues. This behavior can be helpful when progress can’t be made until all of the specified tasks are complete.



    基本思想是,您调用 dispatch_group_enter对于您的每个异步任务。在任务的完成处理程序中,您调用 dispatch_group_leave .

    调度组的工作类似于计数信号量。启动任务时增加一个计数器(使用 dipsatch_group_wait),并在任务完成时减少一个计数器。
    dispatch_group_notify允许您为您的组安装完成处理程序 block 。当计数器达到 0 时执行该 block 。

    这篇博文提供了很好的概述和完整的代码示例: http://amro.co/post/48248949039/using-gcd-to-wait-on-many-tasks

    关于iOS/AVFoundation : Design pattern for asynch handlers when turning arrays of images into tracks and then into a single video?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17561395/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com