电子元器件表面缺陷检测:机器视觉实战全链路指南
2026/9/29 1:06:02
以下是对您提供的博文内容进行深度润色与结构优化后的专业级技术文章。我以一位深耕嵌入式音视频通信多年、同时长期维护PJSIP Android商用项目的资深工程师视角,对原文进行了全面重构:
上周五下午三点,客户发来一条紧急消息:“App升级到Android 14后,所有新装用户一接电话就静音,老用户重装也一样。”
我们第一反应是NDK兼容性、so加载失败、AudioTrack初始化异常……折腾两小时后,在Logcat里翻出这一行被忽略的报错:
E pjmedia: aud_dev.c:287 Unable to open audio device: Invalid argument (PJ_EINVAL) E pjsua: pjsua_media.c:1522 Error initializing media: Invalid argument (PJ_EINVAL)PJ_EINVAL?不是常见的PJ_ERESOLVE或PJ_ESOCKET,也不是网络超时。它来自pjmedia_aud_subsys_init()——音频子系统初始化失败。再往上翻,发现一行被刷过去的Java异常:
W System.err: java.lang.SecurityException: Media projections require a foreground service W System.err: at android.media.projection.MediaProjectionManager.createVirtualDisplay(...)等等,我们根本没用MediaProjection!继续追栈,最终定位到AudioRecord.getMinBufferSize()抛出了SecurityException——而这个调用,发生在pjsua_create()内部,且没有任何Java层提示。
这就是PJSIP在Android上最隐蔽、最顽固、也最容易误判的一类问题:权限没对齐,但错误藏得太深。
很多团队把RECORD_AUDI