1

私はAVAssetWriter画像セットからビデオをエンコードするために使用します:

[assetWriter finishWriting];

このメソッドは、iOS 6 で警告を生成します。

[assetWriter finishWritingWithCompletionHandler:<#^(void)handler#>];

これは、iOS 6でそれを適用する方法です。誰かがそれを適用するのを手伝ってくれますか

4

2 に答える 2

10

終了したかどうかを確認する必要はありません。完了ハンドラーはブロックです。書き込みが終了すると、システムから呼び出されます。それを試してみてください。

[assetWriter finishWritingWithCompletionHandler:^(){
    NSLog (@"finished writing");
}];
于 2012-11-08T11:21:09.660 に答える
1

これはライターのスタートコードです

 NSURL *movieURL = [NSURL fileURLWithPath:myPathDocs1];
    NSError *movieError = nil;
    [assetWriter release];
    assetWriter = [[AVAssetWriter alloc] initWithURL:movieURL
                                            fileType: AVFileTypeQuickTimeMovie
                                               error: &movieError];
    NSDictionary *assetWriterInputSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                                              AVVideoCodecH264, AVVideoCodecKey,
                                              [NSNumber numberWithInt:FRAME_WIDTH], AVVideoWidthKey,
                                              [NSNumber numberWithInt:FRAME_HEIGHT], AVVideoHeightKey,
                                              nil];
    assetWriterInput = [AVAssetWriterInput assetWriterInputWithMediaType: AVMediaTypeVideo
                                                          outputSettings:assetWriterInputSettings];
    assetWriterInput.expectsMediaDataInRealTime = YES;
    [assetWriter addInput:assetWriterInput];

    [assetWriterPixelBufferAdaptor release];
    assetWriterPixelBufferAdaptor = [[AVAssetWriterInputPixelBufferAdaptor  alloc]
                                     initWithAssetWriterInput:assetWriterInput
                                     sourcePixelBufferAttributes:nil];
    [assetWriter startWriting];

    firstFrameWallClockTime = CFAbsoluteTimeGetCurrent();
    [assetWriter startSessionAtSourceTime: CMTimeMake(0, TIME_SCALE)];

    // start writing samples to it
    [assetWriterTimer release];
    assetWriterTimer = [NSTimer scheduledTimerWithTimeInterval:1.0f/60.0f
                                                        target:self
                                                      selector:@selector (writeSample:)
                                                      userInfo:nil
                                                       repeats:YES] ;

これはライターの停止コードです

  if (isRecording) {
        isRecording = NO;
        [_session stopRunning];
        [assetWriterTimer invalidate];
        assetWriterTimer = nil;


        [assetWriter finishWritingWithCompletionHandler:^(){
            NSLog (@"finished writing");
        }];


        [self loadOvelay];

    }
于 2012-11-10T04:22:00.397 に答える