Какао Добавить изображение в конце видео - PullRequest
2 голосов
/ 21 июня 2011

Я записываю видео с камеры iSight, используя QTCaptureSession.

Я хотел бы добавить изображение в конце видео, поэтому я реализовал методы делегата 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];
}

1 Ответ

1 голос
/ 21 июня 2011

Хотя я использовал Cocoa touch, это все равно может быть применимо. У меня есть два совета, основанные на моем опыте записи изображений в кино. Во-первых, хотя я готов поспорить, что addImage: forDuration позаботится о многих вещах, которые не выполняются AVAssetExportSessions, я должен был убедиться, что изображения добавляются более регулярно, чем пару раз в секунду, иначе они не будут работать хорошо со всеми игроками. Во-вторых, если есть опция потоковой передачи по сети, такая как AVAssetExportSession shouldOptimizeForNetworkUse, для перемещения как можно большего количества метаданных и заголовков в фильме, я обнаружил, что она делает видео совместимым также с большим количеством плееров.

...