@aethex.os/webrtc
v1.0.1
Published
AeThex WebRTC — voice/video calls, screen sharing, and voice activity detection with socket.io signaling
Maintainers
Readme
@aethex.os/webrtc
WebRTC manager for voice/video calls, screen sharing, and voice activity detection. Uses socket.io for signaling — drop it in next to your existing socket server.
Install
npm install @aethex.os/webrtcUsage
Start a call
import { WebRTCManager } from '@aethex.os/webrtc';
const rtc = new WebRTCManager('https://your-signaling-server.com');
// Called when remote stream arrives
rtc.onRemoteTrack = (peerId, stream) => {
videoElement.srcObject = stream;
};
// Start voice call
await rtc.initiateCall('peer_456', { audio: true, video: false });Answer a call
Incoming calls are handled automatically via socket events. Attach handlers before connecting:
rtc.onRemoteTrack = (peerId, stream) => {
remoteAudio.srcObject = stream;
};
rtc.onPeerDisconnected = (peerId) => {
console.log(`${peerId} left`);
};Controls
rtc.toggleAudio(false); // mute
rtc.toggleVideo(false); // camera off
await rtc.startScreenShare('peer_456');
await rtc.stopScreenShare('peer_456');
rtc.endCall('peer_456');Voice Activity Detection
await rtc.initializeLocalStream({ audio: true, video: false });
setInterval(() => {
if (rtc.isSpeaking()) {
showSpeakingIndicator();
}
}, 100);Custom ICE servers
const rtc = new WebRTCManager('https://signaling.example.com', {
iceServers: [
{ urls: 'stun:stun.example.com' },
{ urls: 'turn:turn.example.com', username: 'user', credential: 'pass' },
],
});Cleanup
rtc.destroy(); // closes all connections, stops media, disconnects socketSignaling protocol
Your socket server needs to handle these events:
| Event | Direction | Payload |
|---|---|---|
| call:offer | client → server → peer | { to, offer } |
| call:answer | client → server → peer | { to, answer } |
| call:ice-candidate | client → server → peer | { to, candidate } |
| call:end | client → server → peer | { to } |
Part of the @aethex.os ecosystem
See @aethex.os/core for the full package list.
