iOS在后台任务中生成视频

标签 ios multitasking

您将如何继续从图像创建长视频?这需要很长时间,用户会厌倦等待,所以我想在后台生成电影并在完成后通知用户。

我的应用程序结构是这样的,我有一个 UINavigationController,它包含一个 Controller 和模拟电影,只有一些图像随 CoreAnimation 移动。然后我推送一个生成电影的新 Controller 。在 controller2 中,我向 controller1 发送请求,以将带有帧的图像发送给我以写入电影(我使用 CoreGraphics 生成图像)。这几乎阻塞了一切,因为它需要很多时间并且是连续的。

我阅读了有关后台任务的信息,这似乎是唯一的解决方案,但它们不会持续很长时间并且可能会在中间停止,生成 30 秒的视频大约需要 6 分钟。我也无法声明我的应用程序在后台运行,因为它不是 VoIP 或其他受支持的类型。

谢谢你的想法。

最佳答案

据我了解,您可以这样做,虽然您的应用程序只会运行有限的时间,但根据您视频的大小,它可能就足够了。事实上,我在我的动画创作应用程序上就是这么做的 idAnimate - Animating on the iPad with the touch of a finger .据我所知,该应用程序将被授予大约 10 分钟的时间来完成任务,这就足够了。如果您的应用程序需要额外的时间,您可能需要研究如何优化视频渲染算法、降低视频质量等。

无论如何,假设您使用 AVAssetWriter 生成视频,这里是我如何执行此操作的一些代码: 首先,您必须进行调用以获取后台权限,并提供一个 block ,以便在您的时间完成时执行操作(后台任务过期处理程序):

UIApplication *app = [UIApplication sharedApplication];

_backgroundRenderingID = [app beginBackgroundTaskWithExpirationHandler:^{
    [app endBackgroundTask:_backgroundRenderingID];
    _backgroundRenderingID = UIBackgroundTaskInvalid;
}];

之后你就可以开始渲染你的视频了:

videoWriter = [[AVAssetWriter alloc] initWithURL:
               [NSURL fileURLWithPath:self.moviePath] fileType:AVFileTypeMPEG4
                                           error:&error];
NSParameterAssert(videoWriter);
...

当你完成后,确保让操作系统知道你的后台任务已经完成:

 [[UIApplication sharedApplication] endBackgroundTask:_backgroundRenderingID];

希望对您有所帮助。

关于iOS在后台任务中生成视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16163372/

相关文章:

ios - "error, denied access"( swift )

ios - 等效于 iOS 3.x 中的 GCD 串行调度队列

ios - 钛iOS : tab groups images not showing

iphone - 强制应用程序关闭并在后台运行

c# - 在另一个任务中启动任务会重复我的 WebRequest

php - 异步 PHP |将数据处理到多个系统中(建议)

ios - 为什么我的应用程序因为 "Multitasking apps may only use background"而被拒绝?

iphone - iOS 4.0 中的多任务处理对开发人员有何影响?

java - 更多的多任务 java 问题

ios - 无法更改 UINavigationBar 颜色(快速)