Подтвердить что ты не робот

Ошибка 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

Есть идеи, как это исправить?

4b9b3361

Ответ 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