HarmonyOS 鸿蒙Next播放控件
HarmonyOS 鸿蒙Next播放控件 播放视频时打断导致播控状态不正确
【背景知识】
- AVPlayer:AVPlayer主要工作是将Audio/Video媒体资源(比如mp4/mp3/mkv/mpeg-ts等)转码为可供渲染的图像和可听见的音频模拟信号,并通过输出设备进行播放(Interface (AVPlayer))。
- AVSession Kit(音视频播控服务):用户除了在视频界面控制视频状态外,还可以通过给应用接入AVSession播控中心(AVSession相关API),使用户在播控中心也能看到当前播放视频的信息,并通过播控中心直接对视频进行快进、快退、拖动进度、播放暂停、切换、调节音量等操作。
- 音频焦点和音频会话:在应用播放或录制声音时,常出现与其他音频流的并发或中断情况,系统预设了默认的音频焦点策略,同时也提供了音频会话(AudioSession)机制,允许应用自定义其音频流的焦点策略。
- 多音频并发打断:当多个音频流并发播放时,只有持有音频焦点的音频流才可以正常播放,避免出现多个音频流无序并发播放的现象。
- 应用在播放音频(含视频)的过程中,若有其他音频流申请音频焦点(如用户唤起小艺、打开其他应用播放音视频等),系统会根据音频焦点策略进行焦点处理。如果系统判定应用音频流的焦点有变化,会自动执行一些必要的操作,如:执行暂停、继续、降低音量、恢复音量等操作,并通过音频打断事件(InterruptEvent)通知到应用。
- on(‘audioInterrupt’):监听音频中断事件(当音频焦点发生变化时触发)。当收到音频打断事件(InterruptEvent)时,应用根据其音频打断类型(InterruptForceType)和中断提示(InterruptHint)做出相应的处理策略。
如果使用了AVPlayer播放视频,audioRendererInfo会被默认设置成Movie,应用无需处理。
使用on(‘audioInterrupt’)监听音频打断时,要注意使用的视频资源必须有音频流,否则无法触发音频打断事件。
【问题定位】
检查是否通过on(‘audioInterrupt’)对音频打断事件InterruptEvent进行监听,并根据音频打断类型InterruptForceType和中断提示InterruptHint正确管理视频播放状态。
- 检查是否更新AVPlayer播放器的状态。如,对于打断类型为INTERRUPT_FORCE(强制中断),中断提示为INTERRUPT_HINT_PAUSE(音频暂停)的打断事件,主动调用AVPlayer的pause接口来保证状态一致。
- 当接入了媒体会话管理AVSession时,检查是否调用setAVPlaybackState同步播控中心的播放状态。接入详情可参考应用接入AVSession场景介绍。
- 处理音频打断事件时,也需检查UI组件播放状态的同步逻辑是否完善,避免视频播放的UI组件状态异常。
【分析结论】
在视频播放被打断的场景中,可能导致播放状态异常(或者不符合当前场景)的情形包括以下三种:
- 未更新AVPlayer播放器的状态,导致不满足相应场景,如先暂停后恢复的场景,没有实现视频继续播放。
- 未更新AVSession播放状态,导致播控中心状态和实际视频状态不一致。
- 未更新UI组件播放状态,导致视觉呈现和实际视频状态不一致。
【修改建议】
在处理音视频打断事件时,需保持AVPlayer、AVSession和页面UI播放状态一致。以应用处理音视频播放被打断后,先暂停后恢复的场景为例(其他关于音频流状态交互可参考多音频并发打断):
- 当后台应用响起时,视频应用会监听到音频打断类型InterruptForceType为INTERRUPT_FORCE(强制打断),中断提示InterruptHint为INTERRUPT_HINT_PAUSE(音频暂停)事件,此时系统内部会自动暂停视频播放,但AVPlayer播放器的状态不会自动变为暂停,应用需要主动调用AVPlayer的暂停接口来保证状态一致。
- 当后台应用音频结束后,视频应用会监听到打断类型为INTERRUPT_SHARE(共享打断),中断提示为INTERRUPT_HINT_RESUME(音频恢复)事件,应用需要在相应的事件中主动调用AVPlayer的播放接口完成恢复。
完整示例可以参考使用AVPlayer播放视频完整示例。
更多关于HarmonyOS 鸿蒙Next播放控件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
鸿蒙Next播放控件基于ArkTS/ArkUI开发,支持媒体会话管理、播控命令处理和状态同步。提供AVPlayer组件实现音视频播放功能,包含预加载、缓冲控制、播放列表管理能力。控件集成媒体元数据解析,支持HLS、DASH流媒体协议。通过媒体服务框架实现后台播放与锁屏界面控制,具备多实例管理和DRM数字版权保护功能。
在HarmonyOS Next中,播放控件状态因中断(如来电、通知或应用切换)导致不一致是常见问题。建议通过以下方式优化:
- 
生命周期管理:在 onPause()中暂停播放并保存状态,在onResume()中恢复播放进度,使用MediaController同步UI状态。
- 
事件监听:注册 AudioManager.AUDIO_BECOMING_NOISY等系统事件,及时处理音频焦点变化。
- 
状态持久化:利用 Preferences或本地数据库存储播放进度,确保中断后能准确恢复。
- 
异步处理:使用 TaskDispatcher管理播放任务,避免UI线程阻塞导致状态不同步。
注意在MediaPlayer回调中统一更新控件状态,减少时序问题。
 
        
       
                   
                   
                  

