Ошибка AVPlayer при воспроизведении на tvOS
Я воспроизвожу видео на tvOS, используя следующий код:
NSString *filePath = [[NSBundle mainBundle] pathForResource:name ofType:@"mov"];
NSURL *fileUrl = [NSURL fileURLWithPath:filePath];
self.player = [AVPlayer playerWithURL:fileUrl];
AVPlayerLayer *avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
avPlayerLayer.frame = CGRectMake(0, 0, view.frame.size.width, view.frame.size.height);
[view.layer addSublayer:avPlayerLayer];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(replayMovie:) name:AVPlayerItemDidPlayToEndTimeNotification object:nil];
[self.player play];
Но я получаю следующую ошибку
ОШИБКА: > aqme > 718: MEMixerChannel:: EnableProcessor: не удалось открыть процессор типа 0x705f6571
Есть идеи, как это исправить?
Ответы
Ответ 1
Запускаете ли вы приложение в симуляторе или в комплекте Apple TV?
Для tvOS большинство связанных с AV ошибок/сбоев, с которыми я столкнулся, возникают только тогда, когда я использую симулятор Apple TV - как только я запускаю приложение на физическом устройстве, они, как правило, исчезают.
Ответ 2
Я получаю видео для загрузки и воспроизведения локально на симуляторе.
Я написал его в Swift, но вы должны легко перевести его.
if let path = NSBundle.mainBundle().pathForResource("4", ofType:"mp4") {
let url = NSURL(fileURLWithPath: path)
let videoPlayer = AVPlayer(URL: url)
let playerLayer = AVPlayerLayer(player: videoPlayer)
playerLayer.frame = self.view.frame
self.view.layer.addSublayer(playerLayer)
videoPlayer.play()
}
Убедитесь, что fileUrl
не nil
и попробуйте удалить код, который не нужен (например, часть уведомления), чтобы мы могли определить, какая часть не работает.
Я использую Xcode 7.1beta3.
Ответ 3
Вы не хотите подклассифицировать AVPlayerViewController. Из документы:
ВАЖНО
Не подклассы AVPlayerViewController. Переопределение этих классов методы не поддерживаются и приводят к поведению undefined.
Вместо этого используйте обычный UIViewController, а затем присоедините к нему вид AVPlayerViewController.
Использование кода @AbeanSits (я использую RubyMotion, но вы можете перевести на Obj-C). Здесь моя версия:
def viewDidAppear(_)
super
@player_controller = AVPlayerViewController.alloc.init
@player_controller.player = AVPlayer.alloc.initWithURL(current_url)
self.addChildViewController(@player_controller)
self.view.addSubview(@player_controller.view)
@player_controller.view.frame = self.view.frame
@player_controller.player.play
end