What is the precise audio streaming format?
What is the precise audio streaming format?
LINEAR16 (16KHz sampling rate) over the mono channel. Audio should be chunked into 100ms packets for optimal performance. We only support 100ms audio chunks to achieve the right balance between quality, latency, and efficiency.
What are the bandwidth and latency requirements?
What are the bandwidth and latency requirements?
Network connection speed and consistency are important for Suki to perform well.Suki requires:
- Upload speed: 1Mbps
- Bitrate: 768kbps
- Ping time: 150ms
- Unloaded latency: <50ms
- Loaded latency: <150ms
What is the streaming protocol?
What is the streaming protocol?
Client should set up a WebSocket Secure (wss://) request with the Suki endpoint. Refer to the Audio stream API for implementation details.
What is the audio streaming message format?
What is the audio streaming message format?
For Ambient WebSocket
/ws/stream message format, send LINEAR16, 16 kHz, mono audio, in about 100 ms chunks (see the Audio streaming reference and Ambient audio streaming guide).How messages are sent
Each outbound message from the client must be:- One WebSocket text frame (UTF-8) with one JSON object inside
- One logical send per frame (do not pack multiple JSON objects in one frame)
START_TIMEandAUDIO: usetypeanddatadata: standard Base64 (RFC 4648) of the raw bytes you mean to send (same idea as Goencoding/jsonfor[]byte). Do not use hex, URL-safe Base64, or raw binary inside the JSON string.EVENT: usetype:"EVENT"and theeventfield. Do not put the action name indata.
Message order (each stream segment)
- Send
START_TIMEonce:datais Base64 of a UTF-8 RFC 3339 timestamp (for example2026-04-25T12:34:56Z). - Send one or more
AUDIOmessages:datais Base64 of each raw PCM chunk. - Send a final
AUDIOto end audio:dataisRU9G(Base64 of ASCIIEOF, bytes0x45,0x4F,0x46). Do not use a separateend_of_streamtype unless your integration team tells you otherwise.
EVENT messages can go anywhere in the stream when you need control (pause, resume, keep-alive, cancel, abort).EVENT values you can send
Use{"type":"EVENT","event":"<VALUE>"} with one of:| Value | What it does |
|---|---|
| PAUSE | Pause the stream |
| RESUME | Resume the stream |
| CANCEL | User cancels the stream |
| ABORT | Stream is aborted (interruption) |
| KEEP_ALIVE | Keep the connection alive during inactivity. While paused, send at least once every five seconds so the server does not close the connection. |
Message examples
The stream end marker is an
AUDIO message whose data is Base64 of the raw bytes EOF, not a bare JSON string "EOF" and not an EVENT named EOF, unless your stack documentation says otherwise.