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
相关产品推荐
相关产品推荐

