在 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
我正在使用以下代码在 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