Bytedesk Meet 0.1.0 Preview Released: An Open-Source Audio & Video Conferencing System
Bytedesk Meet 0.1.0 Preview is out. As the open-source conferencing system in the Bytedesk ecosystem, Bytedesk Meet aims to give teams a self-hosted audio and video conferencing solution they fully control: no third-party SaaS dependency, data stays on your own servers, and it integrates natively with Bytedesk's account and permission systems.
The 0.1.0 Preview starts with audio conferencing, focusing on getting the core flow right: create a meeting, share a link, join, and keep participant records. Video conferencing and screen sharing are on the roadmap. This post introduces what this version includes, the technical architecture, and how to get started.
Online Demo
- Meeting client demo: https://www.weiyuai.cn/meet/
- Meeting admin console demo: https://www.weiyuai.cn/meetadmin
What's in the 0.1.0 Preview
1. Meeting Room Management
- Meeting rooms are stored as
RoomEntityrecords (name, room codeinviteUid, type, description, creation time, and more) - The meet frontend lists rooms in an antd ProTable, with support for creating and deleting rooms
- The room code
inviteUiddoubles as the share code — no extra QR codes or passphrases needed
2. One-Click Invite Links
- After creating a meeting, copy an invite link of the form
https://your-domain/meet/room/{inviteUid} - Members who open the link are guided to log in first, then taken straight into the meeting
- Participants join with their logged-in identity, and their nickname is displayed in the room — no name entry required
3. Audio Conferencing
Built on the Janus AudioBridge plugin:
- Join / leave a meeting
- Microphone toggle (mute / unmute)
- Live participant list (driven by Janus events)
- Server-side audio mixing, so multiple speakers never interfere with each other
- Rooms are created on demand: the same room code always maps to the same Janus room, and duplicate creation automatically falls back to joining
4. Participant Records (CDR-Style)
Every join creates a participant record (ParticipantEntity):
- Join time, leave time, and duration in seconds
- Participant identity, associated room, host flag, and Janus participant ID
- Presence status (joined / left); stale "still joined" records from dropped connections are settled automatically on the next operation
These records lay the data foundation for future meeting statistics, attendance, and auditing.
5. The meetAdmin Console
A dedicated admin console ships alongside:
- Meeting room management: query, create, edit, and delete rooms
- Participant record management: query attendance details and inspect individual records
- Fine-grained permissions: rooms and participant records map to separate permission modules that can be granted per role
- Janus server monitoring: four pages covering server info, runtime settings, active sessions, and tokens (visible to super admins) for real-time visibility into the media server
6. Browser Compatibility and Permission Preflight
- Before joining, the app preflights microphone permissions and gives actionable guidance for each case: permission denied, no microphone, unsupported browser, or insecure context
- Insecure contexts (plain HTTP on a non-localhost host) are detected automatically, with guidance to switch to localhost or configure HTTPS
7. Internationalization
Both the meet and meetAdmin frontends support Simplified Chinese, Traditional Chinese, and English. Enum fields such as room type and presence status are fully internationalized.
Technical Architecture
Bytedesk Meet uses a browser-direct-to-Janus WebSocket architecture with no backend signaling relay — simpler and lower latency:
| Layer | Component | Notes |
|---|---|---|
| Media | Janus AudioBridge | Server-side mixing, room management, participant events |
| Browser | WebRTC + janus-gateway JS SDK | Browser connects directly to the Janus WS for capture / publishing / playback |
| Backend | modules/webrtc | Room RoomEntity, participant ParticipantEntity, and REST APIs |
| Frontend | frontend/apps/meet | React + TypeScript + antd ProTable |
| Admin console | frontend/apps/meetAdmin | Room / participant management, Janus monitoring |
A few key design decisions:
- Stable room code mapping: the invite code
inviteUidis hashed to a stable positive-integer Janus room ID, so all participants land in the same audio room without any server-side preconfiguration - Dynamic room creation: the first join sends
create; if the room already exists (error code 486), the client automatically falls back tojoin— no manual room provisioning - Login as identity: joining reuses the Bytedesk login session; the backend returns the user's nickname as the display name and records the participation relation
- Security boundaries: invite links are protected by login; the Janus Admin API is independently protected by
admin_secret; the client-config endpoint never exposes secrets
Quick Start
1. Start the Janus Media Server
cd deploy/docker
./start.sh webrtc
This starts the Janus container. The WebSocket API is available at ws://localhost:18188/janus, and the Admin API on port 18091.
2. Start the Bytedesk Backend
Start the starter as usual (it ships with bytedesk.webrtc.janus.enabled=true and sensible defaults for the Janus WS URL and ICE servers).
3. Start the meet Frontend
cd frontend
pnpm install
turbo dev --filter=meet
4. Run Your First Meeting
- Sign in to meet and click "New Meeting Room" in the room list
- Copy the room's invite link and send it to a colleague
- They open the link, log in, click "Join", grant microphone access, and the call begins
Tip: browsers only expose microphone capture in secure contexts (HTTPS or localhost). If you access the app over plain HTTP on a LAN IP, meet shows clear guidance; for production, put nginx in front for HTTPS + WSS.
Roadmap
After the 0.1.0 Preview, Bytedesk Meet will evolve along these directions:
- Video conferencing (Janus VideoRoom)
- Screen sharing
- Scheduled meetings vs. instant meetings
- Meeting passwords / PINs and host controls
- Recording and playback
- Real-time participant statistics with backend push
- Mobile support
Links
- Weiyu website: https://www.weiyuai.cn
- Bytedesk on GitHub: https://github.com/Bytedesk/bytedesk
- Issue tracker: https://github.com/Bytedesk/bytedesk/issues
- Janus WebRTC Gateway: https://github.com/meetecho/janus-gateway
Bytedesk Meet is still in its early days. Feedback and feature requests are welcome on GitHub Issues.
