Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.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
Audio 调用finishWritingWithCompletionHandler时,AVAssetWriter失败_Audio_Encoding_Avfoundation_Ios7 - Fatal编程技术网

Audio 调用finishWritingWithCompletionHandler时,AVAssetWriter失败

Audio 调用finishWritingWithCompletionHandler时,AVAssetWriter失败,audio,encoding,avfoundation,ios7,Audio,Encoding,Avfoundation,Ios7,我正在使用AVAssetWriter/Avassetrader将PCM音频文件转码到AAC。我把它归结为一个简单的项目,它在iOS6中工作,在iOS7中失败 一切都进展顺利,直到我到达[self.assetWriter finishWritingWithCompletionHandler:],然后assetWriter进入失败状态,错误设置为-11800 AVFoundation unknown error,内部错误设置为-12733,这显然与SampleBufferNotReady相对应 di

我正在使用AVAssetWriter/Avassetrader将PCM音频文件转码到AAC。我把它归结为一个简单的项目,它在iOS6中工作,在iOS7中失败

一切都进展顺利,直到我到达[self.assetWriter finishWritingWithCompletionHandler:],然后assetWriter进入失败状态,错误设置为-11800 AVFoundation unknown error,内部错误设置为-12733,这显然与SampleBufferNotReady相对应

dispatch_queue_t queue = dispatch_queue_create("audio.encode", DISPATCH_QUEUE_SERIAL);

success = [self.assetWriter startWriting];
if (!success)
{
  [self showStatus:@"Export: writer failed to startWriting"];
  return;
}
[self.assetWriter startSessionAtSourceTime:kCMTimeZero];

[assetWriterInput requestMediaDataWhenReadyOnQueue:queue
                                        usingBlock:
 ^{
   while([assetWriterInput isReadyForMoreMediaData])
   {
     NSAssert (self.assetWriter.status == AVAssetWriterStatusWriting, nil);
     CMSampleBufferRef sampleBuffer = [assetReaderOutput copyNextSampleBuffer];

     if (sampleBuffer)
     {
       NSAssert (CMSampleBufferIsValid(sampleBuffer), nil);
       NSAssert (CMSampleBufferDataIsReady(sampleBuffer), nil);

       BOOL success = [assetWriterInput appendSampleBuffer:sampleBuffer];

       if (!success)
       {
         [self showError:self.assetWriter.error];
         self.assetWriter = nil;
         CFRelease(sampleBuffer);
         return;
       }

       CFRelease(sampleBuffer);
     }
     else
     {
       if ([assetReader status] == AVAssetReaderStatusCompleted)
       {
         [assetWriterInput markAsFinished];

         [self.assetWriter finishWritingWithCompletionHandler:^{
           BOOL success = self.assetWriter.status == AVAssetWriterStatusCompleted;
           if (success)
           {
             [self showStatus: @"Did it!"];
             self.assetWriter = nil;
           }
           else
           {
             [self showError:self.assetWriter.error];
             self.assetWriter = nil;
           }
         }];
       }
       else
       {
         [self showError:assetReader.error];
         self.assetWriter = nil;
       }
     }
   }
 }
])


注意:我已经发布了一个苹果的bug,发布到开发论坛,并使用了TSI。还没有任何答案。我希望你们中的一位天才能给我指出一个解决办法。

我和你们有同样的问题,但最终我解决了这个问题,我使用以下方法:

CMTime cmTime = CMTimeMake(longDuration, 1);
[assetWriter endSessionAtSourceTime:cmTime];
[assetWriter finishWritingWithCompletionHandler^(){
    NSLog (@"finished writing");
];
如果我们调用finishWritingWithCompletionHandler,通常不需要调用它;
我希望这能解决您的问题。

感谢您分享您的解决方案。不幸的是,这个问题对我不起作用。我知道这个问题已经有很长一段时间没有出现了,但我最终还是遇到了同样的问题。你能解决或回避这个问题吗?