2013-04-23 70 views
-1

如何繼續從圖像創建長視頻?這需要相當長的時間,用戶會覺得無聊等待,所以我想在後臺生成電影並在完成後通知用戶。iOS在後臺任務中生成視頻

我的應用程序結構是這樣的,我有一個UINavigationController,其中包含模擬電影的一個控制器,只是一些圖像與CoreAnimation一起移動。然後我推一個新的控制器來生成電影。在控制器2我發送請求給控制器1發送我的圖像與幀寫在電影(我生成的圖像與CoreGraphics)。這幾乎阻塞了一切,因爲它需要很長時間並且是連續的。

我閱讀了關於後臺任務的內容,似乎是唯一的解決方案,但它們不會持續很長時間,可能會停在中間,生成30秒的視頻需要大約6分鐘。我也不能聲明我的應用程序在後臺運行,因爲它不是VoIP或其他支持的類型。

感謝您的意見。

+0

但這會快速燒燬電池,因爲這涉及大量計算和RAM I/O。 – Raptor 2013-04-23 09:05:21

+0

如果生成的電影值得他們使用它,如果不是不。也許可以在速度上做一些改進,現在每幀處理一個圖像幾次。 – 2013-04-23 10:21:40

回答

1

根據我的理解你可以做到這一點,雖然你的應用程序只能運行有限的時間,但取決於你的視頻大小,這可能就足夠了。實際上,我在我的動畫創作應用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); 
... 

當你完成確保你讓OS知道,您的任務清晰了背景是com成品:

[[UIApplication sharedApplication] endBackgroundTask:_backgroundRenderingID]; 

我希望有所幫助。

+0

謝謝,這是有效的。只需要看看我要做什麼,如果這個過程需要10分鐘以上,也許會暫停。 – 2013-04-23 10:36:45

+0

不要忘記接受答案,如果它爲你工作,以便下一個搜索它的人可以立即知道它的一個很好的解決方案。 – 2013-04-25 08:29:22

+0

是的。順便說一句,我試過你的應用程序只是爲了比較速度,我認爲你需要更多地在用戶界面上工作,我幾乎不知道該怎麼做,也無法找到導出功能。今天,我剛完成我的應用程序,並找到了一些提高速度的方法,而不是生成圖像,調整大小,翻轉,分層和所有這些東西,我只捕獲顯示在UIView中的結果圖像,並且幾乎實時更快。允許的10分鐘在後臺運行的問題仍然存在問題,我希望沒有人願意創建視頻這麼久。 – 2013-04-25 09:09:15