openmeet-terminal 0.1.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +46 -16
  2. package/dist/index.js +2889 -194
  3. package/package.json +2 -1
package/README.md CHANGED
@@ -6,12 +6,12 @@ No browser needed. Just your terminal, a mic, and speakers.
6
6
 
7
7
  ```
8
8
  ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
9
- │ OpenMeet | Room: 123 | 3p ↑66k ↓27k | RTT:0ms Loss:0% | ● │
9
+ │ OpenMeet v0.1.2 | Room: 123 | 3p ↑66k ↓27k | RTT:0ms Loss:0% | ● │
10
10
  │──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│
11
11
  │ Participants: │
12
12
  │ ○ 🥝 (you) ░░░░░░░░░░░░░░░░░░░░ │
13
- │ ○ > 🥸 [muted] vol:100% ░░░░░░░░░░░░░░░░░░░░ │
14
- │ ○ 👽 vol:100% ░░░░░░░░░░░░░░░░░░░░ │
13
+ │ ○ > 🥸 [muted] vol:100% ↓64k ~45ms ░░░░░░░░░░░░░░░░░░░░ │
14
+ │ ○ 👽 vol:100% ↓32k ~38ms ░░░░░░░░░░░░░░░░░░░░ │
15
15
  │──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│
16
16
  │ │ Room Log in room: 13s │
17
17
  │ │ │
@@ -27,41 +27,46 @@ No browser needed. Just your terminal, a mic, and speakers.
27
27
  │──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│
28
28
  │ > Type message... │
29
29
  │──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│
30
- │ [Esc] Leave [Tab] Chat [m] mute [d] Devices [↑↓] Select [[-]/[+]] Vol ● Connected
30
+ │ [Esc] Leave [Tab] Chat [m] mute [s] share [w] watch [e] screen [↑↓] Select [[-]/[+]] Vol
31
31
  ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
32
32
  ```
33
33
 
34
34
  ## Features
35
35
 
36
- - **Real-time audio chat** — full-duplex audio via WebRTC with 128kbps Opus encoding
36
+ - **Real-time audio chat** — full-duplex stereo audio via WebRTC with 256kbps Opus encoding
37
+ - **Video support** — send and receive webcam video (1080p) via ffmpeg/ffplay
38
+ - **Screen sharing** — share your screen at 1080p@30fps, view remote screen shares
37
39
  - **Text messaging** — send and receive chat messages alongside audio
38
- - **Device selection** — pick your mic and speakers, with a built-in audio test step
40
+ - **Device selection** — pick your mic, speakers, camera, and screen capture device
39
41
  - **Per-participant volume** — adjust volume for each remote peer independently
40
42
  - **Speaking indicators** — see who's talking with live VU meters
41
- - **Connection stats** — real-time bitrate, RTT, and packet loss display
43
+ - **Connection stats** — real-time bitrate, RTT, packet loss, and estimated per-peer latency display
44
+ - **Connection recovery** — automatic retry with exponential backoff on connection failure
42
45
  - **Room management** — create new rooms or join existing ones by room code
43
46
  - **Emoji identities** — auto-assigned persistent emoji username (e.g., 🐶, 🦊, 🐸)
47
+ - **Debug logging** — optional file-based debug log at `~/.config/openmeet/debug.log`
44
48
  - **Cross-platform** — works on macOS and Linux
45
49
 
46
50
  ## Prerequisites
47
51
 
48
52
  - **Node.js 22+** — [download](https://nodejs.org)
49
53
  - **sox** — audio capture and playback engine
54
+ - **ffmpeg** _(optional)_ — required for video and screen sharing
50
55
 
51
- Install sox:
56
+ Install dependencies:
52
57
 
53
58
  ```bash
54
59
  # macOS
55
- brew install sox
60
+ brew install sox ffmpeg
56
61
 
57
62
  # Ubuntu / Debian
58
- sudo apt install sox
63
+ sudo apt install sox ffmpeg
59
64
 
60
65
  # Fedora
61
- sudo dnf install sox
66
+ sudo dnf install sox ffmpeg
62
67
 
63
68
  # Arch
64
- sudo pacman -S sox
69
+ sudo pacman -S sox ffmpeg
65
70
  ```
66
71
 
67
72
  ## Install
@@ -100,6 +105,12 @@ openmeet --input-device "MacBook Pro Microphone" --output-device "MacBook Pro Sp
100
105
  | `--room <id>` | Room ID to join directly | _(interactive)_ |
101
106
  | `--input-device <name>` | Audio input device name | _(device picker)_ |
102
107
  | `--output-device <name>` | Audio output device name | _(device picker)_ |
108
+ | `--no-video` | Disable video (audio-only mode) | |
109
+ | `--video-device <id>` | Video capture device (e.g., `"0"`) | |
110
+ | `--no-overlay` | Disable video overlay | |
111
+ | `--test-camera` | Test camera capture (opens ffplay preview) | |
112
+ | `--test-screen` | Test screen capture (lists screens, opens ffplay preview) | |
113
+ | `--debug` | Enable debug logging (writes to `~/.config/openmeet/debug.log`) | |
103
114
  | `-h, --help` | Show help | |
104
115
 
105
116
  ### Keyboard shortcuts
@@ -110,6 +121,11 @@ Once inside a room:
110
121
  |-----|--------|
111
122
  | `Tab` | Toggle focus between participant list and chat input |
112
123
  | `m` | Toggle mute (when participant list is focused) |
124
+ | `v` | Toggle camera on/off (requires `--video-device` or video enabled) |
125
+ | `s` | Toggle screen sharing (shows screen picker on first use) |
126
+ | `w` | Open/close selected peer's webcam (only when peer has camera on) |
127
+ | `e` | Open/close selected peer's screen share (only when peer is sharing) |
128
+ | `o` | Toggle video overlay (name, resolution info on video windows) |
113
129
  | `d` | Open device picker |
114
130
  | `Up` / `Down` | Select participant |
115
131
  | `[` / `]` or `-` / `+` | Adjust selected peer's volume |
@@ -120,17 +136,21 @@ Once inside a room:
120
136
 
121
137
  ```
122
138
  Terminal ──sox rec──▶ WebRTC Audio ──▶ Remote Peers
139
+ Terminal ──ffmpeg──▶ WebRTC Video ──▶ Remote Peers (webcam + screen)
123
140
 
124
141
  Remote Peers ──▶ WebRTC Audio ──sox play──▶ Terminal
142
+ Remote Peers ──▶ WebRTC Video ──ffplay────▶ Terminal (separate windows)
125
143
 
126
144
  Terminal ◀────────── WebSocket ──────────▶ Server
127
145
  (signaling + chat)
128
146
  ```
129
147
 
130
- 1. **Audio capture**: `sox rec` records from your mic at 48kHz/16-bit mono and feeds 10ms PCM frames into a WebRTC audio track
131
- 2. **Audio playback**: incoming WebRTC audio is piped to `sox play` for each remote peer, with per-peer volume control
132
- 3. **Signaling**: WebSocket connection to the OpenMeet server handles SDP/ICE exchange, chat messages, and room state
133
- 4. **WebRTC**: peer-to-peer connections using `@roamhq/wrtc` (native WebRTC bindings for Node.js)
148
+ 1. **Audio capture**: `sox rec` records from your mic at 48kHz/16-bit stereo and feeds 10ms PCM frames into a WebRTC audio track (256kbps Opus)
149
+ 2. **Audio playback**: incoming WebRTC audio is piped to `sox play` via FIFOs for each remote peer, with per-peer volume control
150
+ 3. **Video capture**: `ffmpeg` captures webcam (1080p) or screen (1080p@30fps) and feeds raw I420 frames into WebRTC video tracks
151
+ 4. **Video display**: `ffplay` opens separate windows for remote webcam and screen share streams, with aspect-ratio-preserving letterboxing
152
+ 5. **Signaling**: WebSocket connection to the OpenMeet server handles SDP/ICE exchange, chat messages, and room state
153
+ 6. **WebRTC**: peer-to-peer connections using `@roamhq/wrtc` (native WebRTC bindings for Node.js) with 3 transceivers per connection (audio, webcam, screen)
134
154
 
135
155
  ## Self-hosted server
136
156
 
@@ -160,6 +180,16 @@ Your terminal app needs microphone permission:
160
180
  2. Enable the toggle for your terminal app (Terminal, iTerm2, Warp, etc.)
161
181
  3. Restart the terminal and try again
162
182
 
183
+ ### Screen sharing doesn't work (macOS)
184
+
185
+ Screen capture requires Screen Recording permission and a compatible ffmpeg build:
186
+
187
+ 1. Open **System Settings > Privacy & Security > Screen Recording**
188
+ 2. Enable the toggle for your terminal app
189
+ 3. Restart the terminal
190
+
191
+ On macOS 15 (Sequoia), ffmpeg must be built with ScreenCaptureKit support. If screen capture hangs, try `brew reinstall ffmpeg`. Test with `openmeet --test-screen`.
192
+
163
193
  ### No audio from remote peers
164
194
 
165
195
  Make sure your output device is set correctly. Press `d` inside a room to open the device picker, select your output device, and test it with the built-in test tone.