在 tvOS 上播放时出现 AVPlayer 错误

AVPlayer error while playing on 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];

但是我收到以下错误

ERROR: >aqme> 718: MEMixerChannel::EnableProcessor: failed to open processor type 0x705f6571

有什么解决办法吗?

您是在模拟器中还是在 Apple TV 开发工具包中运行安装应用程序?

对于 tvOS,我遇到的大多数 AV 相关 bugs/crashes 只发生在我使用 Apple TV 模拟器时 - 一旦我 运行 物理设备上的应用程序,它们往往会消失.

我正在获取要在模拟器上本地加载和播放的视频。 我用 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。

您不想继承 AVPlayerViewController。来自 the docs:

IMPORTANT

Do not subclass AVPlayerViewController. Overriding this class’s methods is unsupported and results in undefined behavior.

而是使用常规的 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