2012-03-05 27 views
1

使用下面的代码,我收到此错误:NSTask失败22撤消临时过程可可

NSTask: Task create for path '/Users/media/Library/Developer/Xcode/DerivedData/Manager-gnixeptcszdoubbnfcncumzypwge/Build/Products/Debug/lib' failed: 22, "Invalid argument". Terminating temporary process. 

我没有得到什么这背后的问题。对于ffmpegPresetLaunchPath

- (void)startProcessingVideo { 

    NSLog(@"Processing Video Low Resolution"); 

    NSTimeInterval timeStamp = [[NSDate date] timeIntervalSince1970]; 
    // NSTimeInterval is defined as double 
    NSNumber *timeStampObj = [NSNumber numberWithInt:timeStamp]; 

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
    [formatter setNumberStyle:NSNumberFormatterNoStyle]; 

    NSString *convertNumber = [formatter stringForObjectValue:timeStampObj]; 

    NSLog(@"timeStampObj:: %@", convertNumber); 

    NSString *fileNameNumber = [convertNumber stringByAppendingString:[self genRandStringLength:8]]; 

    NSLog(@"fileNameNumber:::: %@", fileNameNumber); 

    NSString *aString = [[NSString stringWithFormat:@"%@%@%@", thumbnailDirPath,@"/Mobile" ,fileNameNumber] retain]; 

    //NSString *string = [aString stringByAppendingString:@"_H"]; 

    fileNameMP4Mobile = [aString stringByAppendingString:@".mp4"]; 

    NSLog(@"string:::: %@", aString); 

    [lblMessage setStringValue:@"Started!"]; 
    NSTask *task= [NSTask new]; 
    [task setLaunchPath:ffmpegPresetLaunchPath]; 
    [task setArguments:[NSArray arrayWithObjects: 
         @"-y", 
         @"-i", 
         inputFilePath,// @"1.wmv", 
         @"-vcodec", 
         @"libx264", 
         @"-fpre", 
         @"libx264-fast.ffpreset", 
         @"-b", 
         @"500k", 
         @"-s", 
         @"640*480", 
         @"-r", 
         @"30", 
         @"-aspect", 
         @"16:9", 
         @"-ab", 
         @"128k", 
         @"-ac", 
         @"2", 
         @"-ar", 
         @"44100", 
         fileNameMP4Mobile,nil]]; 
    [task setCurrentDirectoryPath:thumbnailDirPath]; 

    NSPipe *outputPipe = [NSPipe pipe]; 
    [task setStandardInput:[NSPipe pipe]]; 
    [task setStandardOutput:outputPipe]; 

    [task launch]; 
    [task waitUntilExit]; 
    [task release]; 

    NSData *outputData = [[outputPipe fileHandleForReading] readDataToEndOfFile]; 
    NSString *outputString = [[[NSString alloc] initWithData:outputData encoding:NSUTF8StringEncoding] autorelease]; 
    [lblMessage setStringValue:@"Video Generated!"]; 

    [self startProcessingVideoHighResolution]; 
} 

值:

ffmpegPresetLaunchPath = [[NSString stringWithFormat:@"%@%@", currentDir, @"/lib/"] retain]; 

价值的NSLog:

ffmpegPresetLaunchPath::: /Users/media/Library/Developer/Xcode/DerivedData/FileManager-gnixeptcszdoubbnfcncumzypwge/Build/Products/Debug/lib/ 

请帮助解决这个问题。

+0

请显示'ffmpegPresetLaunchPath'的值;这几乎肯定会导致错误。 – trojanfoe 2012-03-05 13:50:20

+0

请检查,我编辑了这个问题。 – 2012-03-05 14:00:58

回答

1

您未提供执行正确的文件;你正在通过它的路径(大概)。

你可能需要的东西,如:

ffmpegPresetLaunchPath = [[NSString stringWithFormat:@"%@%@", currentDir, @"/lib/ffmpeg"] retain]; 

注:很明显比error 22errno价值EINVAL,但是有它没有提到对exec()manpageexecve()manpage,所以我不知道。知道你如何期望从错误代码中确定原因。

+0

Thanx @trojanfoe,你救了我的一天哥们:) – 2012-03-05 14:27:17