iOS 在后台任务中生成视频
<p><p>您将如何继续从图像创建长视频?这需要很长时间,用户会厌倦等待它,所以我正在考虑在后台生成电影并在完成后通知用户。</p>
<p>我的应用程序结构是这样的,我有一个 UINavigationController,它拥有一个带有模拟电影的 Controller ,只是一些随着 CoreAnimation 移动的图像。然后我推送一个生成电影的新 Controller 。在 Controller2 中,我向 Controller1 发送请求,向我发送带有要在电影上写入的帧的图像(我使用 CoreGraphics 生成图像)。这几乎阻塞了一切,因为它需要很多时间并且是连续的。</p>
<p>我阅读了有关后台任务的信息,似乎是唯一的解决方案,但它们不会持续很长时间,并且可能会在中间停止,生成 30 秒的视频大约需要 6 分钟。我也无法将我的应用声明为在后台运行,因为它不是 VoIP 或其他受支持的类型。</p>
<p>感谢您的想法。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>据我了解,您可以这样做,虽然您的应用程序只会运行有限的时间,但根据您的视频大小,这可能就足够了。事实上,我在我的动画创作应用程序 <a href="http://www.idanimate.net" rel="noreferrer noopener nofollow">idAnimate - Animating on the iPad with the touch of a finger</a> 上正是这样做的。 .据我所知,该应用程序将获得大约 10 分钟的时间来完成任务,这已经足够了。如果您的应用程序需要额外的时间,您可能想研究如何优化您的视频渲染算法、降低视频质量等。 </p>
<p>无论如何,假设您使用 AVAssetWriter 生成视频,这是我如何执行此操作的一些代码:
首先,您必须进行调用以获得后台权限,并为您的时间完成后的操作提供一个 block (后台任务到期处理程序):</p>
<pre><code>UIApplication *app = ;
_backgroundRenderingID = [app beginBackgroundTaskWithExpirationHandler:^{
;
_backgroundRenderingID = UIBackgroundTaskInvalid;
}];
</code></pre>
<p>之后你就可以开始渲染你的视频了:</p>
<pre><code>videoWriter = [ initWithURL:
fileType:AVFileTypeMPEG4
error:&error];
NSParameterAssert(videoWriter);
...
</code></pre>
<p>当您完成后,请确保您让操作系统知道您的后台清晰易读的任务已完成:</p>
<pre><code> [ endBackgroundTask:_backgroundRenderingID];
</code></pre>
<p>希望对你有所帮助。</p></p>
<p style="font-size: 20px;">关于iOS 在后台任务中生成视频,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/16163372/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/16163372/
</a>
</p>
页:
[1]