Janus-meet
lightweight video conferencing web-app
Janus-meet is a web-based video conferencing application, inspired by jitsi-meet but vastly more lightweight.
Status
No code exist yet...
Core tasks
Rewrite minimal video room demo to use SvelteKit and Svelte (e.g. using janus-svelte wrapper and/or borrowing from open-museum, and perhaps sveltestrap).
- invoke: room ID is requested from a form text field, then creating/loading room at same URI (i.e. room replaces form)
- a/v: handles audio and video feeds
- mute: ability to mute/unmute own audio feed
- hide: ability to hide/show video feed
- 3x2: grid view presenting up to 6 members in a 3 x 2 grid
- desktop: statically optimized for use on classic desktop devices
- fixed: no ability to switch view within a room
- fifo: seats are filled by order of entering the room
- peer: each member can control own features (e.g. switch own audio/video feeds)
- unnamed: no ability for members to identify themselves
- open: unauthenticated access
[JonasSmedegaard] Setup demo host
Create test page, including an echo test and troubleshooter
Optional additional tasks
placement: how to create/enter a room
- invoke: room ID is requested from a form text field, then creating/loading room at same URI (i.e. room replaces form)
path: room ID is derived from URI (e.g. using URI template https://{host}/room/{room}/)
media: types of member feeds supported
- audio: handles only audio feeds
- video: handles only video feeds
- a/v: handles audio and video feeds
- a/v/t: handles audio and video feeds, and text-based chat
- bridge-sip: support bridging to SIP (either audio-only or video calls)
- bridge-mumble: support bridging audio to Mumble room
- bridge-chat-*: support bridging text-based chat to irc channel, xmpp MUC, Matrix room, SIP SIMPLE, etc.
audio: audio features
- mute: ability to mute/unmute own audio feed
- shift-audio: ability to select which one device is used, among several locally available audio devices
- loudness: visual indicator of loudness
video: video features
- video-bridge-sip: support bridging to SIP video calls
- hide: ability to hide/show video feed
- shift-video: ability to select which one device is used, among several locally available video devices
text:
- text-notify: raise attention audibly and/or visually when own nick is mentioned in text chat
- text-completion: auto-completion of nicks
- text-backlog: present historic messages when connecting late to a session
text-annotate: support linking text messages with A/V feeds (e.g. as draft for subtitles)
views: placement of member feeds in room
- 3x2: grid view presenting up to 6 members in a 3 x 2 grid
- 4x3: grid view for up to 12 members on a 4 x 3 grid
- solo: view for one speaker
- duo: view for two speakers
- pip: view for one large feed and a a smaller overlay (e.g. for slideshow and presenter, or for interviewee and interviewer)
adaptability: how web page adapts to web browser
- desktop: statically optimized for use on classic desktop devices
- mobile: statically optimized for use on mobile devices
- responsive: adapts dynamically to viewport
progressive: adapts dynamically to viewport and comply with PWA specs (maybe briefing contains inspirational bits)
native: integrate tightly with specific operating systems using Tauri
furnishing: ability to switch view
- fixed: no ability to switch view within a room
- auto-size: automatic switch bewtween grid views based on amount of members
- auto-solo: automatic switch between solo and pip views based on audio activity (e.g. presentation)
- auto-duo: automatic switch between duo and pip based on audio activity (e.g. interview)
- dynamic: ability to (manually or maybe also automatically) switch between all views
ranking: organize how members get which "seat" in the room
- fifo (default): seats are filled by order of entering the room
- auto-audio: seats are by ranked by audio activity
- auto-video: regular seats are by filled by have members with video enabled (others more compactly listed aside?)
- token: seats are empty by default, and assigned by requesting a token (when token is granted, in administrated rooms)
- token-queue: like token, and when letting go of a token (or taken away, in administrated rooms) it is auto-assigned to next in line
- token-auto-audio: the loudest automatically get assigned a token for a seat (with some filtering of noise? some delay to skip cough or rumbling with a cup?)
roles: ability to appoint one or more "admins" og "gods", demoting everyone else to "user"
- peer (default): each member can control own features (e.g. switch own audio/video feeds) and (if available) any shared features (e.g. room view)
- user: each member can control own personal features
- admin: like user, and can also control shared features
- god: like admin, and can also control personal features of everyone (e.g. mute or kick others)
identity: ability for members to identify themselves
- unnamed: no ability for members to identify themselves
- nick: no identiy required (but optional? and optionally possible to add/remove during session?)
- loose: simple nick required at login (optionally possible to change but not remove during session?)
- authenticated: verified identifier (email confirmation? WebID?)
- multi-session: Merge multiple login sessions tied to same identifier, and show only newest introduced audio and video stream by default (optionally allowing to switch streams - )
access: need for authenticated identifiers to connect
- open: unauthenticated access
- passphrase: simple username/passphrase authentication
indie: IndieAuth
webid: WebID-OIDC and WebID-TLS+Delegation as per SOLID spec (beware that "+Delegation" part is well defined but its use not yet agreed upon)
accessibility: ensure usability for people with disabilities
include accessibility hints on status icons (see this discussion)
maybe (implement and) enable push-to-talk by default (see this discussion)
Coding style
Janus-meet is written in ?JavaScript, using SvelteKit framework and Svelte compiler.
Project plan
End goal is to have a fully functional web conferencing service with either apt install janus-meet apache2 coturn or apt install janus-meet nginx ejabberd.