taknone / phptgcalls
A high-performance , non-blocking PHP library for Telegram Group Calls and WebRTC streaming via Rust
Requires
- php: >=8.4
- taknone/asyncio: *
- taknone/bootstrapper: *
- taknone/liveproto: *
Suggests
- ext-swoole: Required for high-performance Swoole coroutine support ( > 5.0.0 )
- ext-tgcrypto: Speeds up encryption / decryption processes for Telegram MTproto
README
โก A blazing-fast PHP extension powered by Rust for Telegram voice/video calls โก
๐ฏ What is PhpTgCalls ?
PhpTgCalls is a native PHP extension built with Rust that brings Telegram voice & video calling capabilities directly into PHP. It wraps the powerful NTgCalls C++ library, providing a clean, object-oriented PHP API
It integrates seamlessly with LiveProto โ the async, pure-PHP MTProto Telegram client โ enabling you to join group calls, stream audio/video, and handle Telegram VoIP entirely from PHP
โจ Features
| Category | Feature |
|---|---|
| ๐๏ธ Core | Join group calls ( voice & video ) |
| ๐ฅ Media | Stream audio/video with H.264, VP8, VP9, AV1, Opus, AAC, MP3 |
| ๐บ Screen | Screen sharing & presentation mode |
| ๐ Async | Fully asynchronous โ built for Fibers & Swoole |
| ๐ Crypto | DH key exchange, encryption params, signaling |
| ๐ก Events | Stream, connection, upgrade, frame, and signaling event streams |
| โก Performance | Rust-powered native code, minimal overhead |
| ๐งฉ Ecosystem | First-class LiveProto integration |
๐๏ธ Architecture
sequenceDiagram
autonumber
participant P as PHP (Application Layer)
participant R as Rust Extension (Bridge)
participant C as NTgCalls (C++ Core)
Note over P, C: Initialization Phase
P->>R: Instantiate TgcallsClient
R-->>P: Return Native Instance Pointer
P->>R: Enable Events (Initialize Buffer/FD)
rect rgb(240, 248, 255)
Note right of P: Request/Response Flow
P->>R: Call Method (Payload)
R->>C: FFI Bridge (WebRTC/Boost)
C-->>R: Return Result
R-->>P: Return Data to PHP
end
rect rgb(245, 245, 245)
Note right of P: Async Event Handling (FD Mechanism)
C->>R: Event Callback (Direct)
R->>R: Write to File Descriptor (FD)
loop Async Consumption
P->>R: Read from FD Buffer
R-->>P: Dispatch Event Object
end
end
Loading
๐ฆ Installation
Prerequisites
- PHP 8.4+
- Rust 1.96.0+
Using Composer
Note
Install the framework in your project :
composer require taknone/phptgcalls
Note
Then install the native extension :
cd vendor/taknone/phptgcalls/ext
sudo bash install.sh
From Source
Note
Clone the repository and install dependencies :
git clone https://github.com/TakNone/phptgcalls.git
cd phptgcalls
composer install
Extension Only
Note
If you already have the repository :
git clone https://github.com/TakNone/phptgcalls.git
cd phptgcalls/ext
sudo bash install.sh
๐ Quick Start
<?php require_once 'vendor/autoload.php'; use Tak\Liveproto\Utils\Settings; use Tak\Liveproto\Network\Client; use Tak\Tgcalls\Driver; use Tak\Asyncio\Loop; Loop::queue(static function() : void { try { $settings = new Settings(); $settings->setApiId(21724); $settings->setApiHash('3e0cb5efcd52300aec5994fdfc5bdc16'); $client = new Client('phptgcalls','sqlite',$settings); $client->start(false); $tgcalls = new Driver(client : $client,chat_id : -100123456789); $params_json = $tgcalls->create(); // Both MTProto and TgCalls clients are ready to use... // } finally { $client->stop(); } }); Loop::run(); ?>
๐ Integration with LiveProto
TgCalls is designed to work hand-in-hand with LiveProto :
| LiveProto | TgCalls |
|---|---|
| MTProto connection & auth | VoIP call management |
phone.joinGroupCall() |
TgcallsClient.create() + connect() |
| DH config retrieval | TgcallsClient.init_exchange() |
| Signaling relay | TgcallsClient.send_signaling_data() |
Important
LiveProto handles the MTProto layer ( Telegram API ), while TgCalls handles the WebRTC/VoIP layer. Together, they provide a complete Telegram calling solution in PHP
๐งช Examples
- Explore the
example/directory
๐ค Contributing
We love contributions ! Here's how to get started :
- Fork this repository
- Create a feature branch :
git checkout -b feature/amazing-feature - Commit your changes :
git commit -m 'Add amazing feature' - Push to the branch :
git push origin feature/amazing-feature - Open a Pull Request
๐ฌ Community
Join the phptgcalls ecosystem :
| Platform | Link |
|---|---|
| ๐ฌ Telegram Chat | PhpTgCallsChat |
| ๐ Bug Reports | GitHub Issues |
๐ License
This project is licensed under the MIT License