Невозможно воспроизвести видеофайл на iPad с помощью AVPlayerViewController
Я видел точно такую же проблему здесь, но без ответа, поэтому снова задаю тот же вопрос. AVPlayer не будет воспроизводить видео с URL-адреса в iOS9. Я пытался воспроизвести видео различными способами, но, к сожалению, они не работают для меня. Вот код:
AVPlayerViewController *playerViewController = [[AVPlayerViewController alloc] init];
NSString *url = [[NSBundle mainBundle] pathForResource:@"Intro" ofType:@"mp4"];
_asset = [AVURLAsset assetWithURL: [NSURL URLWithString:url]];
_playerItem = [AVPlayerItem playerItemWithAsset: _asset];
_player = [[AVPlayer alloc] initWithPlayerItem: _playerItem];
[playerViewController.view setFrame:_videoView.frame];
playerViewController.showsPlaybackControls = YES;
[_videoView addSubview:playerViewController.view];
playerViewController.player = _player;
[_player play];
и вот снимок экрана того, как это выглядит в настоящее время с использованием приведенного выше кода. И я использовал другой код Apple для проверки видео, и он работал нормально, но код Apple для меня слишком сложен, так как слишком сложен для простых вещей. Вот оно: https://developer.apple.com/library/prerelease/ios/samplecode/AVFoundationSimplePlayer-iOS/
1 ответ
Я наконец смог понять это, еще раз изучив образец кода Apple. Решение: Добавлены файлы AAPLPlayerView в мой проект. Затем изменил мой UIView в Storyboard на класс выше. Затем обновил нижеследующие строки кода в моем классе контроллера представления:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.playerView.playerLayer.player = self.player;
NSURL *movieURL = [[NSBundle mainBundle] URLForResource:@"Intro" withExtension:@"mp4"];
self.asset = [AVURLAsset assetWithURL:movieURL];
self.playerItem = [AVPlayerItem playerItemWithAsset: self.asset];
[self.player play];
}
- (AVPlayer *)player {
if (!_player)
_player = [[AVPlayer alloc] init];
return _player;
}
- (AVPlayerLayer *)playerLayer {
return self.playerView.playerLayer;
}
- (AVPlayerItem *)playerItem {
return _playerItem;
}
- (void)setPlayerItem:(AVPlayerItem *)newPlayerItem {
if (_playerItem != newPlayerItem) {
_playerItem = newPlayerItem;
// If needed, configure player item here before associating it with a player
// (example: adding outputs, setting text style rules, selecting media options)
[self.player replaceCurrentItemWithPlayerItem:_playerItem];
}
}
И это сработало. Проблема была в том, что PlayerLayer не был установлен должным образом, и видео не было видно из-за этого.