HarmonyOS鸿蒙Next中AVPlayer播放音频如何切换到听筒模式播放

HarmonyOS鸿蒙Next中AVPlayer播放音频如何切换到听筒模式播放 在IM播放语音场景,当手机靠近耳朵时(距离传感器部分已实现),需要将语言切换到听筒模式,

请问AVPlayer 播放音频 如何切换到听筒模式播放?

8 回复

在 AVPlayer 处于 initialized 状态,调用 prepare 方法前设置 audioRendererInfo 属性为:

{
  usage: audio.StreamUsage.STREAM_USAGE_VOICE_COMMUNICATION,
  rendererFlags: 0,
}

即可用听筒播放。

更多关于HarmonyOS鸿蒙Next中AVPlayer播放音频如何切换到听筒模式播放的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


可以通过AVCastPicker组件来实现切换播放模式。具体可参考: https://developerlf.hwcloudtest.cn/consumer/cn/doc/harmonyos-guides-V5/using-switch-call-devices-V5

参考代码:

import AVCastPicker from '@ohos.multimedia.avCastPicker'
import AVSessionManager from '@ohos.multimedia.avsession';

@Entry
@Component
struct Index {
  async onPageShow(){
    // 开始创建并激活媒体会话 // 创建session
    let context: Context = getContext(this)
    let type: AVSessionManager.AVSessionType = 'voice_call';
    let session = await AVSessionManager.createAVSession(context,'SESSION_NAME', type);
    console.log('AVSession成功:'+JSON.stringify(session))
    // 激活接口要在元数据、控制命令注册完成之后再执行
    await session.activate();
    console.info(`session create done : sessionId : ${session.sessionId}`);
  }
  
  build() {
    Row() {
      Column() {
        AVCastPicker()
          .width('40vp')
          .height('40vp')
          .border({ width: 1, color: Color.Red })
      }
      .height('50%')
    }
    .width('50%')
  }
}

暂不支持通过api自动切换听筒和扬声器播放音频,只能通过AVCastPicker组件来让用户自行选择播放模式。AVPlayer没有相关切换接口,具体可看代码示例

我也在研究这个功能,尝试使用AVPlayer播放发现没办法切换听筒扬声器。后来改成用AudioRenderer播放,发现这个只能播放PCM编码格式的,我现在在研究怎么调OH_AVCodec (C++)去做音频解码。

讲真,我就想做一个聊天列表中的音频播放听筒扬声器切换,研究了一周了。这种简单的功能应该系统来做支持,而不是我们自己研究。AVPlayer要是加上听筒扬声器切换,一上午就能搞完这个需求,现在这需求压在我手里一周了,都是做客户端的C++早就还给课本了。

您好,请问现在有实现的方案了吗?也在做这个功能遇到了同样的问题。

我这也是,看了一天文档了,官方没有做切换的接口,

哈哈,同问呢,我现在开始研究下这个功能

在HarmonyOS鸿蒙Next中,AVPlayer播放音频切换到听筒模式播放可以通过设置音频路由实现。具体步骤如下:

  1. 获取AudioManager实例。
  2. 使用AudioManagersetMode方法设置音频模式为AudioManager.MODE_IN_COMMUNICATION
  3. 使用AudioManagersetSpeakerphoneOn方法关闭扬声器,强制音频通过听筒输出。

示例代码如下:

import audio from '@ohos.multimedia.audio';

let audioManager = audio.getAudioManager();
audioManager.setMode(audio.AudioManagerMode.MODE_IN_COMMUNICATION);
audioManager.setSpeakerphoneOn(false);

通过以上步骤,AVPlayer播放的音频将切换到听筒模式。

在HarmonyOS鸿蒙Next中,使用AVPlayer播放音频时,可以通过设置音频输出模式来切换到听筒模式。具体步骤如下:

  1. 使用AudioManager获取音频管理器实例。
  2. 调用AudioManagersetMode方法,将模式设置为AudioManager.MODE_IN_COMMUNICATION,这会将音频路由到听筒。
  3. 使用AudioManagersetSpeakerphoneOn方法,传入false,关闭扬声器模式,确保音频通过听筒播放。

代码示例:

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
audioManager.setSpeakerphoneOn(false);

这样,AVPlayer播放的音频就会通过听筒输出,适合需要私密听音的场景。

回到顶部