PJSUA2 Python 模块安装(macOS)

26 阅读2分钟

本文档记录了在 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.cpppjsua2.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 模块概览

核心类

类名功能描述
EndpointPJSUA 核心端点,应用的主入口
AccountSIP 账户管理
CallSIP 呼叫控制
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!')"

参考资源