蘑菇视频ios后台播放时横竖屏设置15个关键点(少一个都不顺)
蘑菇视频 iOS 后台播放时横竖屏设置 15 个关键点(少一个都不顺)

简介 蘑菇视频在 iOS 上实现流畅的后台播放和横竖屏切换,用户体验直接决定留存与口碑。下面整理出面向产品与工程的 15 个关键点,覆盖 Info.plist、音频会话、画中画、界面方向管理、前后台切换与远程控制等。按此清单逐项核对,能大幅减少奇怪的播放中断、方向异常与控制失灵问题。
-
Info.plist 中声明后台播放模式 在 Xcode 的 Info.plist 中添加 UIBackgroundModes 并包含 audio(或在 Xcode 的 Capabilities → Background Modes 打开 “Audio, AirPlay, and Picture in Picture”)。否则音频播放在切到后台会被挂起。
-
设置 AVAudioSession 到 playback 激活 AVAudioSession 并设置类别为 .playback,允许后台播放并支持锁屏/控制中心控制。 示例(Swift): let session = AVAudioSession.sharedInstance() try? session.setCategory(.playback, mode: .moviePlayback, options: []) try? session.setActive(true)
-
使用 AVPlayer/AVPlayerItem 正确管理资源 避免在进入后台时释放关键对象。AVPlayer/AVPlayerItem 应由长期持有的对象(例如播放管理单例或持久播放控制器)持有,避免被 ARC 提早释放导致后台断流。
-
支持画中画(Picture in Picture)以便后台视觉体验 启用 AVPictureInPictureController(iPhone 与 iPad 的可用性随 iOS 版本)。画中画允许视频在用户离开播放器界面时继续展示。确保视频图层是 AVPlayerLayer 并正确配置。 注意:PIP 需要在支持的设备与 iOS 版本上测试。
-
在前后台切换时保存并恢复 UI 状态与方向 在 AppDelegate/SceneDelegate 或观察 UIApplication.willResignActiveNotification、willEnterForegroundNotification 时,记录当前播放状态、横竖屏状态与播放位置,回来时恢复。避免回到前台时界面方向错乱或全屏状态丢失。
-
管理支持的界面方向(Info.plist + ViewController) 在 Info.plist 中设置 Supported interface orientations(iPhone/iPad),并在需要的播放页面重写 supportedInterfaceOrientations/ preferredInterfaceOrientationForPresentation。通过设计明确哪些界面支持横屏/竖屏,避免全局冲突。
-
避免使用私有 API 强制旋转 不要靠 UIDevice.setValue(…) 等非公开方法强行设置设备方向。改用合适的 UIViewController 呈现方式(模态、navigation controller override)和 supportedInterfaceOrientations 的控制,保障上架合规。
-
以播放控制器为方向控制的“权威” 把支持方向的判断放在播放器的容器 ViewController 上,例如覆写 supportedInterfaceOrientations 返回当前播放模式对应的方向。这样用户从其他页面返回时,方向逻辑有集中入口,易维护。
-
响应系统中断与路由变化 监听 AVAudioSession.interruptionNotification 和 AVAudioSession.routeChangeNotification:处理中断(电话/铃声)时暂停或恢复播放;音频路由变更(插拔耳机)时相应调整播放与 UI 提示。
-
支持远程命令与锁屏信息 使用 MPNowPlayingInfoCenter 更新锁屏信息(标题、艺术图、时长、当前播放时间),并使用 MPRemoteCommandCenter 注册 play/pause/next/previous。这样后台播放才能被系统控制并显示良好信息。
-
处理后台播放时的计时与进度更新 后台运行中,不能频繁更新 UI。将进度更新逻辑与 MPNowPlayingInfoCenter 的 elapsedPlaybackTime 同步,必要时使用较低频率和低开销的计时机制。
-
处理屏幕方向锁定情形 当用户锁定了屏幕方向,应用应尊重系统设置。允许用户在播放器内手动切换(按钮)并做平滑过渡,而非程序强制改变设备方向。
-
避免界面布局在后台被频繁重计算 进入后台不需要更新 UI 布局,暂停自动布局或昂贵的渲染计算。回到前台时再恢复渲染/动画,减少卡顿风险。
-
测试各种场景并建立回归用例 列出并自动化测试以下关键场景:耳机插拔、电话/闹钟中断、锁屏播放、控制中心播放/暂停、画中画开启/关闭、从后台切回前台时横竖屏恢复。把这些场景纳入 CI 的手动测试清单以便回归验证。
-
用户体验细节:过渡动画与视觉提示 在进入/退出全屏、切换横竖屏或打开 PIP 时提供一致的过渡动画与进度提示。后台恢复时显示“恢复播放中/已暂停”等状态,明确反馈,减少用户困惑。
附加小贴士(方便工程与产品协作)
- 版本差异:不同 iOS 版本和设备对 PIP、后台策略、控制中心行为存在差异,版本兼容必须测试覆盖主流机型与系统版本。
- 日志与分析:对后台播放、PIP 使用率、中断次数等埋点分析,识别用户常触发的问题场景。
- 权限与隐私:后台播放本身无需额外权限,但如果要显示媒体封面或从网络拉取资源,应确保合理缓存与带宽策略,避免后台大量网络请求被系统限制。
结语与检查清单 把上面 15 项当成发布前的核对单:Info.plist 背景权限、AVAudioSession 设置、AVPlayer 持续性、画中画支持、方向控制集中化、处理中断与路由、远程命令与锁屏信息、前后台状态保存恢复与场景测试。按此梳理,蘑菇视频在后台播放时的横竖屏体验会更稳定、更专业。
需要我把这些要点整理成团队的发布核对表(含必测用例与示例代码段)吗?可以直接根据你们现在的代码结构定制具体改动建议。