【问题标题】:Use two sound device with PJSIP通过 PJSIP 使用两个声音设备
【发布时间】:2021-10-18 16:12:32
【问题描述】:

这是我的问题:我想用 PJSIP 开发一个 SIP 客户端,更准确地说是用 PJSUA。有了这个 SIP 客户端,我希望能够通过三种不同的方式从通话中输出声音。

  1. 仅在我的耳机中
  2. 仅在我的扬声器上
  3. 在我的耳机内和扬声器上同时使用

下面是我尝试过的代码示例:

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);

但没有成功。任何帮助,将不胜感激。随时提问。

【问题讨论】:

    标签: c++ audio sip voip pjsip


    【解决方案1】:

    当您尝试切换到两者时,您是否有一些日志?

    我假设 PJSIP 每次通话仅允许 1 个主要声音设备,例如 1 个仅播放/接收音频的设备。如果不查看代码等,我无法确认。

    【讨论】:

    • 我不知道如何切换到这两个是我想要做的。我试图这样做link,但它不起作用。你有什么建议吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多