Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone-将50帧保存到电影后应用程序停止_Iphone_Ios_Ipad - Fatal编程技术网

iPhone-将50帧保存到电影后应用程序停止

iPhone-将50帧保存到电影后应用程序停止,iphone,ios,ipad,Iphone,Ios,Ipad,我有几个UIImage,我想从中创建一个视频 我习惯了一个解决方案 从UIImage创建视频。在我的例子中,我想创建一个每秒30帧的视频。因此,每个图像都是1/30秒 在将所有内容设置为开始保存视频后,如该页所述,我创建了一个方法,将一个图像保存到电影中,该方法由循环调用。比如: for (int i=0; i<[self.arrayOfFrames count]; i++ { UIImage *oneImage = [self.arrayOfFrames objectAtIndex:

我有几个UIImage,我想从中创建一个视频

我习惯了一个解决方案

从UIImage创建视频。在我的例子中,我想创建一个每秒30帧的视频。因此,每个图像都是1/30秒

在将所有内容设置为开始保存视频后,如该页所述,我创建了一个方法,将一个图像保存到电影中,该方法由循环调用。比如:

for (int i=0; i<[self.arrayOfFrames count]; i++ {
  UIImage *oneImage = [self.arrayOfFrames objectAtIndex:i];
  [self saveOneFrame:oneImage atTime:i];
}
我运行仪器,并没有检测到任何泄漏或夸大的内存使用量,这与电影开始保存前大致相同

有什么线索吗


注:

查看设备日志后,我发现:

<Notice>: (UIKitApplication:com.myID.myApp[0xc304]) Bug: launchd_core_logic.c:3732 (25562):3
<Notice>: (UIKitApplication:com.myID.myApp[0xc304]) Assuming job exited: <rdar://problem/5020256>: 10: No child processes
<Warning>: (UIKitApplication:com.myID.myApp[0xc304]) Job appears to have crashed: Segmentation fault: 11
<Warning>: Application 'myApp' exited abnormally with signal 11: Segmentation fault: 11
:(UIKitApplication:com.myID.myApp[0xc304])Bug:launchd_core_logic.c:3732(25562):3
:(UIKitApplication:com.myID.myApp[0xc304])假设作业已退出::10:无子进程
:(UIKitApplication:com.myID.myApp[0xc304])作业似乎已崩溃:分段错误:11
:应用程序“myApp”异常退出,信号为11:分段错误:11

也许您已经尝试过这个方法,但可以提供帮助

最后,解决方案是重启iPhone,因为有些数据 腐败了。重启后,一切正常

应该想到经典的“你有没有试过关掉它 “又来了?”


这样看,您有一个图像数组(这会消耗大量内存)。您正在制作这些图像的副本,并将副本保存到已完成的电影中。因此,您的需求实际上是开始时的两倍。如果在添加帧后释放每个帧,效果如何?这意味着您最终可能会使用相同大小的内存(或者可能稍大一些,但仍然小于您拥有的内存)。

好的,重新启动设备“部分解决”了问题。现在,应用程序在保存第50帧后崩溃,而不是35帧。这显然是一个内存问题,尽管Xcode没有崩溃或者一句话也没说(顺便说一句,我告诉过你我讨厌Xcode 4.x?)。我已经在方法上放置了一个自动释放池,但没有成功…我正在保存非常小的帧(200x100像素)。当保存结束后所有内容都被释放,并且我的应用程序没有泄漏时,这怎么可能是内存使用呢?我尝试了另一种方法。我正在动态生成帧,不再构建阵列。我建立一个帧,发送到视频,建立另一个帧,发送到视频,等等。。。它在记录相同帧数后崩溃。。。就在保存第50帧之后。你看到原来的帧消失了吗?我想你可能处于一个很紧的循环中,手机会一直等到你退出自动释放池的方法,但是你在循环中,所以直到你崩溃才发生。在这种情况下,你可以启动一个线程来构建一个框架,在结束时,为第二个框架启动一个新的线程。是的,我看到了框架。它不是挂着的,因为它冻结在一个环上。我看到消息,“追加第0帧,尝试0”,“追加第1帧,尝试0”。。。等它在50帧后被弹出,因为它使用了太多内存。。。这很奇怪。我不是说你会被冻结在一个循环上。我是说,在退出方法之前,您的内存可能不会真正释放。在这种情况下,您的内存永远不会消失,因为您使用了太多的内存,只有当您退出该方法时,它才会被释放。因为您处于循环中,所以不会退出该方法,并且内存永远不会消失。换句话说,内存清理只在退出循环后发生。如果是这种情况,那么您需要有一个方法,将一个帧作为一个线程附加和释放,然后当它退出时,为第二个帧启动一个新线程。这样做将消除“循环”,并让线程继续生成,直到您到达帧的末尾。
-(CVPixelBufferRef) pixelBufferFromCGImage:(CGImageRef)image size:(CGSize)size
{
    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithBool:YES], kCVPixelBufferCGImageCompatibilityKey,
                             [NSNumber numberWithBool:YES], kCVPixelBufferCGBitmapContextCompatibilityKey,
                             nil];
    CVPixelBufferRef pxbuffer = NULL;
    CVReturn status = CVPixelBufferCreate(kCFAllocatorDefault, size.width,
                                          size.height, kCVPixelFormatType_32ARGB, (CFDictionaryRef) options, 
                                          &pxbuffer);
    status=status;//Added to make the stupid compiler not show a stupid warning.
    NSParameterAssert(status == kCVReturnSuccess && pxbuffer != NULL);

    CVPixelBufferLockBaseAddress(pxbuffer, 0);
    void *pxdata = CVPixelBufferGetBaseAddress(pxbuffer);
    NSParameterAssert(pxdata != NULL);

    CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(pxdata, size.width,
                                                 size.height, 8, 4*size.width, rgbColorSpace, 
                                                 kCGImageAlphaNoneSkipFirst);
    NSParameterAssert(context);

    //CGContextTranslateCTM(context, 0, CGImageGetHeight(image));
    //CGContextScaleCTM(context, 1.0, -1.0);//Flip vertically to account for different origin

    CGContextDrawImage(context, CGRectMake(0, 0, CGImageGetWidth(image), 
                                           CGImageGetHeight(image)), image);
    CGColorSpaceRelease(rgbColorSpace);
    CGContextRelease(context);

    CVPixelBufferUnlockBaseAddress(pxbuffer, 0);

    return pxbuffer;
}
<Notice>: (UIKitApplication:com.myID.myApp[0xc304]) Bug: launchd_core_logic.c:3732 (25562):3
<Notice>: (UIKitApplication:com.myID.myApp[0xc304]) Assuming job exited: <rdar://problem/5020256>: 10: No child processes
<Warning>: (UIKitApplication:com.myID.myApp[0xc304]) Job appears to have crashed: Segmentation fault: 11
<Warning>: Application 'myApp' exited abnormally with signal 11: Segmentation fault: 11