【问题标题】:GPUImage saving video in background issueGPUImage在后台保存视频问题
【发布时间】:2013-11-11 01:48:20
【问题描述】:

当我的应用程序进入后台时,我在将视频从 GPUImage videoCamera 保存到相机胶卷时遇到问题。该文件仅在应用程序返回前台/重新启动时保存到相机胶卷。毫无疑问,我会犯初学者代码错误,如果有人能指出这一点,将不胜感激。

 - (void)applicationDidEnterBackground:(UIApplication *)application {

if (isRecording){
    [self stopRecording];
};
if (self.isViewLoaded && self.view.window){
    [videoCamera stopCameraCapture];
};
runSynchronouslyOnVideoProcessingQueue(^{
    glFinish();
});
NSLog(@"applicationDidEnterBackground");

然后

-(void)stopRecording {
[filterBlend removeTarget:movieWriter];
videoCamera.audioEncodingTarget = nil;
[movieWriter finishRecording];
NSString *path = [NSTemporaryDirectory() stringByAppendingPathComponent:@"file.mov"];
ALAssetsLibrary *al = [[ALAssetsLibrary alloc] init];
[al writeVideoAtPathToSavedPhotosAlbum:[NSURL fileURLWithPath:path] completionBlock:^(NSURL *assetURL, NSError *error) {
    if (error) {
        NSLog(@"Error %@", error);
    } else {
        NSLog(@"Success");
    }

}];
isRecording = NO;
NSLog(@"Stop recording");

【问题讨论】:

  • -finishRecording 是否在您的应用程序进入后台之前完成?如果在那之后抛出断点或日志语句,它什么时候完成?我会检查以确保 -writeVideoAtPathToSavedPhotosAlbum:completionBlock: 在您进入后台时启动,并且不会等到您返回前台。
  • 感谢 Brad,这与您的诊断完全一样,再次感谢 GPUImage,它非常有用。

标签: gpuimage


【解决方案1】:

正如 Brad 在他一如既往的富有洞察力的评论中指出的那样, -writeVideoAtPathToSavedPhotosAlbum:completionBlock: 直到应用程序返回前台后才完成,我通过添加解决了它

self.backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
    NSLog(@"Background handler called. Not running background tasks anymore.");
    [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask];
    self.backgroundTask = UIBackgroundTaskInvalid;
}];

@property (nonatomic) UIBackgroundTaskIdentifier backgroundTask;

http://www.raywenderlich.com/29948/backgrounding-for-ios找到这个解决方案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多