2016-12-19 6 views
0

Используя очень простую реализацию AVPlayer:AVPlayer не играет определенную ссылку

AVURLAsset *asset = [AVURLAsset assetWithURL:self.currentCollateral.url]; 
AVPlayerItem *item = [AVPlayerItem playerItemWithAsset:asset]; 
AVPlayer *player = [AVPlayer playerWithPlayerItem:item]; 
AVPlayerViewController *playerViewController = [[AVPlayerViewController alloc] init]; 
playerViewController.player = player; 
[player play]; 
[self presentViewController:playerViewController animated:YES completion:nil]; 

Но эта ссылка не будет играть:

https://www.screencast.com/users/DoorAndHardware/folders/2016%20Orlando%20Conference/media/08848a5a-d414-4bdd-861f-95cf9890d1a1/embed \

Player not playing

Не уверен, что я пропал без вести. Код работает для других ссылок. Кажется, что в документации нет ничего подходящего. Спасибо за любую помощь!

Бен

ответ

0

Ваш URL не ссылаются на медиа-файл (.mp4, например), но к игроку поместить его.

Вы можете увидеть used URL, если вы посмотрите исходный код сайта связанного игрока. Этот URL-адрес должен работать с вашим кодом.

+0

Благодарим за ответ! – Mountainbrussell

0

Перед началом воспроизведения любого видео на avplayer нам нужно проверить, готов ли данный URL-адрес к игре или нет. Добавьте ниже наблюдателя на avplayer.

[avplayerObject addObserver:self forKeyPath:@"status" options:0 context:nil]; 

#pragma Observer for Player status. 
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 
    if (object == _audioPlayer && [keyPath isEqualToString:@"status"]) { 
     if (_audioPlayer.status == AVPlayerStatusFailed) { 
      NSLog(@"AVPlayer Failed"); 

     } else if (_audioPlayer.status == AVPlayerStatusReadyToPlay) { 
      NSLog(@"AVPlayerStatusReadyToPlay"); 
       [_audioPlayer play]; 

     } else if (_audioPlayer.status == AVPlayerItemStatusUnknown) { 
      NSLog(@"AVPlayer Unknown"); 

     } 
     [_audioPlayer removeObserver:self forKeyPath:@"status" context:nil]; 
    } 

}