PJSUA2-Wheel - Standalone Windows Wheels for PJSIP
Truly standalone Windows wheels for PJSUA2! 🎉
This package provides pre-compiled Windows wheels for PJSUA2 (Python bindings for PJSIP) with bundled Visual C++ Runtime DLLs. No additional installations required - just pip install and start coding!
Note: This is a community-maintained wheel distribution. For the official source package, see pjsua2 on PyPI.
What's New in 2.15.3
✨ Standalone Wheels - All required Visual C++ Runtime DLLs are now bundled!
✨ No VC++ Redistributable needed - Works on clean Windows systems
✨ Standard Import - Use import pjsua2 (not pjsua2_standalone)
✨ Fixed Import Issues - Resolved module loading problems from 2.15.2
✨ Optimized Size - Wheel size (~2.7 MB)
✨ Python 3.9-3.12 support - Wheels for all modern Python versions
Quick Installation
Windows (Pre-built wheels!)
pip install pjsua2-wheel
No compilation required! The wheel includes everything you need:
- ✅ Pre-compiled PJSIP libraries
- ✅ Bundled Visual C++ Runtime DLLs
- ✅ No Visual Studio required
- ✅ No VC++ Redistributable installation needed
Package name: pjsua2-wheel (for pip install)
Import name: pjsua2 (for Python code)
Other Platforms
Building from source requires C++ compiler, SWIG, and Python headers.
See PJSIP documentation for details.
Features
✅ SIP Protocol Stack - Full RFC 3261 implementation
✅ Audio/Video Calls - HD voice and video support
✅ Media Handling - Codecs, RTP/RTCP, jitter buffer
✅ NAT Traversal - STUN, TURN, ICE support
✅ Secure Communications - TLS, SRTP encryption
✅ Conferencing - Audio mixing and conferencing
✅ IM & Presence - Instant messaging and presence
Quick Start
import pjsua2 as pj
# Create and initialize endpoint
ep = pj.Endpoint()
ep.libCreate()
ep_cfg = pj.EpConfig()
ep.libInit(ep_cfg)
# Create SIP transport
sipTpConfig = pj.TransportConfig()
sipTpConfig.port = 5060
ep.transportCreate(pj.PJSIP_TRANSPORT_UDP, sipTpConfig)
# Start the library
ep.libStart()
print(f"PJSIP {ep.libVersion().full} started!")
# Your SIP application code here...
# Cleanup
ep.libDestroy()
Example: SIP Registration
import pjsua2 as pj
class MyAccount(pj.Account):
def onRegState(self, prm):
ai = self.getInfo()
print(f"Registration: {ai.regStatusText}")
# Configure account
acc_cfg = pj.AccountConfig()
acc_cfg.idUri = "sip:user@example.com"
acc_cfg.regConfig.registrarUri = "sip:example.com"
# Add credentials
cred = pj.AuthCredInfo()
cred.scheme = "digest"
cred.realm = "*"
cred.username = "user"
cred.dataType = pj.PJSIP_CRED_DATA_PLAIN_PASSWD
cred.data = "password"
acc_cfg.sipConfig.authCreds.append(cred)
# Create account
acc = MyAccount()
acc.create(acc_cfg)
Example: Making a Call
class MyCall(pj.Call):
def onCallState(self, prm):
ci = self.getInfo()
print(f"Call state: {ci.stateText}")
# Make a call
call = MyCall(account)
prm = pj.CallOpParam()
call.makeCall("sip:destination@example.com", prm)
Documentation
- API Reference: https://docs.pjsip.org/en/latest/api/pjsua2/
- User Guide: https://docs.pjsip.org/en/latest/pjsua2/using/
- PJSIP Project: https://www.pjsip.org
- GitHub: https://github.com/pjsip/pjproject
Platform Support
| Platform | Python Versions | Status |
|---|---|---|
| Windows x64 | 3.9, 3.10, 3.11, 3.12 | ✅ Pre-built wheels |
| Linux | 3.9+ | ⚠️ Build from source |
| macOS | 3.9+ | ⚠️ Build from source |
What's New in 2.15
- Improved WebRTC integration
- Better audio quality
- Enhanced security features
- Bug fixes and performance improvements
Building from Source
If pre-built wheels aren't available for your platform:
Requirements:
- C++ compiler (GCC, Clang, or MSVC)
- SWIG 4.x
- Python development headers
Linux/macOS:
git clone https://github.com/pjsip/pjproject.git
cd pjproject
./configure CFLAGS="-fPIC"
make dep && make
cd pjsip-apps/src/swig
make
cd python
make && make install
Windows:
Troubleshooting
Import Error on Windows
# Make sure you have Visual C++ Redistributable
# Download from: https://aka.ms/vs/17/release/vc_redist.x64.exe
Audio Issues
# List available audio devices
ep = pj.Endpoint()
ep.libCreate()
ep_cfg = pj.EpConfig()
ep.libInit(ep_cfg)
audDevManager = ep.audDevManager()
devCount = audDevManager.getDevCount()
for i in range(devCount):
info = audDevManager.getDevInfo(i)
print(f"Device {i}: {info.name}")
Examples
Check out the examples in the PJSIP repository.
Support
- Issues: https://github.com/pjsip/pjproject/issues
- Mailing List: https://www.pjsip.org/mailing.htm
- Commercial Support: support@teluu.com
License
GNU GPL v2 or later
Credits
- PJSIP Team at Teluu Inc.
- Contributors from around the world
- Windows Wheels maintained by community contributors
Contributing
Contributions welcome! See the PJSIP project for details.
Made with ❤️ by the PJSIP community
Metadata
Release files for pjsua2-wheel 2.15.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| pjsua2_wheel-2.15.3-cp312-cp312-win_amd64.whl | CPython 3.12 | CPython 3.12 | Windows x86-64 | Details |
| pjsua2_wheel-2.15.3-cp311-cp311-win_amd64.whl | CPython 3.11 | CPython 3.11 | Windows x86-64 | Details |
| pjsua2_wheel-2.15.3-cp310-cp310-win_amd64.whl | CPython 3.10 | CPython 3.10 | Windows x86-64 | Details |
| pjsua2_wheel-2.15.3-cp39-cp39-win_amd64.whl | CPython 3.9 | CPython 3.9 | Windows x86-64 | Details |
Total release size: 11.3 MB
Release files / pjsua2_wheel-2.15.3-cp312-cp312-win_amd64.whl
| Download URL | pjsua2_wheel-2.15.3-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 2.8 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
085801f8479efcf69cf60d2b26ce3e73f7a7de7ba4d38bc8eb4b84c88c2a19e9
|
|
BLAKE2b-256 checksum How to use checksums |
3f0eb46c5f42c43658333f45502be92456de8af63763e6925531bafa66854979
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|
Release files / pjsua2_wheel-2.15.3-cp311-cp311-win_amd64.whl
| Download URL | pjsua2_wheel-2.15.3-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 2.8 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
7da0a17c3b55712d57c12ff631b9c05f385d6f8a6809126ba7566bacce206f3f
|
|
BLAKE2b-256 checksum How to use checksums |
48cbec3a43a3bf80aa907b34df3020e988d22ad4576c6faaa983b719bfe64b27
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|
Release files / pjsua2_wheel-2.15.3-cp310-cp310-win_amd64.whl
| Download URL | pjsua2_wheel-2.15.3-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 2.8 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
bbb7d2f43e6376d7239dfe8b7947a4b2041b7e452ffe261e19728e2db973974d
|
|
BLAKE2b-256 checksum How to use checksums |
9edd0c3b48c20ed9601c2e43a048876284e59e092e59f1fc03abf47452124f4c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|
Release files / pjsua2_wheel-2.15.3-cp39-cp39-win_amd64.whl
| Download URL | pjsua2_wheel-2.15.3-cp39-cp39-win_amd64.whl |
|---|---|
| Size | 2.8 MB |
| Tags | CPython 3.9 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
0f6f2f31caf24917eb4d8731d7399662f02a24727d3d6d2fba22ae3650f09df8
|
|
BLAKE2b-256 checksum How to use checksums |
e1128d921b519a0f0470e5d8a94376511725e5e044b261a3fd737217b1ca2f3c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|