You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中网络URL视频仅显示加载器无法播放问题求助

解决AVPlayer播放网络视频仅显示缓冲的问题

我之前也碰到过类似的情况,帮你梳理几个可能的原因和对应的解决办法:

1. 先确认视频源的可访问性

首先把你提供的视频URL复制到Safari里打开,看看能不能正常播放。如果浏览器里也加载失败,那大概率是视频服务器的问题:比如服务器的CORS配置限制了App的访问,或者视频文件本身损坏、权限不足。这种情况需要联系服务器端调整配置。

2. 优化AVPlayer的初始化与播放时机

你当前的代码是在present完成后直接调用play(),但这时候AVPlayer可能还没完成视频元数据的加载,导致一直缓冲。可以通过监听AVPlayer的status状态,等它准备好之后再播放:

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 
    guard let url = URL(string: "https://sandbox-api.digiboxx.com/uploads/E2D6024483AB4B04/1602945683_sample_640x360.mp4") else {
        print("Invalid video URL")
        return
    }
    playVideo(url: url) 
} 

func playVideo(url: URL) { 
    let playerItem = AVPlayerItem(url: url)
    let player = AVPlayer(playerItem: playerItem)
    let vc = AVPlayerViewController() 
    vc.player = player 

    // 监听Player的状态变化
    var statusObservation: NSKeyValueObservation?
    statusObservation = player.observe(\.status, options: .new) { [weak self] player, change in
        guard let self = self else { return }
        switch player.status {
        case .readyToPlay:
            // 准备就绪后再弹出播放器并播放
            self.present(vc, animated: true) {
                player.play()
            }
        case .failed:
            print("视频加载失败:\(player.error?.localizedDescription ?? "未知错误")")
        case .unknown:
            print("视频正在加载元数据...")
        @unknown default:
            break
        }
        // 监听完成后销毁观察者
        statusObservation?.invalidate()
    }
}

3. 检查ATS(App Transport Security)配置

iOS默认要求网络请求使用符合ATS标准的HTTPS连接。如果你的视频服务器的TLS版本过低、证书有问题,会导致AVPlayer无法加载视频。可以临时在Info.plist里添加ATS配置来测试(注意这只是临时方案,正式上线建议修复服务器的ATS兼容性):

在Info.plist中添加如下字典:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

4. 确认网络权限(iOS 14+)

如果你的App是iOS 14及以上版本,确保已经在Info.plist中添加了网络权限描述:

  • 若需要蜂窝网络播放,添加NSCellularDataUsageDescription
  • 通用网络权限可以结合上面的ATS配置一起设置

你可以按照这个顺序逐一排查,先从视频URL的可访问性开始,再调整代码的播放逻辑,应该能解决缓冲无法播放的问题。

内容的提问来源于stack exchange,提问作者A J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 15:22:46