iOS平台PJSIP无法检测音频设备,呼叫报错PJMEDIA_EAUD_NODEFDEV
解决PJSIP iOS示例“无法找到默认音频设备”问题
错误日志
12:00:29.220 pjsua_aud.c .Set sound device: capture=-1, playback=-2, mode=0, use_default_settings=0 12:00:29.221 pjsua_aud.c ..Error retrieving default audio device parameters: Unable to find default audio device (PJMEDIA_EAUD_NODEFDEV) [status=420006] 12:00:29.223 pjsua_media.c .Call 0: deinitializing media.. 12:00:29.223 call.cpp pjsua_call_make_call(acc.getId(), &pj_dst_uri, param.p_opt, this, param.p_msg_data, &id) error: Unable to find default audio device (PJMEDIA_EAUD_NODEFDEV) (status=420006) [../src/pjsua2/call.cpp:701] pjsua_call_make_call(acc.getId(), &pj_dst_uri, param.p_opt, this, param.p_msg_data, &id) error: Unable to find default audio device (PJMEDIA_EAUD_NODEFDEV)
原编译步骤
sudo make distclean sudo make clean export DEVPATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/ export ARCH="-arch x86_64" CFLAGS="-O2 -m32 -mios-simulator-version-min=5.0" LDFLAGS="-O2 -m32 -mios-simulator-version-min=5.0" ./configure-iphone sudo make dep sudo make sudo make install
环境信息
- PJSIP版本:2.13.1
- macOS版本:Ventura 13.5
- iOS版本:16.4
解决办法
1. 区分模拟器/真机重新编译PJSIP
原编译命令仅适配x86_64模拟器,且指定了过时的iOS最低版本(5.0),导致PJSIP无法兼容iOS 16的音频架构,需分别针对两种环境重新编译:
模拟器编译命令:
sudo make distclean && sudo make clean export DEVPATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/ export ARCH="-arch x86_64" export CFLAGS="-O2 -mios-simulator-version-min=16.0" export LDFLAGS="-O2 -mios-simulator-version-min=16.0" ./configure-iphone --enable-ios-framework sudo make dep && sudo make && sudo make install
真机编译命令:
sudo make distclean && sudo make clean export DEVPATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/ export ARCH="-arch arm64" export CFLAGS="-O2 -mios-version-min=16.0" export LDFLAGS="-O2 -mios-version-min=16.0" ./configure-iphone --enable-ios-framework sudo make dep && sudo make && sudo make install
2. 添加iOS音频权限
在项目的Info.plist中添加麦克风权限声明,否则应用无法访问系统音频设备:
- 新增
NSMicrophoneUsageDescription键,值为“需要麦克风进行语音通话”(可自定义说明) - 若使用蓝牙音频,需额外添加
NSBluetoothAlwaysUsageDescription键
3. 手动指定音频设备(调试用)
初始化PJSIP Endpoint时,强制指定音频设备ID,跳过默认设备检测逻辑:
let epConfig = EpConfig() // 强制使用系统第一个音频设备 epConfig.audioConfig.devConfig.captureDev = 0 epConfig.audioConfig.devConfig.playbackDev = 0 do { let ep = Endpoint() try ep.libInit(epConfig) // 后续初始化逻辑... } catch { print("Endpoint初始化失败: \(error)") }
4. 确认编译时启用音频驱动
编译时通过参数明确启用PJSIP音频模块,避免配置遗漏:
./configure-iphone --enable-ios-framework --enable-audio
注意:libasound2-dev是Linux平台的音频依赖库,完全不适用于iOS,无需在macOS上尝试安装。
内容的提问来源于stack exchange,提问作者Define
相关产品推荐
相关产品推荐

