@tlgf/webrtc
v0.1.0
Published
Headless WebRTC SDK (voice/video, no UI)
Readme
@webrtc/tlgf
Headless WebRTC SDK (no UI). Voice/video calling, signaling via WebSocket, media control, screen share, recording, device selection.
Install
npm i @tlgf/webrtcFeatures
- Calling
- Voice/video: invite/accept/reject/cancel/end, hangup
- Upgrade/downgrade voice ↔ video
- Unified controller (CallController) with onState and built‑in timer
- Events: incoming/outgoing/accepted/ended/track/iceState/signalingState/error
- Media & Playback
- attach({ localVideo, remoteVideo, remoteAudio })
- Autoplay priming for incognito (prime inside controller/engine)
- Mic mute/unmute, camera on/off
- Screen share: startScreenShare/stopScreenShare (auto restore)
- Recording: startRecording('remote'|'local'|'both', mimeType?), stopRecording() → Blob
- Device selection: setInputDevices({ micId?, camId? }), setOutputDevice(sinkId)
- WebSocket signaling
- Built‑in WSClient: connect/identify/on/joinRoom/leaveRoom/sendMessage
- Reuse one connection across chat and calling; or inject your custom SignalingClient
- ICE configuration
- Presets: ICE_PRESETS ('default' | 'google' | 'public' | 'none')
- Custom iceServers to override presets
Quick usage
import { CallController, WSClient } from '@tlgf/webrtc'
// One WS shared by chat and calling
const ws = new WSClient('ws://localhost:3000/ws')
await ws.connect(); ws.identify('alice')
const ctl = new CallController({ signaling: ws, account: 'alice', keepMediaAlive: true })
await ctl.connect()
ctl.attach({ localVideo, remoteVideo, remoteAudio })
// User gesture
await ctl.startVideo('bob')ICE configuration
You can pick a preset or fully override with custom iceServers.
import { CallController, ICE_PRESETS } from '@tlgf/webrtc'
// Use preset
const ctlA = new CallController({ signaling: ws, account, icePreset: 'google' })
// Custom (overrides preset)
const ctlB = new CallController({
signaling: ws,
account,
iceServers: [
{ urls: 'stun:stun.l.google.com:19302' },
{ urls: 'turns:turn.example.com:5349', username: 'u', credential: 'p' },
],
})
// Extend preset
const ctlC = new CallController({
signaling: ws,
account,
iceServers: [...ICE_PRESETS.public, { urls: 'turns:turn.example.com:5349', username: 'u', credential: 'p' }],
})API surface (selected)
- Classes
- WSClient
- WebRTCCallEngine
- CallController
- Controller methods
- connect/disconnect/attach/onState
- startVoice/startVideo/accept/reject/cancel/hangup
- muteMic/enableCamera
- startScreenShare/stopScreenShare
- startRecording/stopRecording
- setInputDevices/setOutputDevice
This SDK is headless: UI/Styles are up to the host app.
