首页 文章

AVPlayer空白视频:播放声音但没有视频

提问于
浏览
1

This question有同样的问题,但解决方案不起作用 .

AVPlayer 有时会播放一个空白视频:声音但没有视频 .

播放空白视频时,我们打印了播放器的框架和状态 . 框架非零并且已正确设置 . 状态也是 readyToPlay . play 函数也在主线程上调用 .

换句话说,播放器层的帧是有效的,并且播放器也准备好播放 . 然而,即使声音确实存在,也没有视频出现 .

问题似乎是时间问题 . 如果我们在播放视频前等待5-10秒,视频每次都能正常工作 .

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

Apple论坛上的This thread表明它可能是与 AVVideoCompositionCoreAnimationTool 相关的错误,我们也会使用它 .

有解决方案吗

这种情况在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()
}

2 回答

  • 0

    我想你需要玩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 doc

    AVPlayer和AVPlayerItem是非可视对象,这意味着它们自己无法在屏幕上显示资产的视频 . 您可以使用两种主要方法在屏幕上显示视频内容:AVKit:呈现视频内容的最佳方式是使用iOS和tvOS中的AVKit框架的AVPlayerViewController类或macOS中的AVPlayerView类 . 这些课程提供视频内容,以及播放控件和其他媒体功能,为您提供全功能的播放体验 . AVPlayerLayer:如果要为播放器构建自定义界面,则使用AVFoundation提供的名为AVPlayerLayer的Core Animation CALayer子类 . 播放器图层可以设置为视图的背衬图层,也可以直接添加到图层层次结构中 . 与AVPlayerView和AVPlayerViewController不同,播放器层不提供任何播放控件,而只是在屏幕上显示可视内容 . 由您来构建播放传输控件以播放,暂停和搜索媒体 .

  • 0

    如果有人遇到此问题,问题似乎与iOS错误有关 . iOS 8/9设备上不会出现此问题,仅适用于新的iOS 10设备 . 从iOS 10.2开始,问题就消失了 .

    不幸的是,仍然没有针对10.0.x或10.1.x的编程解决方案 .

相关问题