我正在尝试在我的pjsip应用中使用扬声器,所以我使用的是setOutputRoute:
pjmedia_aud_dev_route 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功能时,此方法才有效,否则将抛出错误。
我想也许我必须设置这个标志......但我不知道如何
答案 0 :(得分:4)
前几天我遇到了同样的问题。我知道它不是答案,只是另一种选择,但我最终使用它并且它运作良好。
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
audioManager.setSpeakerphoneOn(true);
我使用Android AudioManger通过调用 setSpeakerOn()在听筒和扬声器之间切换。如果您使用它,请注意,如果您切换输出,则其设置永久对应于上下文。您可以通过调用 audioManager.isSpeakerphoneOn()来获取当前状态。
答案 1 :(得分:0)
Pjsip/Pjsua 自 2.11 版起不支持以这种方式更改 Android 上的输出路由,但如果您总是希望声音在扬声器上播放,并作为媒体/音乐类型流,您可以更改 PJSIP 用于所有传出 android 音频的流类型。
要更改它,必须修改此文件中用于编译PJSIP的源代码;
pjmedia/src/pjmedia-audiodev/android_jni_dev.c
在创建 android 音轨时,更改此:
0, /* STREAM_VOICE_CALL */
为此:
3, /* STREAM_MUSIC */
这将导致音频作为媒体/音乐类型的音频播放,媒体/音乐的系统音量控制将控制它的音量。