2

我正在使用 QTCaptureSession 从 iSight 摄像头录制视频。

我想在视频末尾添加一张图片,所以我实现了 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];
}

这段代码的问题在于,虽然 quicktime 玩得很好,但其他玩家却不行。我确定我在这里遗漏了一些基本的东西。

在保存之前将图像添加到视频中也很酷(避免两次)。以下是我现在停止录制的方法:

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

1 回答 1

1

虽然我使用了 Cocoa touch,但这可能仍然适用。根据我将图像写入电影的经验,我有两个提示。首先,虽然我敢打赌 addImage:forDuration 会处理很多 AVAssetExportSessions 无法处理的事情,但我必须确保图像的添加频率高于每秒几次,否则它们不会适用于所有玩家。其次,如果有一个网络流选项,例如 AVAssetExportSessionshouldOptimizeForNetworkUse可以在电影中向前移动尽可能多的元数据和标题,我发现它也使视频与更多播放器兼容。

于 2011-06-21T12:49:23.153 回答