AVAsset и AVAssetTrack - управление треками в IOS 4.0 - PullRequest
6 голосов
/ 21 июля 2010

В новом списке функций IOS 4.0 говорится, что платформа AV Foundation получила управление мультимедийными активами, управление треками, редактирование мультимедиа и управление метаданными для мультимедийных элементов.Что они подразумевают под этим?

  1. С помощью управления дорожками и управления мультимедийными активами я могу получить доступ к файлам мультимедиа из приложения для фотографий?
  2. Могу ли я создавать свои собственные композиции с помощью AVComposition и экспортировать иотправить его на сервер?
  3. Могу ли я переименовать, переместить, отредактировать информацию метаданных актива?

Я попытался получить справку / документацию по этому вопросу и не смог найтилюбая вещь ..

Спасибо,

Тони

1 Ответ

14 голосов
/ 24 ноября 2010

Да, вы можете делать большинство вещей, которые вы упомянули.Я думаю, что не так просто получить доступ к медиафайлам вашего телефона.Но вы можете читать данные из сети и экспортировать их в свой список, если хотите.

Сначала вам нужно импортировать видео или аудио файлы.

Для начала вам нужнособственный видеоплеер, который вы создаете в своем собственном представлении.Если вам не нравится воспроизводить видео, а просто сочинять свои материалы, вы можете просто обойтись без просмотра.

Это очень просто: 1. создать изменяемую композицию:

AVMutableComposition *composition = [AVMutableComposition composition];

Это будет держать ваши видео.Теперь у вас есть пустой Composition-Asset.Добавьте несколько файлов из своего каталога или из Интернета:

NSURL* sourceMovieURL = [NSURL fileURLWithPath:moviePath];
AVURLAsset* sourceAsset = [AVURLAsset URLAssetWithURL:sourceMovieURL options:nil];

Затем добавьте свое видео в свою композицию

// calculate time
CMTimeRange editRange = CMTimeRangeMake(CMTimeMake(0, 600), CMTimeMake(sourceAsset.duration.value, sourceAsset.duration.timescale));

// and add into your composition 
BOOL result = [composition insertTimeRange:editRange ofAsset:sourceAsset atTime:composition.duration error:&editError];

Если вы хотите добавить больше видео в свою композицию, вы можетедобавьте еще один Актив и установите его снова в вашей композиции, используя ваш временной диапазон.Теперь вы можете экспортировать вашу новую композицию, используя следующий код:

NSError *exportError = nil;

AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:composition presetName:AVAssetExportPresetHighestQuality];

NSURL *exportURL = [NSURL fileURLWithPath:exportVideoPath];
exportSession.outputURL = exportURL;
exportSession.outputFileType = @"com.apple.quicktime-movie";
[exportSession exportAsynchronouslyWithCompletionHandler:^{
    switch (exportSession.status) {
        case AVAssetExportSessionStatusFailed:{
            NSLog (@"FAIL");
            [self performSelectorOnMainThread:@selector (doPostExportFailed:)
                                        withObject:nil
                                                    waitUntilDone:NO];
            break;
        }
        case AVAssetExportSessionStatusCompleted: {
            NSLog (@"SUCCESS");
            [self performSelectorOnMainThread:@selector (doPostExportSuccess:)
                        withObject:nil
                        waitUntilDone:NO];
            break;
        }
    };
}];

Если вы хотите воспроизводить видео, используйте следующий код (я полагаю, у вас есть доступ к вашему просмотру):

// create an AVPlayer with your composition
AVPlayer* mp = [AVPlayer playerWithPlayerItem:[AVPlayerItem playerItemWithAsset:composition]];

// Add the player to your UserInterface
// Create a PlayerLayer:
AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:mp];

// integrate it to your view. Here you can customize your player (Fullscreen, or a small preview)
[[self view].layer insertSublayer:playerLayer atIndex:0];
playerLayer.frame = [self view].layer.bounds;
playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;  

И, наконец, проиграйте видео:

[mp play];

Экспорт в камеру:

NSString* exportVideoPath = >>your local path to your exported file<<
UISaveVideoAtPathToSavedPhotosAlbum (exportVideoPath, self, @selector(video:didFinishSavingWithError: contextInfo:), nil);

И получите уведомление, если оно закончено (ваш метод обратного вызова)

- (void) video: (NSString *) videoPath didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo {
    // Error is nil, if succeeded
    NSLog(@"Finished saving video with error: %@", error);
    // do postprocessing here, i.e. notifications or UI stuff

}

К сожалению, я не нашел "легального" решения для чтения с камеры.

Очень хороший источник для начала работы:

http://www.subfurther.com/blog/?cat=51

Загрузите VTM_Player.zip, VTM_AVRecPlay.zip или VTM_AVEditor.zip для очень приятного знакомства с этим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...