Android Kotlin下基于PjSip的TCP协议SIP注册失败求助
Android Kotlin下PjSip TCP模式SIP注册解决方案及问题排查
一、核心注册代码实现
以下是基于PjSip库完成TCP模式SIP注册的Kotlin代码示例,适配分机号1110的账号配置:
1. 初始化PjSip端点与TCP传输
import org.pjsip.pjsua2.* import android.util.Log private lateinit var endpoint: Endpoint fun initPjsip() { try { endpoint = Endpoint() endpoint.libCreate() // 配置日志(便于排查问题) val epConfig = EpConfig() epConfig.logConfig.level = 5 epConfig.logConfig.consoleLevel = 5 endpoint.libInit(epConfig) // 创建TCP传输通道 val tcpConfig = TransportConfig() tcpConfig.port = 0 // 自动分配本地端口 endpoint.transportCreate(PJSIP_TRANSPORT_TCP, tcpConfig) // 启动PjSip库 endpoint.libStart() } catch (e: Exception) { Log.e("PjSipInit", "初始化失败: ${e.message}") e.printStackTrace() } }
2. 注册SIP账号(分机1110)
fun registerSipAccount() { val username = "1110" val password = "你的密码" val domain = "你的SIP服务器域名/IP" try { val accConfig = AccountConfig() // 设置账号ID accConfig.idUri = "sip:$username@$domain" // 指定TCP模式注册服务器 accConfig.regConfig.registrarUri = "sip:$domain;transport=tcp" // 添加认证凭证 val authCred = AuthCredInfo() authCred.scheme = "digest" authCred.username = username authCred.data = password authCred.realm = "*" accConfig.sipConfig.authCreds.add(authCred) // 暂时禁用媒体(优先确保注册成功) accConfig.mediaConfig.enableAudio = false accConfig.mediaConfig.enableVideo = false // 创建账号并监听注册状态 val sipAccount = object : Account() { override fun onRegState(prm: OnRegStateParam) { super.onRegState(prm) when (prm.code) { 200 -> Log.d("PjSipReg", "注册成功!状态码: ${prm.code}") else -> Log.e("PjSipReg", "注册失败,状态码: ${prm.code},原因: ${prm.reason}") } } } sipAccount.create(accConfig) } catch (e: Exception) { Log.e("PjSipReg", "注册请求异常: ${e.message}") e.printStackTrace() } }
二、TCP传输无响应问题排查
针对发送注册请求后无200 OK响应、TCP模式失效的问题,按以下步骤逐一排查:
- 验证服务器TCP配置:确认SIP服务器已开启TCP监听(默认端口5060,TLS为5061),且服务器防火墙允许客户端IP访问该端口。
- 检查网络权限:确保AndroidManifest.xml中已添加必要权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> - 抓包分析TCP连接:使用tcpdump或Wireshark抓取设备网络包,确认TCP三次握手是否完成、SIP注册请求(REGISTER)是否发送至服务器。
- 核对账号参数:确认用户名、密码、域名完全匹配服务器配置,避免因大小写、特殊字符导致认证失败。
- 查看PjSip日志:通过日志排查连接超时、认证错误、传输层异常等具体问题,重点关注包含"TCP"、"REGISTER"、"auth"关键词的日志条目。
三、后续WebRTC集成铺垫
完成SIP注册后,可将PjSip作为信令层对接WebRTC实现音视频通话与屏幕共享:
- 通过PjSip接收/发送SIP INVITE消息,解析其中的SDP信息
- 将SDP与WebRTC的PeerConnection绑定,完成媒体协商
- 基于Android的MediaProjection API实现屏幕共享流的采集与传输
内容的提问来源于stack exchange,提问作者RejiKumarRA
相关产品推荐
相关产品推荐

