Why Streaming Upload?
With traditional upload, the entire recording must finish before upload begins. For a 60-minute meeting, you wait 60 minutes of recording plus upload and processing time. With streaming upload, chunks are uploaded as they’re recorded. By the time the recording ends, most of the audio is already in the cloud and partially processed.Traditional Upload
Streaming Upload
How It Works
The device uses double buffering — recording into one memory buffer while uploading the previous buffer:- Device records audio into Buffer A
- When Buffer A is full (one chunk), swap to Buffer B
- Upload Buffer A contents to S3 in the background
- Continue recording into Buffer B
- Repeat until recording ends
- Call finalize to stitch chunks and trigger transcription
Connectivity
Streaming upload works across all connectivity methods:| Path | Network | How It Works | Best For |
|---|---|---|---|
| WiFi Upload | Wi-Fi | Device uploads chunks directly to S3 over Wi-Fi | Note, Pin/Pin Pro with WiFi configured |
| 4G Upload | Cellular | Device uploads chunks directly to S3 over cellular | Pin, Pin Pro in the field |
| Wi-Fi Direct | P2P Wi-Fi | Device streams to phone via Wi-Fi Direct, phone uploads | Fast phone-mediated sync |
| BLE Sync | BLE + phone internet | Device streams audio over BLE to phone, phone uploads to S3 | Any device with phone nearby |
Chunk Size
Choose chunk duration based on your use case:| Chunk Duration | File Size (Opus 32kbps) | Trade-off |
|---|---|---|
| 1 minute | ~250 KB | Most real-time, highest overhead |
| 5 minutes | ~1.25 MB | Recommended — balanced |
| 10 minutes | ~2.5 MB | Fewer uploads, less overhead |
| 15 minutes | ~3.75 MB | Ultra-long recordings only |
Use Cases
Medical Documentation
A doctor records a 2-hour patient consultation. With streaming upload over WiFi, transcription starts during the appointment. By the time the doctor finishes, clinical notes are nearly ready.Legal Depositions
An attorney records a 4-hour deposition. Partial transcripts become available during breaks, allowing review and preparation for follow-up questions.Sales Calls
A sales rep records a 1-hour client meeting. CRM notes are auto-populated from the summary while the rep is still with the client.BLE Streaming Sync
For BLE-only devices, the mobile app acts as the upload bridge using the React Native SDK:- Device records audio and writes to SD card (as usual)
- SDK initiates BLE streaming for the in-progress recording
- Device reads already-flushed data from SD card and sends over BLE
- Phone buffers chunks and uploads to S3 as they fill
- Recording stops — device flushes remaining data
- Phone uploads final chunk and calls finalize
| Scenario | What Happens |
|---|---|
| BLE connected when recording starts | Live streaming via BLE → phone → S3 |
| BLE not connected | Normal recording to SD card, batch sync later |
| BLE drops mid-recording | Recording continues on device, batch sync picks it up |
| App killed during streaming | Same as BLE drop — recording safe on SD card |
Error Handling
- Failed chunk upload — Device retries with exponential backoff, then queues locally for later
- Missing chunks on finalize — Backend reports which chunks are missing; device re-uploads them
- Network switch mid-upload — Device can switch between WiFi, cellular, and BLE mid-recording using HTTP range requests to resume partial uploads
Comparison
| Traditional Upload | Streaming Upload | |
|---|---|---|
| Device storage | Full recording (~15 MB for 60 min) | 2 chunks (~2.5 MB) |
| Upload timing | After recording ends | During recording |
| Network | Any (BLE, WiFi, Cellular) | Any (WiFi, Cellular, Wi-Fi Direct, BLE via SDK) |
| Time to transcription | Recording + upload + processing | Recording + ~2 min |
| Best for | Short recordings (< 30 min) | Long recordings (30+ min) |
Related
- Connectivity — All upload methods and failover behavior
- Device Management — Enable streaming in device settings
- Cellular Mode — Combine streaming with 4G
- Create Recording — Create streaming recordings
- Finalize Recording — Complete streaming uploads

