A developer-friendly video infrastructure for your applications. Integrate real-time audio and video communication into your product through a dedicated API and compatible SDKs.
const res = await fetch('/api/v1/public/rooms', { method: 'POST' });
const { roomId } = await res.json();
joinRoom(roomId); // → live in <1s
VideoRayan packages a production-grade WebRTC stack into a clean, room-based platform you fully control — from the SFU to the database.
Runs on your own servers — your media never touches a third-party cloud. Full ownership of data, logging, and compliance posture.
Create rooms, issue guest tokens, and manage access with a small, predictable REST surface. No SDK lock-in — any WebRTC client works.
An SFU-based media plane with adaptive quality, active-speaker switching, screen share, in-call chat, and file hand-off up to 10 MB.
From clinical consultations to classrooms and customer meetings — VideoRayan adapts to the way your product talks.
Private, password-protected consultation rooms with guest access links — no account required for patients.
Run live classes and office hours with screen sharing, persistent rooms, and join-by-link simplicity.
Reliable internal and client calls on infrastructure you own — with recording and chat transcripts when needed.
Embed branded video sessions directly into your product and keep every conversation on your domain.
A single REST call creates a room. A second issues a guest token. Hand the token to any LiveKit-compatible client and you are live — encryption, TURN, and scaling are already handled by the platform.
// 1 — create a room const room = await fetch('/api/v1/public/rooms', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: 'consultation-419' }) }).then(r => r.json()); // 2 — issue a guest token const { token } = await fetch( `/api/v1/guest/rooms/${room.roomId}/tokens`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ identity: 'sara' }) } ).then(r => r.json()); // 3 — connect with any LiveKit client const live = new LivekitClient.Room(); await live.connect('wss://rtc.videorayan.ir', token);
Four moving parts, each running on hardware you control. No opaque cloud middlemen between your users and their conversations.
Every layer is designed so that conversations stay between the participants — and under your administration.
All media is secured with DTLS-SRTP end-to-end between participants and your SFU; signaling runs over authenticated WebSocket (WSS).
Rooms are reachable only with short-lived, signed guest tokens. Private rooms add a shared password on top — enforced server-side.
The full stack — SFU, control API, and database — is self-hosted. No third-party cloud processes, records, or relays your users' media.
Automated backups with scheduled restore drills, hardened SSH access, and health-checked services — covered in the public ops runbook.
The platform ships with the operational discipline of a hosted service — without handing your traffic to one.
Systemd supervision with automatic restart, TLS renewal watch, and health endpoints for proactive monitoring.
Dynacast and connection-state handling keep calls stable on weak links; audio is always preserved first.
Client-side retries with backoff for signaling and API calls — flaky mobile networks don't end the meeting.
Scheduled encrypted backups plus periodic restore tests, so recovery is a drill — never an experiment.
Proven, mainstream components — chosen so any engineer on your team can operate the platform, not just us.
Open-source selective-forwarding unit for audio/video — scales room capacity without transcoding.
TypeScript service owning rooms, tenants, and token issuance — with an OpenAPI contract and negative-test suite.
Single source of truth for rooms and access rules, with forward-only migrations and automated backups.
Spin up your first room in under a minute — no signup, no credit card. Or talk to us about embedding VideoRayan into your product.
A free community room for open discussion (voice, video and text chat, no account) and a feedback channel the operator actually reads.