AVPlayer空白video:播放声音,但没有video

这个问题有同样的问题,但解决scheme没有奏效。

AVPlayer有时播放空白video:有声音但没有video。

播放空白video时,我们打印了播放器的框架和状态。 该框架是非零,并正确设置。 状态也readyToPlayplayfunction也在主线程上调用。

换句话说,玩家层的框架是有效的,并且玩家也准备好玩。 然而,即使声音没有出现,也不会出现video。

这个问题似乎是一个时机。 如果我们在播放video前等待5-10秒,则video每次都能正常播放。

此问题出现在iOS 10上,而不是iOS 8或9上。

苹果论坛上的这个post表明这可能是一个与AVVideoCompositionCoreAnimationTool有关的bug,我们也使用它。

任何解决scheme

在iPhone 7设备上这比iPhone 5s设备更频繁地发生。

码:

 fileprivate func playVideo(_ videoURL: String, prompt: String) { // Show <playerView> playerView.isHidden = false // Use new video in player playerItem = AVPlayerItem(url: URL(fileURLWithPath: videoURL)) print("STATUS: \(player.status == AVPlayerStatus.readyToPlay). FRAME: \(playerLayer.frame). MAIN THREAD: \(Thread.isMainThread)") player.replaceCurrentItem(with: playerItem) // Start playing video player.seek(to: kCMTimeZero) player.actionAtItemEnd = .none player.play() } 

我想你需要玩一个AVPlayerViewController或AVPlayerLayer。

 AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player]; //set player layer frame and attach it to our view playerLayer.frame = self.containerView.bounds; [self.containerView.layer addSublayer:playerLayer]; //play the video [player play]; 

来自Apple文档 :

AVPlayer和AVPlayerItem是非可视对象,意味着它们自己无法在屏幕上呈现资产的video。 您可以使用两种主要方法在屏幕上呈现video内容:

AVKit:展示video内容的最佳方式是使用iOS中AVKit框架的AVPlayerViewController类和tvOS或macOS中的AVPlayerView类。 这些课程提供video内容以及播放控件和其他媒体function,为您提供全面的播放体验。

AVPlayerLayer:如果您正在为播放器构build自定义界面,则使用由AVFoundation提供的名为AVPlayerLayer的Core Animation CALayer子类。 播放器图层可以设置为视图的背景层,也可以直接添加到图层层次结构中。 与AVPlayerView和AVPlayerViewController不同的是,播放器层不提供任何播放控制,只是在屏幕上显示可视内容。 播放传输控件可以播放,暂停和查找媒体,由您决定。

如果有人遇到这个问题,这个问题似乎与iOS错误有关。 iOS 8/9设备上不会出现此问题,只能在新的iOS 10设备上进行。 从iOS 10.2开始,问题就消失了。

不幸的是,仍然没有10.0.x或10.1.x的编程解决scheme。