【发布时间】:2021-10-18 16:12:32
【问题描述】:
这是我的问题:我想用 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);
但没有成功。任何帮助,将不胜感激。随时提问。
【问题讨论】: