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