c++ - 通过 PJSIP 使用两个声音设备
问题描述
这是我的问题:我想用 PJSIP 开发一个 SIP 客户端,更准确地说是用 PJSUA。有了这个 SIP 客户端,我希望能够通过三种不同的方式从呼叫中输出声音。
- 仅在我的耳机内部
- 仅在我的扬声器上
- 在我的耳机内和我的扬声器上同时
下面是我尝试过的代码示例:
int listeningMethod = message[0];
pjmedia_aud_dev_route media;
switch (listeningMethod) {
case (int)EnumListeningDevice::SPEAKER:
printf("Operator asked for SPEAKER\r\n");
media = PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER;
int idMicro;
int idOutput;
if (pjsua_get_snd_dev(&idMicro, &idOutput) == -1) {
printf("Error pjsua_get_snd_dev\r\n");
}
idOutput = obj_PJSIP_Phonie.getIdLoudspeaker();
if (pjsua_set_snd_dev(idMicro, idOutput) != PJ_SUCCESS) {
printf("Error pjsua_set_snd_dev ID OUTPUT = %d\r\n", idOutput);
}
break;
case (int)EnumListeningDevice::HEADSET:
media = PJMEDIA_AUD_DEV_ROUTE_EARPIECE;
printf("Operator asked for HEADSET\r\n");
if (pjsua_get_snd_dev(&idMicro, &idOutput) == -1) {
printf("Error pjsua_get_snd_dev\r\n");
}
idOutput = obj_PJSIP_Phonie.getIdHeadphone();
if (pjsua_set_snd_dev(idMicro, idOutput) != PJ_SUCCESS) {
printf("Error pjsua_set_snd_dev ID OUTPUT = %d\r\n", idOutput);
}
break;
case (int)EnumListeningDevice::SPEAKER_AND_HEADSET:
printf("Operator asked for SPEAKER_AND_HEADSET\r\n");
break;
default:
printf("Error in request\r\n");
break;
}
我可以在耳机或扬声器之间切换,但我找不到同时使用这两种设备的方法。
我试图查看pjmedia_snd_port_create_player函数并尝试了这个:
pjmedia_snd_port* headsetSoundPort;
pjmedia_snd_port* speakerSoundPort;
const char* driverNameHeadset = "WMME";
const char* driverNameSpeaker = "WMME";
const char* deviceNameHeadset = "Haut-parleurs (4- USB audio COD";
const char* deviceNameSpeaker = "Haut-parleurs (3- USB audio COD";
pjmedia_aud_dev_index deviceHeadsetIndex;
pjmedia_aud_dev_index deviceSpeakerIndex;
pjmedia_aud_dev_lookup(driverNameHeadset, deviceNameHeadset, &deviceHeadsetIndex);
pjmedia_aud_dev_lookup(driverNameSpeaker, deviceNameSpeaker, &deviceSpeakerIndex);
pjmedia_snd_port_create_player(pool1, deviceHeadsetIndex, 16000, 2, 160, 16, 0, &headsetSoundPort);
pjmedia_snd_port_create_player(pool1, deviceHeadsetIndex, 16000, 2, 160, 16, 0, &speakerSoundPort);
但没有成功。任何帮助,将不胜感激。随意问的问题。
解决方案
当您尝试切换到两者时,您是否有一些日志?
我假设 PJSIP 每次通话只允许 1 个主要声音设备,就像 1 个仅播放/接收音频的设备一样。如果不查看代码等,我无法确认。
推荐阅读
- c# - C# - 对 WebApi 控制器进行单元测试
- jquery - Bootstrap modal 不显示在引导轮播中,除了活动轮播项目
- android - 我们如何在 Android Q 中访问扩展文件?
- javascript - 从 WP Query 获取数据并放入 javascript 数组
- reactjs - 如何将包含子文件夹中的 create-react-app 的节点项目推送到 GitHub?
- raspberry-pi - 我无法在 Raspberry Pi 的 thingsboard 中创建仪表板
- javascript - 每当 redux 形式的有效性发生变化时触发事件
- mysql - 如何编写一个查询,给出没有蓝房子的每个人的名字?
- json - How to fix the "no value associated" error with CodingKeys?
- oauth-2.0 - Google API 服务不接受生成的 JSON Web Token