你将如何继续从图像中创建一个长视频?这需要相当长的时间,用户等待它会感到无聊,所以我想在后台生成电影,并在电影结束后通知用户。
我的应用程序结构是这样的,我有一个UINavigationController,其中包含一个带有模拟电影的控制器,只是一些使用CoreAnimation移动的图像。然后,我推送一个新的控制器来生成电影。在controller2中,我向controller1发送请求,要求发送带有要写入电影的帧的图像(我用CoreGraphics生成图像)。这几乎阻塞了所有的东西,因为它需要花费大量的时间并且是连续的。
我读到了后台任务,似乎是唯一的解决方案,但它们不会持续很长时间,可能会在中间停止,生成30秒的视频大约需要6分钟。我也不能声明我的应用程序在后台运行,因为它不是VoIP或其他支持的类型。
谢谢你的点子。
发布于 2013-04-23 17:01:04
据我所知,你可以做到这一点,虽然你的应用程序将只运行有限的时间,但取决于你的视频的大小,它可以足够。事实上,我正是在我的动画创作应用idAnimate - Animating on the iPad with the touch of a finger上这样做的。据我所知,应用程序将被授予大约10分钟的时间来完成任务,这可能是足够的。如果你的应用程序需要额外的时间,你可能想看看如何优化你的视频渲染算法,降低视频质量或其他什么。
无论如何,假设你使用AVAssetWriter生成视频,下面是我如何做的一小段代码:首先,你必须进行调用以获得后台权限,并提供一个代码块来说明当你的时间结束时要做什么(后台任务到期处理程序):
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];我希望这能帮上忙。
https://stackoverflow.com/questions/16163372
复制相似问题