【问题标题】:How to enable speaker in pjsip android app?如何在 pjsip android 应用中启用扬声器?
【发布时间】:2016-10-18 14:31:47
【问题描述】:

我正在尝试在我的 pjsip 应用程序中使用扬声器,所以我正在使用 setOutputRoute:

pjmedia_aud_dev_route 路由=pjmedia_aud_dev_route.PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER; MyApp.ep.audDevManager().setOutputRoute(route, true);

但我收到错误消息:音频功能无效或不受支持 (PJMEDIA_EAUD_INVCAP)。

在 pjsua 中它说:只有设备在 AudioDevInfo.caps 标志中具有 PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE 能力时,此方法才有效,否则将抛出错误。

我在想也许我必须设置这个标志......但我不知道如何

【问题讨论】:

  • 我在 iOS 中也遇到了这个问题。如何使用 pjsip 启用扬声器和关闭扬声器?我试过 PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER 这个。但它在音频中没有任何作用。提前致谢! :)

标签: android audio voip pjsip speaker


【解决方案1】:

Pjsip/Pjsua 自 2.11 版起不支持以这种方式更改 Android 上的输出路由,但如果您总是希望声音在扬声器上播放,并作为媒体/音乐播放type stream,您可以更改 PJSIP 用于所有传出 android 音频的流类型。

要改变它,你必须在这个文件中修改用于编译PJSIP的源;

pjmedia/src/pjmedia-audiodev/android_jni_dev.c

在创建android音轨时,改变这个:

0, /* STREAM_VOICE_CALL */

到这里:

3, /* STREAM_MUSIC */

这将导致音频作为媒体/音乐类型的音频播放,并且媒体/音乐的系统音量控制将控制它的音量。

【讨论】:

    【解决方案2】:

    几天前我遇到了同样的问题。我知道这不是答案,只是一个替代方案,但我最终使用了它并且效果很好。

    AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
    audioManager.setSpeakerphoneOn(true);
    

    我使用 Android AudioManger 通过调用 setSpeakerOn() 在听筒和扬声器之间切换。如果您使用它,请注意,如果您切换输出,其设置将永久对应于上下文。您可以通过调用 audioManager.isSpeakerphoneOn() 获取当前状态。

    【讨论】:

    • 如何使用 jni 将其与 PJSIP 代码分开调用?
    • 嗨@IgorGanapolsky,我不知道,但我认为这个OpenSL ES question 与你的有关。根据您要开发的内容,这可能是一种选择。
    猜你喜欢
    • 2014-08-13
    • 2016-02-21
    • 1970-01-01
    • 2012-08-27
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多