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

5

这个问题也有同样的情况,但是解决方案都没有起作用。

AVPlayer有时会播放空白视频:有声音但没有画面。

当播放空白视频时,我们打印了播放器的帧和状态。帧是非零且正确设置的。状态也是readyToPlayplay函数也在主线程上调用。

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

问题似乎是一个时间问题。如果我们在播放视频之前等待5-10秒,视频每次都可以正常工作。

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

苹果论坛上的这个帖子表明这可能是与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()
}

你能在这里展示你的代码吗?还有屏幕上显示的播放器尺寸。 - Horst
@Horst 确认更新了问题。谢谢! - Crashalot
你能否在Github上放置一个项目以重现这个问题? - Rhythmic Fistman
@RhythmicFistman会尝试简化这个复杂的项目,以便易于调试,但需要一些时间。我也看到了你在iOS 10上关于AVPlayer问题的相关问题的回答。这可能是一个iOS 10的bug,因为代码在iOS 9和8上运行良好,但我已经没有这些设备来测试了。 - Crashalot
我认为我有类似的问题。 除了等待5-10秒钟之外,还有其他解决方法吗? - crgt
2个回答

2
我认为你需要使用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];

来自 苹果文档:

AVPlayer和AVPlayerItem是非视觉对象,这意味着它们无法单独在屏幕上显示资源的视频。您有两种主要途径可以使用来在屏幕上展示您的视频内容:

AVKit:展示视频内容的最佳方式是使用AVKit框架的AVPlayerViewController类(在iOS和tvOS中)或AVPlayerView类(在macOS中)。这些类展示视频内容,以及播放控件和其他媒体功能,为您提供了完整的播放体验。

AVPlayerLayer:如果您正在为播放器构建自定义界面,则需要使用AVFoundation提供的Core Animation CALayer子类——AVPlayerLayer。播放器图层可以设置为视图的后备图层,也可以直接添加到图层层次结构中。与AVPlayerView和AVPlayerViewController不同,播放器图层不提供任何播放控件,仅在屏幕上呈现视觉内容。由您构建播放传输控件来播放、暂停和搜索媒体。


对不起,我们省略了设置播放器层框架的代码。框架在其他地方已经正确设置,这也可以通过视频播放时的框架进行验证。问题似乎是一个时间问题。如果我们在播放视频之前等待5-10秒钟,每次视频都可以正常工作。 - Crashalot

1
如果有人遇到这个问题,问题似乎与iOS的一个漏洞有关。该问题不会在iOS 8/9设备上发生,只会在新的iOS 10设备上出现。从iOS 10.2开始,问题消失了。
不幸的是,对于10.0.x或10.1.x仍然没有编程解决方案。

如预期,问题在iOS 12和13上出现了。 - Duck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接