AVPlayerViewController не воспроизводит видео и показывает логотип Quicktime

Я пытаюсь воспроизвести видео с помощью нового AVPlayerViewController, представленного в XCode 6.

Для воспроизведения видео я сделал эту настройку.

  1. Использование локального файла mp4 для воспроизведения видео

  2. Расширенный AVPlayerViewController

Код настройки проигрывателя:

-(void)setupPlayer
{
    NSString* filePath = [[NSBundle mainBundle] pathForResource:@"exodus_trailer" ofType:@"mp4"];
    NSLog(@"File Path : %@",filePath);
    AVAsset *avAsset = [AVAsset assetWithURL:[NSURL URLWithString:filePath]];
    AVPlayerItem *avPlayerItem =[[AVPlayerItem alloc]initWithAsset:avAsset];
    self.player = [[AVPlayer alloc]initWithPlayerItem:avPlayerItem];
    [self.player addObserver:self forKeyPath:@"status" options:0 context:nil];
    [self.player play];
}

Обработка KVO:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if (object == self.player && [keyPath isEqualToString:@"status"])
    {
        if (self.player.status == AVPlayerStatusFailed)
        {
            NSLog(@"AVPlayer Failed");
        }
        else if (self.player.status == AVPlayerStatusReadyToPlay)
        {
            NSLog(@"AVPlayerStatusReadyToPlay");
           [self.player play];
        }
        else if (self.player.status == AVPlayerItemStatusUnknown)
        {
            NSLog(@"AVPlayer Unknown");
        }
    }
}

Проблема:

Журнал KVO печатает AVPlayerStatusReadyToPlay, и путь к файлу выглядит нормально. Раньше вид по крайней мере показывал плеер со всеми элементами управления по умолчанию, но теперь без каких-либо изменений он начал показывать логотип Quick time без какого-либо управления. Что означает показ этого логотипа? что я здесь делаю неправильно?

Скриншот:

введите здесь описание изображения


person Aditya Deshmane    schedule 07.12.2014    source источник


Ответы (1)


Вот именно так, как вы хотели сделать. Проблема с вашим кодом заключается в том, что вы не используете путь к файлу, используйте его для загрузки пути к файлу NSURL *url = [NSURL fileURLWithPath:urlString]

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSString *urlString = [[NSBundle mainBundle] pathForResource:@"testfile" ofType:@"mp4"];
    NSURL *url = [NSURL fileURLWithPath:urlString];

    self.player = [[AVPlayer alloc] initWithURL:url];
    [self.player addObserver:self forKeyPath:@"status"
                                      options:NSKeyValueObservingOptionNew
                                      context:NULL];

}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if (object == self.player) {
        AVPlayerStatus status = [change[NSKeyValueChangeNewKey] integerValue];
        if (status == AVPlayerStatusReadyToPlay) {
            [self.player play];
            [self.player removeObserver:self forKeyPath:@"status"];
        }
    }
    else {
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
    }
}

@end
person Sandeep    schedule 07.12.2014
comment
Единственной ошибкой было [NSURL URLWithString:filePath], заменил его на [NSURL fileURLWithPath:filePath], но он не показывает элементы управления проигрывателем, хотя я установил self.showsPlaybackControls = YES; Спасибо :-) - person Aditya Deshmane; 07.12.2014
comment
@Sandep, не могли бы вы изучить эту проблему stackoverflow.com/ вопросы/47919972/ - person Diksha; 21.12.2017