You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android SIP通话无音频问题技术求助:POC项目双向无声音故障排查

嘿,我碰到过不少类似的SIP音频坑,咱们一步步来排查解决:

1. 先补全必要的权限

你提供的清单片段里只提到了minSdkVersion,但SIP通话依赖关键权限,缺了这些肯定没音频。把下面的权限加到你的AndroidManifest.xml里:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.USE_SIP" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<!-- 声明硬件依赖,确保设备支持 -->
<uses-feature android:name="android.hardware.sip.voip" android:required="true" />
<uses-feature android:name="android.hardware.microphone" android:required="true" />

另外,Android 6.0及以上系统,你还得在代码里动态申请RECORD_AUDIO和MODIFY_AUDIO_SETTINGS这两个危险权限,不然权限会被拒绝。

2. 强制配置音频路由与焦点

SIP通话需要把系统音频切换到「通话模式」,不然音频会走普通媒体通道,导致没声音。在发起呼叫/接听呼叫的代码里加上这段:

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
// 保存当前音频模式,通话结束后恢复
int originalAudioMode = audioManager.getMode();

// 切换到通话专用模式
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
// 请求音频焦点,确保通话优先
int focusResult = audioManager.requestAudioFocus(
    null, 
    AudioManager.STREAM_VOICE_CALL, 
    AudioManager.AUDIOFOCUS_GAIN_TRANSIENT
);

if (focusResult != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
    // 处理焦点获取失败的情况,比如提示用户关闭其他音频应用
    return;
}

// 可选:开启扬声器(如果需要免提),或者设为false用听筒
audioManager.setSpeakerphoneOn(true);

通话结束后一定要记得恢复音频设置:

audioManager.setMode(originalAudioMode);
audioManager.abandonAudioFocus(null);
audioManager.setSpeakerphoneOn(false);
3. 检查SIP会话的音频初始化

在通话建立的回调里,必须手动启动音频流并解锁麦克风:

@Override
public void onCallEstablished(SipAudioCall call) {
    try {
        // 绑定音频模式
        call.setAudioMode(AudioManager.MODE_IN_COMMUNICATION);
        // 启动音频传输
        call.startAudio();
        // 确保麦克风没被静音
        call.setMicrophoneMute(false);
    } catch (IOException e) {
        e.printStackTrace();
        call.close();
    }
}

至于设备A没有拨号音的问题:系统默认的拨号音可能因为音频模式没切换而无法播放,你可以手动添加一个音频文件,在发起呼叫时用MediaPlayer播放。

4. 硬件与系统设置排查
  • 先确认两台设备的麦克风、扬声器正常(录一段音/播放音乐测试)
  • 检查设备的通话音量是否调大,有没有开启静音
  • 部分设备可能需要在系统设置里启用「VoIP通话音频权限」,去设置里找找相关选项

内容的提问来源于stack exchange,提问作者Pieter Du Toit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:26:53