chan_sip还是chan_pjsip?Browser Phone适配Asterisk的2种配置方案深度对比
【免费下载链接】Browser-PhoneA fully featured browser based WebRTC SIP phone for Asterisk项目地址: https://gitcode.com/gh_mirrors/br/Browser-Phone
Browser Phone 是一款功能完整的基于浏览器的 WebRTC SIP 电话,专为 Asterisk PBX 设计。打开网页即自动通过 WebSocket 连接 Asterisk 并注册分机号,无需安装任何客户端。而 Asterisk 的 SIP 通道驱动分为 chan_sip 与 chan_pjsip 两套,Browser Phone两种都兼容,但同一安装中只能二选一。本文将从新手视角深度对比这两种配置方案的差异、写法与选型建议,帮你快速选对方案。
一、两种SIP通道驱动有何本质区别?
📞 在动手配置之前,先理解两者的定位差异:
| 对比维度 | chan_sip | chan_pjsip |
|---|---|---|
| 项目定位 | 传统通道驱动,已进入维护状态 | 新一代主力驱动,持续积极开发 |
| 主配置文件 | config/sip.conf | config/pjsip.conf |
| 配置风格 | 每个用户一个扁平的 peer 段 | 拆分为 endpoint / aor / auth 三段式模板 |
| 开启 WebSocket | 加一行websocket_enabled=yes | 需显式定义wss传输(transport) |
| WebRTC 支持 | 基础支持,视频呼叫偶有怪异行为 | 原生支持 DTLS-SRTP、ICE、Opus,浏览器友好 |
| 版本建议 | Asterisk 13 上表现良好 | 推荐 Asterisk 16+(13 上存在视频 SDP 缺陷) |
| 长期维护性 | 逐渐被取代 | 官方主推 |
一句话概括:chan_sip 简单直接,chan_pjsip 规范且面向未来。Browser Phone 的核心依赖(Opus 音频编解码、DTLS 媒体加密、ICE)在 chan_pjsip 下体验更完整。
二、chan_sip 方案:sip.conf 三步配置法
适合场景:已有 chan_sip 环境的存量用户,或使用 Asterisk 13 快速搭 Demo。
- 开启 WebSocket 服务:在 config/sip.conf 的
[general]段加入:websocket_enabled=yesmaxcallbitrate=5120
- 启用 SIP 文本消息(Browser Phone 的短信功能依赖它):
accept_outofcall_message=yesoutofcall_message_context=textmessages
- 添加浏览器用户:为浏览器用户创建一个引用
webrtc模板的 peer,并配好callerid与secret(账号密码)。
chan_sip 的写法非常"平铺直叙"——一个[User1]段就是一套完整账号,新手几乎没有学习成本。
三、chan_pjsip 方案:模板化配置 pjsip.conf
适合场景:新建系统、长期使用、需要更完善的 WebRTC 能力。
chan_pjsip 采用模板(template)+ 引用的写法,核心在于 config/pjsip.conf 中的两个关键模板:
[wss_transport]:WebSocket Secure 传输,浏览器正是通过它注册进来;[webrtc_endpoint]:WebRTC 端点模板,内置allow=opus,ulaw,vp9,vp8,h264、media_encryption=dtls、ice_support=yes、rtcp_mux=yes等浏览器通话必备参数。
之后定义每个用户时,只需一行User1把模板"套"上,再补上type=endpoint、auth、aors三个字段即可。
✅ 看起来繁琐,但模板只写一次,后续每加一个分机号都只需三行,比 chan_sip 更易批量管理。
四、关键一步:modules.conf 中互斥加载
⚠️ 这是最容易踩的坑:chan_sip 和 chan_pjsip 不能同时启用,必须在 config/modules.conf 中禁用另一方的模块。
- 走chan_sip方案 → 屏蔽
chan_pjsip.so、res_pjsip.so、res_pjsip_session.so等相关模块; - 走chan_pjsip方案 → 屏蔽
chan_sip.so。
修改后重启 Asterisk 或执行模块重载(module reload res_pjsip.so/sip reload)即可生效。
五、两种方案的共同配置:拨号计划与 HTTPS 部署
无论选择哪种驱动,config/extensions.conf 的拨号计划结构基本一致,只需把Dial(SIP/…)换成Dial(PJSIP/…):
[from-extensions]:分机互拨入口;[subscriptions]:分机在线状态(hint)订阅;[textmessages]:SIP 文本消息路由。
另外两个"公共必做项":
- HTTPS 静态部署:浏览器要求安全上下文才能访问麦克风/摄像头,需按 config/http.conf 开启 TLS 并把 Phone/ 目录下的网页放入 Asterisk 的 static-http 目录(部署时可先
git clone https://gitcode.com/gh_mirrors/br/Browser-Phone获取全部配置与网页文件)。 - Opus 编解码模块:浏览器端使用 Opus 音频,ARM 平台需拷贝 modules/ast-13/codec_opus_arm.so 或 modules/ast-16/codec_opus_arm.so 到 Asterisk 模块目录;Asterisk 16 还需同步修正 so 文件内的校验和。
六、如何快速做选择?选型决策清单
- 📌 使用Asterisk 13:建议选chan_sip。官方明确提示 Asterisk 13 的 chan_pjsip 存在缺陷——无论呼叫内容,SDP 都会带上
m=video,导致所有语音呼叫都被显示为视频呼叫。 - 📌 使用Asterisk 16+:强烈建议chan_pjsip,WebRTC 体验完整(DTLS 加密媒体、ICE 打洞、Opus 语音),且是官方长期维护方向。
- 📌存量 chan_sip 系统:Browser Phone 可平滑接入,无需迁移;但规划新项目时别再依赖 chan_sip。
- 📌团队规模较大:chan_pjsip 的模板化 + ACL 统一管理更便于扩展。
七、新手常见问题 FAQ
Q1:两种驱动可以共存吗?不行。必须通过 modules.conf 屏蔽其一,否则会出现注册行为混乱、模块相互干扰的问题。
Q2:浏览器打不通电话,先查哪里?按顺序排查:HTTPS 是否正常(WebSocket 需要安全上下文)→ WebSocket 是否开启 → 用户账号密码是否一致 → Opus 编解码是否加载成功。
Q3:Asterisk 16 下 Opus so 模块加载失败?Asterisk 16 会校验模块文件的校验和,需按 README 指引把buildopts.h中的AST_BUILDOPT_SUM值写入 so 文件后重试。
Q4:除了通话还有哪些功能?Browser Phone 还支持三方会议呼叫、转接(盲转/协助转接)、通话详单、音视频录制、视频呼叫中共享屏幕/白板,详见 README.md。
八、相关配置文件速查
| 文件 | 作用 |
|---|---|
| config/sip.conf | chan_sip 方案的 SIP 账号与 WebSocket 配置 |
| config/pjsip.conf | chan_pjsip 方案的 endpoint / aor / auth 配置 |
| config/extensions.conf | 拨号计划(分机互拨、状态订阅、文本消息) |
| config/modules.conf | 模块加载/屏蔽,实现驱动互斥 |
| config/http.conf | Asterisk 内建 HTTPS 静态网页服务 |
| Phone/ | 浏览器电话的全部前端资源 |
总结:老环境用 chan_sip 快速跑通,新环境直接上 chan_pjsip + Asterisk 16+,是 Browser Phone 适配 Asterisk 的最佳实践路径。
【免费下载链接】Browser-PhoneA fully featured browser based WebRTC SIP phone for Asterisk项目地址: https://gitcode.com/gh_mirrors/br/Browser-Phone
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考