Swift 4中使用AVPlayerViewController远程播放视频失败求助
排查Swift 4中AVPlayer远程播放视频失败的问题
我来帮你梳理下可能遗漏的配置和步骤,你的代码逻辑框架没问题,但几个细节很容易踩坑:
先修正URL拼写与安全解包:你代码里的
http://example.come/...域名明显写错了(应该是example.com),这会直接导致URL解析失败;而且你用了强制解包videoURL!,如果URL无效会直接触发崩溃。建议换成安全的可选绑定写法:guard let videoURL = URL(string: "http://example.com/package=07e9a825-7be4-4ce7-8a6ec78b") else { print("无效的视频URL,请检查地址") return } let player = AVPlayer(url: videoURL)ATS(App Transport Security)配置:iOS默认只允许HTTPS请求,禁止HTTP资源加载。如果你的视频URL是HTTP协议,必须在
Info.plist里添加ATS例外配置:- 右键打开Info.plist,选择「Add Row」
- 添加
App Transport Security Settings(类型为Dictionary) - 在这个字典下添加
Allow Arbitrary Loads,设置值为YES(如果是固定域名,更推荐用Exception Domains配置单个域名的例外,安全性更高)
确保AVPlayer就绪后再播放:直接调用
play()可能因为视频资源还没加载完成而失败,建议监听AVPlayer的status属性判断播放时机:let playerViewController = AVPlayerViewController() playerViewController.player = player // 添加KVO监听播放状态 var statusObservation: NSKeyValueObservation? statusObservation = player.observe(\.status, options: [.new]) { [weak self] player, _ in guard let self = self else { return } switch player.status { case .readyToPlay: self.present(playerViewController, animated: true) { player.play() } case .failed: print("播放失败:\(player.error?.localizedDescription ?? "未知错误")") case .unknown: print("正在加载视频资源...") @unknown default: break } statusObservation?.invalidate() // 监听完成后销毁 }确认视频编码兼容性:浏览器能播放的MP4不一定符合AVPlayer的要求,AVPlayer只支持H.264(Baseline/Main/High profile)视频编码和AAC-LC音频编码的MP4文件,你可以用MediaInfo这类工具检查视频的编码格式是否达标。
内容的提问来源于stack exchange,提问作者masil
相关产品推荐
相关产品推荐

