tvOS开发调用AVPlayerViewController全屏播放时报AddInstanceForFactory错误如何解决
tvOS AVPlayer全屏播放故障修复方案
核心问题定位
你日志中打印的三类报错均为tvOS模拟器的已知兼容类日志,不是导致播放器无法正常工作的根本原因,核心问题出在两点:
- 你使用了HTTP协议的视频资源,默认App Transport Security(ATS)规则禁止加载非HTTPS的网络资源,导致视频加载被拦截
- 代码中提前在
viewDidLoad初始化AVPlayer,资源预加载超时后点击播放时已经失效
修复步骤
- 第一步:配置ATS权限,允许HTTP资源加载
打开项目的Info.plist,添加如下配置:
新增NSAppTransportSecurity(类型为字典),在该字典下新增NSAllowsArbitraryLoads(类型为布尔值),值设为YES。如果是生产环境建议只给指定域名添加例外,避免全开ATS风险。 - 第二步:优化代码逻辑,将播放器初始化移到点击触发时执行
优化后的代码如下:
import UIKit import AVKit import AVFoundation class ViewController: UIViewController { let avPlayerViewController = AVPlayerViewController() override func viewDidLoad() { super.viewDidLoad() } @IBAction func playButtonTapped(_ sender: Any) { guard let movieURL = URL(string: "http://techslides.com/demos/sample-videos/small.mp4") else { return } let avPlayer = AVPlayer(url: movieURL) avPlayerViewController.player = avPlayer // 弹出播放器并播放 self.present(avPlayerViewController, animated: true) { avPlayer.play() } } }
- 第三步:测试验证
优先使用tvOS真机测试,模拟器出现播放异常时可尝试重置模拟器( Simulator -> Device -> Erase All Content and Settings )后重新运行,避免模拟器缓存导致的异常。
补充说明:日志中的
libquic failed、MEMixerChannel、工厂ID未注册三类报错均为tvOS模拟器的系统级日志,和业务代码无关,修复上述两个核心问题后即可正常播放视频,这些日志可以直接忽略。
内容的提问来源于stack exchange,提问作者Idesh
相关产品推荐
相关产品推荐

