2011-06-21 7 views
2

私は、QTCaptureSessionを使用してiSightカメラからビデオを録音しています。Cocoaビデオの最後に画像を追加

私は、ビデオの最後に画像を追加したいと思いますので、私はdidFinishRecordingToOutputFileAtURLのデリゲートメソッドを実装しました。これまで私が行ってきたことは次のとおりです。

- (void)captureOutput:(QTCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL forConnections:(NSArray *)connections dueToError:(NSError *)error 
{ 

    // Prepare final video 
    QTMovie *originalMovie = [QTMovie movieWithURL:outputFileURL error:nil]; 
    [originalMovie setAttribute:[NSNumber numberWithBool:YES] forKey:QTMovieEditableAttribute]; 

    NSImage *splashScreen = [NSImage imageNamed:@"video-ending.jpg"]; 

    NSImage *tiffImage = [[NSImage alloc] initWithData:[splashScreen TIFFRepresentation]]; 

    id attr = [NSDictionary dictionaryWithObjectsAndKeys:@"tiff", 
       QTAddImageCodecType, 
       [NSNumber numberWithLong:codecHighQuality], QTAddImageCodecQuality, 
       nil]; 

    [originalMovie addImage:tiffImage forDuration:QTMakeTime(2, 1) withAttributes:attr]; 

    [tiffImage release]; 

    [originalMovie updateMovieFile]; 
} 

このコードの問題は、クイックタイムが素晴らしいとはいえ、他のプレイヤーはそれをしないということです。私はここで何か基本的なものが欠けていると確信している。

また、(それの間に2回を避けるために)、それが保存される前の映像に画像を追加するクールになります。今録音を停止する方法は次のとおりです。

- (void)stopRecording 
{ 
    // It would be cool to add an image here 
    [mCaptureMovieFileOutput recordToOutputFileURL:nil]; 
} 
+0

おそらくあなたがイメージを追加するときに、(例えば、映画と同じ圧縮を使用している)別の圧縮を指定することができます...私はこれが遅れている知っている、それだけで考えですか? –

答えて

1

私はCocoa touchを使用していましたが、これはまだ適用されています。私は映画に画像を書き込んだ私の経験に基づいて2つのヒントを持っています。まず、addImage:forDurationはAVAssetExportSessionsにない多くのことを処理すると思いますが、画像はほんの数回よりも定期的に追加されるか、すべてのプレーヤーでうまく動作しないことを確認する必要がありました。次に、AVAssetExportSession shouldOptimizeForNetworkUseなどのネットワークストリーミングオプションがあれば、ムービーで多くのメタデータとヘッダーを転送できるようになりました。ビデオがより多くのプレーヤーと互換性があることがわかりました。

+0

残念ながら、QTMakeTime(1200,600)などの別のqttimeを使用しても動作しないようです。画像を表示する代わりに、VLCプレーヤーはただちに(1秒間に10秒間画像を含む新しいウィンドウを開く前に)すばやく動きます。 –

関連する問題