AVPlayer 永远无法播放

AVPlayer is never ready to play

我有一个正在加载远程媒体 URLHLS 流)的 AVPlayer,有时播放器从未准备好播放,但没有出现错误。是否有其他地方可能出现错误或检查它是否仍在加载 AVPlayerItem?

的方法

我有 KVO 速率、状态和播放可能会跟上,但在视频未加载时永远不会被调用。我添加了一个按钮来检查播放器上的错误、播放器项目以及播放是否可能跟上。当玩家似乎卡住时,它们会报告 nil、nil 和 false。当播放器卡住时(根本拒绝加载视频)似乎是随机的,它不会发生在特定视频上。

我还可以采取哪些其他步骤来调试此问题?还有其他地方可以检查错误或状态吗?

已检查更多信息: 播放缓冲区为空:true 播放缓冲区已满:false

为了能够在您的应用中从远程服务器加载 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.

我们的解决方案是在重用播放器之前,我们使用 player.replaceCurrentItemWithPlayerItem(nil) 释放 AVPlayer。替换当前项目的某些原因有时会导致问题。我们还确保我们的视频按顺序加载,而不是一次全部加载。这似乎解决了我们的问题。