возникли проблемы при воспроизведении видео с использованием фреймворка AVFoundation - PullRequest
0 голосов
/ 27 декабря 2011

Я получаю буфер кадров один за другим из видеофайла с помощью AVAssetReader и выполняю некоторые операции с кадром, а затем сохраняю новый кадр во временный файл с помощью AVAssetWritter. Теперь у меня есть путь к временному файлу, где все новые кадры сохраняются по одному. Есть ли способ воспроизвести видео во время непрерывного добавления кадров во временный файл?

вот код для воспроизведения видео с временного пути (где кадры постоянно добавляются):

(void)loadAssetFromFile {

AVURLAsset *asset = [AVURLAsset URLAssetWithURL:[NSURL fileURLWithPath:[(mMediaReader.mCameraRecorder) tempVideoFilePath ]] options:nil];
NSString *tracksKey = @"tracks";

[asset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:tracksKey] completionHandler:
 ^{

     // Completion handler block.
     dispatch_async(dispatch_get_main_queue(),
                    ^{
                        NSError *error = nil;
                        AVKeyValueStatus status = [asset statusOfValueForKey:tracksKey error:&error];

                        if (status == AVKeyValueStatusLoaded) {
                            self.mPlayerItem = [AVPlayerItem playerItemWithAsset:asset];
                            [mPlayerItem addObserver:self forKeyPath:@"status"
                                            options:0 context:&ItemStatusContext];
                            [[NSNotificationCenter defaultCenter] addObserver:self
                                                                     selector:@selector(playerItemDidReachEnd:)
                                                                         name:AVPlayerItemDidPlayToEndTimeNotification
                                                                       object:mPlayerItem];
                           self.mPlayer = [AVPlayer playerWithPlayerItem:mPlayerItem];
                            [mPlayerView setPlayer:mPlayer];
                            [self play:nil];
                        }
                        else {
                            // You should deal with the error appropriately.
                            NSLog(@"The asset's tracks were not loaded:\n%@", [error localizedDescription]);
                        }
                    });
 }];
}

(IBAction)play:sender {
[mPlayer play];
}

И код внутри блока никогда не запускается.

1 Ответ

0 голосов
/ 29 декабря 2011

Вы можете преобразовать CMSampleBuffer, который AVAssetReader возвращает в CGImage, а затем в UIImage, и отобразить его в UIImageView для рендеринга кадров при их извлечении из исходного видеофайла.

Есть примеркод в Руководстве по программированию AVFoundation , в котором показано, как выполнить это преобразование.

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