首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS在后台生成视频任务

iOS在后台生成视频任务
EN

Stack Overflow用户
提问于 2013-04-23 15:25:20
回答 1查看 1K关注 0票数 2

你将如何继续从图像中创建一个长视频?这需要相当长的时间,用户等待它会感到无聊,所以我想在后台生成电影,并在电影结束后通知用户。

我的应用程序结构是这样的,我有一个UINavigationController,其中包含一个带有模拟电影的控制器,只是一些使用CoreAnimation移动的图像。然后,我推送一个新的控制器来生成电影。在controller2中,我向controller1发送请求,要求发送带有要写入电影的帧的图像(我用CoreGraphics生成图像)。这几乎阻塞了所有的东西,因为它需要花费大量的时间并且是连续的。

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

谢谢你的点子。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-23 17:01:04

据我所知,你可以做到这一点,虽然你的应用程序将只运行有限的时间,但取决于你的视频的大小,它可以足够。事实上,我正是在我的动画创作应用idAnimate - Animating on the iPad with the touch of a finger上这样做的。据我所知,应用程序将被授予大约10分钟的时间来完成任务,这可能是足够的。如果你的应用程序需要额外的时间,你可能想看看如何优化你的视频渲染算法,降低视频质量或其他什么。

无论如何,假设你使用AVAssetWriter生成视频,下面是我如何做的一小段代码:首先,你必须进行调用以获得后台权限,并提供一个代码块来说明当你的时间结束时要做什么(后台任务到期处理程序):

代码语言:javascript
复制
UIApplication *app = [UIApplication sharedApplication];

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

在此之后,您可以开始渲染视频:

代码语言:javascript
复制
videoWriter = [[AVAssetWriter alloc] initWithURL:
               [NSURL fileURLWithPath:self.moviePath] fileType:AVFileTypeMPEG4
                                           error:&error];
NSParameterAssert(videoWriter);
...

完成后,确保让操作系统知道后台可读的任务已完成:

代码语言:javascript
复制
 [[UIApplication sharedApplication] endBackgroundTask:_backgroundRenderingID];

我希望这能帮上忙。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16163372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档