AVPlayer 永远无法播放
Posted
技术标签:
【中文标题】AVPlayer 永远无法播放【英文标题】:AVPlayer is never ready to play 【发布时间】:2016-07-21 19:38:10 【问题描述】:我有一个AVPlayer
正在加载远程媒体URL
(HLS
流),有时播放器永远无法播放,但没有出现错误。是否有其他地方可能出现错误或检查它是否仍在加载AVPlayerItem
?
我有KVO
的速率、状态和播放可能会跟上,当视频未加载时永远不会被调用。我添加了一个按钮来检查播放器、播放器项目上的错误以及播放是否可能跟上。当玩家似乎卡住时,这些报告 nil、nil 和 false。播放器卡住时似乎是随机的(根本拒绝加载视频),它不会发生在特定的视频上。
我还可以采取哪些其他步骤来调试此问题?还有其他地方可以检查错误或状态吗?
查看更多信息: 播放缓冲区为空:true 播放缓冲区已满:false
【问题讨论】:
你真的要求玩家玩吗? 是的,我添加了一个额外的按钮来确保这种情况发生,但仍然没有运气。同一播放器在其他情况下工作,这很奇怪。我们正在更改播放器项目以重用给播放器,并将观察者添加到新项目中,但使用按钮记录状态表明 KVO 工作正常,项目只是永远不会命中可能跟上。 你能贴出代码吗?是否只有在您交换播放器物品并尝试重复使用播放器时才会发生这种情况? 我们正在重用播放器,但我不相信只有在我们交换播放器物品时才会发生这种情况。我们过去不重复使用播放器,我们相信我们当时仍然看到它。我会留意的,但我认为这与玩家重复使用无关。我会看看我们是否也能得到一些代码。 添加有问题的代码,说明您如何管理它! 【参考方案1】:我们的解决方案是在重用播放器之前,使用player.replaceCurrentItemWithPlayerItem(nil)
释放 AVPlayer。替换当前项目的某些原因有时会导致问题。我们还确保我们的视频按顺序加载,而不是一次全部加载。这似乎解决了我们的问题。
【讨论】:
【参考方案2】:为了能够从您的应用程序中从远程服务器加载 URL,您必须将其添加到您的 info.plist
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>mydomain.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<false/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<true/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSRequiresCertificateTransparency</key>
<false/>
</dict>
</dict>
</dict>
see the docs
不要完全按照我输入的方式添加行。根据您的需要配置它们。请注意,Apple 对 ios 的默认配置是期待 https
连接,而不是 http
。您必须将其配置为允许http
。
【讨论】:
以上是关于AVPlayer 永远无法播放的主要内容,如果未能解决你的问题,请参考以下文章
使用 AVPlayer 时为啥我的视频无法在我的 UIView 中播放