本文档记录了在 macOS 上从源码编译安装 PJSUA2 Python 绑定的完整过程。
环境信息
- 操作系统: macOS (Darwin 24.5.0, aarch64)
- Python: 3.10.12
- PJSIP 版本: 2.16 dev
前置要求
1. 安装 SWIG
brew install swig
验证安装:
swig -version
# 输出: SWIG Version 4.4.1
2. 确认 Python 环境
python --version
# 确保 Python 3.10+
安装步骤
步骤 1: 配置 PJPROJECT
在编译时需要添加 -fPIC 选项,以便生成位置无关代码(用于共享库)。
cd /path/to/pjproject
./configure CFLAGS="-fPIC"
说明:
-fPIC= Position Independent Code,生成位置无关代码- 这是创建共享库(.so 文件)的必需选项
- 如果静态库要被链接到动态库中,必须使用此选项编译
步骤 2: 编译 PJPROJECT
make dep && make
说明:
make dep- 生成依赖关系文件make- 编译源代码
编译时间:约 5-10 分钟(取决于硬件性能)
步骤 3: 编译 SWIG Python 绑定
cd pjsip-apps/src/swig
make
说明:
- 此步骤会调用 SWIG 生成 Python 包装代码
- 生成
pjsua2_wrap.cpp和pjsua2.py文件 - 自动编译
_pjsua2.cpython-310-darwin.so扩展模块
步骤 4: 安装 Python 模块
cd python
python setup.py install
安装位置:
../.venv/lib/python3.10/site-packages/
├── pjsua2.py
├── _pjsua2.cpython-310-darwin.so
└── pjsua2-2.16_dev-py3.10.egg-info
验证安装
python -c "import pjsua2; print('pjsua2 imported successfully!')"
PJSUA2 模块概览
核心类
| 类名 | 功能描述 |
|---|---|
Endpoint | PJSUA 核心端点,应用的主入口 |
Account | SIP 账户管理 |
Call | SIP 呼叫控制 |
Buddy | 联系人/好友管理 |
AudioMedia | 音频媒体处理 |
VideoMedia | 视频媒体处理 |
设备管理
| 类名 | 功能描述 |
|---|---|
AudDevManager | 音频设备管理器 |
VidDevManager | 视频设备管理器 |
配置类
| 类名 | 功能描述 |
|---|---|
EpConfig | 端点配置 |
AccountConfig | 账户配置 |
CallSetting | 呼叫设置 |
TransportConfig | 传输配置 |
功能特性
- SIP 协议: 完整的 SIP 协议栈支持
- 音频编解码: Opus, G.711 (PCMU/PCMA), G.722, GSM, iLBC, Speex
- 视频编解码: VP8, VP9, H.264
- NAT 穿透: STUN, TURN, ICE 支持
- 安全加密: SRTP, TLS 支持
- 即时消息: SIP MESSAGE 支持
- 状态订阅: SIP Presence/PRESENCE 支持
常见问题
Q1: 编译时提示 "build.mak: No such file or directory"
原因: PJPROJECT 未编译或配置失败
解决: 先执行 ./configure CFLAGS="-fPIC" 然后 make dep && make
Q2: 提示 "pjsua2_wrap.cpp: No such file or directory"
原因: SWIG 包装文件未生成
解决: 在 pjsip-apps/src/swig 目录下执行 make
Q3: 链接时出现 macOS 版本警告
ld: warning: object file was built for newer 'macOS' version (15.0) than being linked (11.0)
原因: 编译目标的 macOS 版本与 Python 的目标版本不一致
影响: 警告可以忽略,不影响功能
Q4: Java 绑定编译失败
Makefile:121: *** Cannot determine JDK include/library path.
原因: 未安装 JDK 或未设置 JAVA_HOME
影响: 不影响 Python 绑定的使用
快速参考
完整安装命令序列
# 1. 进入 pjproject 目录
cd /path/to/pjproject
# 2. 配置(添加 -fPIC)
./configure CFLAGS="-fPIC"
# 3. 编译
make dep && make
# 4. 编译 SWIG 绑定
cd pjsip-apps/src/swig
make
# 5. 安装 Python 模块
cd python
python setup.py install
# 6. 验证
python -c "import pjsua2; print('Success!')"
参考资源
- PJSIP 官方文档: docs.pjsip.org/
- PJSIP GitHub: github.com/pjsip/pjpro…
- SWIG 官网: www.swig.org/