HarmonyOS OH\_Audio设置renderer的AUDIOSTREAM\_USAGE\_VOICE\_COMMUNICATION后连接蓝牙耳机播放声音只能听到'叮'一声?

OH\_Audio中音频播放初始化时如果添加,如下设置后,在连接蓝牙耳机播放时,只能听到’叮’一声,之后声音还是从手机播放出来,如果不添加这行设置, 播放声音时可以从蓝牙耳机听到正常声音。

OH_AudioStreamBuilder_SetRendererInfo(rendererBuilder, AUDIOSTREAM_USAGE_VOICE_COMMUNICATION); 

Renderer完整的初始化代码如下:

static napi_value AudioRendererInit(napi_env env, napi_callback_info info) {
  if (audioRenderer) {
    OH_AudioRenderer_Release(audioRenderer);
    OH_AudioStreamBuilder_Destroy(rendererBuilder);
    audioRenderer = nullptr;
    rendererBuilder = nullptr;
  }

  if (g_file) {
    fclose(g_file);
    g_file = nullptr;
  }

  g_file = fopen(g_filePath.c_str(), "rb");

  if (g_file == nullptr) {
    return 0;
  }

  // create builder
  OH_AudioStreamBuilder_Create(&rendererBuilder, AUDIOSTREAM_TYPE_RENDERER);
  // set params and callbacks
  OH_AudioStreamBuilder_SetSamplingRate(rendererBuilder, g_samplingRate);
  OH_AudioStreamBuilder_SetChannelCount(rendererBuilder, g_channelCount);
  OH_AudioStreamBuilder_SetLatencyMode(rendererBuilder, AUDIOSTREAM_LATENCY_MODE_NORMAL);
  OH_AudioStreamBuilder_SetFrameSizeInCallback(rendererBuilder, 2500);
  OH_AudioStreamBuilder_SetRendererInfo(rendererBuilder, AUDIOSTREAM_USAGE_VOICE_COMMUNICATION); // 打开后蓝牙无法正常播放声音, 只能听到'叮'一声
  OH_AudioStreamBuilder_SetRendererPrivacy(rendererBuilder, AUDIO_STREAM_PRIVACY_TYPE_PUBLIC);
  OH_AudioRenderer_Callbacks rendererCallbacks;
  rendererCallbacks.OH_AudioRenderer_OnWriteData = AudioRendererOnWriteData;
  rendererCallbacks.OH_AudioRenderer_OnStreamEvent = AudioRendererOnStreamEvent;
  rendererCallbacks.OH_AudioRenderer_OnInterruptEvent = AudioRendererOnInterruptEvent;
  rendererCallbacks.OH_AudioRenderer_OnError = AudioRendererOnError;
  OH_AudioStreamBuilder_SetRendererCallback(rendererBuilder, rendererCallbacks, nullptr);
  OH_AudioStreamBuilder_SetRendererOutputDeviceChangeCallback(rendererBuilder, AudioRendererDeviceChangeCallback, nullptr);
  OH_AudioStreamBuilder_SetRendererInterruptMode(rendererBuilder, AUDIOSTREAM_INTERRUPT_MODE_INDEPENDENT);
  // create OH_AudioRenderer
  OH_AudioStream_Result result = OH_AudioStreamBuilder_GenerateRenderer(rendererBuilder, &audioRenderer);
  g_readEnd = false;
  g_rendererLowLatency = false;
  OH_LOG_Print(LOG_APP, LOG_DEBUG, LOG_DOMAIN, "AudioOHAudio", "AudioRendererLowLatencyInit result:%{public}d", result);
  return nullptr;
}

操作步骤:

1、连接蓝牙耳机后,打开app。

2、播放声音,如果设置了SetRendererInfo,播放的声音异常,如果不设置SetRendererInfo,可以正常播放。

阅读 437
1 个回答

当设AUDIOSTREAM\_USAGE\_VOICE\_COMMUNICATION,会导致cn.rongcloud.rtc调用的SetDeviceActive中的设备选择(speaker)生效,所以声音从speaker播放。当不设AUDIOSTREAM\_USAGE\_VOICE\_COMMUNICATION(默认是Music),那么系统会自动选择设备,用蓝牙耳机播放。代码中调用了setCommunicationDevice选择了设备(RCRTCAudioRenderer.ets),注释掉就正常从蓝牙播放,此接口也不再推荐开发者调用,系统会自动选择最佳设备,应用无需关注。https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-audio-V5\#setcommunicationdevice9

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
HarmonyOS
子站问答
访问
宣传栏