WebSocket audio streaming microservice
Running/ws-stream with auth token and chat IDGET /ws-stream?auth=<token>&chatId=<id>
// Connect to stream recorder
const ws = new WebSocket(
"ws://localhost:8000/ws-stream?auth=YOUR_TOKEN&chatId=YOUR_CHAT_ID"
);
ws.binaryType = "arraybuffer";
// Stream audio from MediaRecorder
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const recorder = new MediaRecorder(stream, { mimeType: "audio/webm" });
recorder.ondataavailable = (e) => {
if (ws.readyState === WebSocket.OPEN) {
e.data.arrayBuffer().then((buf) => ws.send(buf));
}
};
recorder.start(250); // send chunks every 250ms
// Stop recording and close
recorder.stop();
ws.close();
1000 — Normal close or idle timeout1009 — Stream exceeded maximum size1011 — Server error| Variable | Default | Description |
|---|---|---|
| BACKEND_URL | http://api:4000/messages | Backend API endpoint |
| MAX_FILE_SIZE | 10000000 | Max input size for ffmpeg conversion (bytes) |
| MAX_STREAM_BYTES | 10000000 | Max bytes accepted per WebSocket stream |
| CHUNK_TIMEOUT_MS | 2000 | Idle timeout between chunks before auto-close |
| FETCH_TIMEOUT_MS | 30000 | Timeout for backend API request |
| MP3_BITRATE | 64k | FFmpeg MP3 encoding bitrate |