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

iOS 17中AVPlayerViewController无法正常工作问题求助

解决方案:AVPlayerViewController在iOS 17上的播放异常修复

核心修复步骤:

  • 强制在主线程处理AVKit组件
    iOS 17对AVPlayerViewController、AVPlayer的线程要求更严格,必须确保所有实例化、配置操作在主线程执行。修改代码如下:

    DispatchQueue.main.async {
        let playerVC = AVPlayerViewController()
        guard let videoURL = URL(string: "myVideoURL") else { return }
        let player = AVPlayer(url: videoURL)
        playerVC.player = player
        
        self.present(playerVC, animated: true) {
            player.play()
        }
    }
    
  • 验证视频URL有效性
    iOS 17加强了对非HTTPS资源的限制,同时无效URL会直接触发播放器异常。建议提前验证链接可用性:

    guard let videoURL = URL(string: "myVideoURL") else { return }
    let task = URLSession.shared.dataTask(with: videoURL) { _, response, error in
        if let error = error {
            print("视频链接无效:\(error.localizedDescription)")
            return
        }
        // 链接有效再回到主线程初始化播放器
        DispatchQueue.main.async {
            let playerVC = AVPlayerViewController()
            let player = AVPlayer(url: videoURL)
            playerVC.player = player
            self.present(playerVC, animated: true) {
                player.play()
            }
        }
    }
    task.resume()
    
  • 正确配置音频会话
    iOS 17对音频会话的初始化时机要求更高,播放前需提前配置:

    import AVFoundation
    
    do {
        try AVAudioSession.sharedInstance().setCategory(.playback, mode: .moviePlayback)
        try AVAudioSession.sharedInstance().setActive(true)
    } catch {
        print("音频会话配置失败:\(error.localizedDescription)")
    }
    
  • 移除URL强制解包
    原代码中URL(string: "myVideoURL")!的强制解包会隐藏URL无效的问题,改用可选绑定处理,避免隐性崩溃。

错误原因说明:

  • AVSystemController分配失败:基本是因为在非主线程操作AVKit组件,导致系统媒体服务初始化异常。
  • 命令26返回-12784错误:对应AVErrorInvalidItemProperty,通常是视频资源不可用、URL无效,或播放器初始化时机错误引发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 20:52:03