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

AVPlayerViewController点击全屏按钮后无法播放,求排查方向

AVPlayerViewController嵌入后全屏黑屏无响应的排查方向
  • 检查AVPlayer实例的强引用情况
    若AVPlayer是局部变量或仅被弱引用,切换全屏时可能因实例被释放导致播放引擎失效。要确保AVPlayer被父控制器或全局对象强引用,避免仅在添加子控制器的方法中临时创建。

  • 确认子控制器添加流程的完整性
    即使调用了addChild,也要确保完成完整的生命周期回调:

    addChild(playerVC)
    view.addSubview(playerVC.view)
    playerVC.view.frame = playerContainer.bounds
    playerVC.didMove(toParent: self)
    

    未正确调用didMove(toParent:)会导致系统在全屏切换时无法正确管理AVPlayerViewController的视图层级,引发渲染异常。同时避免过度修改AVPlayerViewController的视图层级或约束,保留系统默认的视图管理逻辑。

  • 排查音频会话配置冲突
    全屏切换时系统会重新处理音频会话,若其他模块修改了音频会话配置(比如错误设置AVAudioSession.Category或未正确激活会话),可能导致音频输出中断,进而引发视频渲染停滞。可以在全屏切换前后打印音频会话状态排查:

    let session = AVAudioSession.sharedInstance()
    print(session.category, session.isActive)
    

    确保没有多模块同时修改音频会话,避免干扰AVPlayer的会话状态。

  • 检查自定义手势或控制逻辑的冲突
    父视图或AVPlayerViewController视图上的自定义手势(如全屏手势、点击手势)可能与系统默认的全屏交互逻辑冲突,导致全屏后控制按钮无响应、播放状态不同步。可以暂时移除所有自定义手势,测试全屏功能是否恢复。

  • 验证AVPlayerItem的状态监听逻辑
    若对AVPlayerItem添加了状态监听,要检查回调逻辑是否在全屏切换时错误修改了播放状态(比如误触发暂停),或导致AVPlayerItem的status变为.failed。可在全屏切换前后打印相关状态排查:

    print(player.timeControlStatus, player.currentItem?.status ?? .unknown)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 07:11:15