HarmonyOS 鸿蒙Next 如何实现音/视频的静音播放

发布于 1周前 作者 vueper 最后一次编辑是 5天前 来自 鸿蒙OS

问题背景 在后台播放音乐的时候,在前台播放短视频,期望效果是视频以静音的方式起播,此时后台音乐继续播放;视频解除静音后,后台音乐停止播放;视频再次静音时,后台音乐自动恢复播放。实际效果是视频以静音的方式起播后,后台音乐被打断了;视频再次静音时,后台音乐没有恢复播放。

实现方案 需要应用在开始播放视频时,设置静音并发播放模式,设置后系统将让此音频流静音播放,并且不会打断其它音频流;否则音频流会根据系统焦点策略抢占焦点。

如果需要视频再次静音时,后台音乐可以自动恢复播放,需要应用激活音频会话(AudioSession)并指定音频会话策略为暂停模式(CONCURRENCY_PAUSE_OTHERS)。

静音并发播放模式的设置方法如下: AudioRenderer(ArkTS)

调用audioRenderer.setSilentModeAndMixWithOthers(on: boolean),需要注意必须在start前设置,否则start会默认抢焦点。on设置为true,打开静音并发播放模式,系统将让此音频流静音播放,并且不会打断其它音频流;设置为false,将关闭静音并发播放,音频流可根据系统焦点策略抢占焦点。

OHAudio(C/C++)

调用OH_AudioRenderer_SetSilentModeAndMixWithOthers(OH_AudioRenderer *renderer, bool on),需要注意必须在start前设置,否则start会默认抢焦点。on为true: 设置当前播放的音频流静音播放,并且不会打断其它音频流播放;on为false: 取消当前播放的音频流静音播放,音频流可根据系统焦点策略抢占焦点。

AVPlayer(ArkTS)

调用setMediaMuted(mediaType: MediaType, muted: boolean),设置muted为true,打开静音并发播放模式。

注:只能在prepared/playing/paused/completed状态下调用。仅支持设置mediaType为音频格式。

AudioSession的设置方法:

可参考如下代码:

public async setSilentModeAndMixWithOthers(isSupportSilent) { 
  if (isSupportSilent) { 
    this.audioRenderer.setSilentModeAndMixWithOthers(isSupportSilent); 
 
    // 停用AudioSession后,系统发INTERRUPT_HINT_RESUME给之前被打断的音频流 
    audioSessionManager.deactivateAudioSession().then(() => { 
      console.info('deactivateAudioSession SUCCESS'); 
    }).catch((err: BusinessError) => { 
      console.error(`ERROR: ${err}`); 
    }); 
  } else { 
    // 需要先激活AudioSession,再解除静音 
    let strategy: audio.AudioSessionStrategy = { 
      concurrencyMode: audio.AudioConcurrencyMode.CONCURRENCY_PAUSE_OTHERS 
    }; 
    audioSessionManager.activateAudioSession(strategy).then(() => { 
      console.info('activateAudioSession SUCCESS');`` 
    }).catch((err: BusinessError) => { 
      console.error(`ERROR: ${err}`); 
    }); 
  
    this.audioRenderer.setSilentModeAndMixWithOthers(isSupportSilent); 
  } 
}
1 回复

作为IT专家,对于HarmonyOS 鸿蒙Next如何实现音/视频的静音播放的问题,以下提供解决方案:

HarmonyOS 鸿蒙Next系统支持通过编程接口设置音/视频的静音播放。开发者可利用AudioRenderer类中的setSilentModeAndMixWithOthers方法实现静音并发播放模式。具体操作为,在播放音视频前调用此方法,并将参数on设置为true,这样音视频将静音播放,并且不会打断其他音频流。若需取消静音,可再次调用此方法,并将on设置为false。

此外,如果希望视频再次静音时,后台音乐可以自动恢复播放,需要激活音频会话(AudioSession)并指定音频会话策略为暂停模式(CONCURRENCY_PAUSE_OTHERS)。

请注意,以上方法需要在开发环境中实现,并且需确保应用的权限设置允许对音/视频进行相应操作。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部