β‘ A blazing-fast PHP extension powered by Rust for Telegram voice/video calls β‘
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
| 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 |
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
- PHP 8.4+
- Rust 1.96.0+
Note
Install the framework in your project :
composer require taknone/phptgcallsNote
Then install the native extension :
cd vendor/taknone/phptgcalls/ext
sudo bash install.shNote
Clone the repository and install dependencies :
git clone https://github.com/TakNone/phptgcalls.git
cd phptgcalls
composer installNote
If you already have the repository :
git clone https://github.com/TakNone/phptgcalls.git
cd phptgcalls/ext
sudo bash install.sh<?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();
?>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
- Explore the
example/directory
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
Join the phptgcalls ecosystem :
| Platform | Link |
|---|---|
| π¬ Telegram Chat | PhpTgCallsChat |
| π Bug Reports | GitHub Issues |
This project is licensed under the MIT License