AVPlayer 空白视频:播放声音但没有视频
Posted
技术标签:
【中文标题】AVPlayer 空白视频:播放声音但没有视频【英文标题】:AVPlayer blank video: playing sound but no video 【发布时间】:2016-12-09 02:41:49 【问题描述】: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()
【问题讨论】:
你能在这里显示你的代码吗?以及屏幕上显示的播放器大小 @Horst 确定更新了问题。谢谢! 你能在 github 上放一个能重现问题的项目吗? @RhythmicFistman 会尝试,但项目很复杂,因此需要一段时间来简化它,以便于调试。还看到了您对 ios 10 上 avplayer 问题的相关问题的回复。这可能是 ios 10 的错误,因为代码在 ios 9 和 8 上运行,但不再需要这些设备进行测试。 我有一个我认为是类似的问题。除了等待 5-10 秒之外,还有其他解决方法吗? 【参考方案1】:我认为你需要使用 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 提供的 Core Animation CALayer 子类 称为 AVPlayerLayer。播放器层可以设置为视图的支持 层或可以直接添加到层层次结构中。不像 AVPlayerView 和 AVPlayerViewController,播放器层没有 呈现任何播放控件,但只是呈现视觉内容 在屏幕上。由您决定将播放传输控件构建到 播放、暂停和搜索媒体。
【讨论】:
对,对不起,省略了我们为播放器层设置框架的代码。帧在代码的其他地方正确设置,在视频播放时由帧验证。这个问题似乎是一个时间问题。如果我们在播放视频之前等待 5-10 秒,则视频每次都能正常播放。【参考方案2】:如果有人遇到此问题,则问题似乎与 iOS 错误有关。该问题不会出现在 iOS 8/9 设备上,只会出现在新的 iOS 10 设备上。从 iOS 10.2 开始,问题就消失了。
不幸的是,仍然没有针对 10.0.x 或 10.1.x 的编程解决方案。
【讨论】:
不出所料,问题又出现在 iOS 12 和 13 上。以上是关于AVPlayer 空白视频:播放声音但没有视频的主要内容,如果未能解决你的问题,请参考以下文章
xcode 8 || AVPlayer 正在显示视频,但没有播放