Skip to main content
Streaming Upload allows Bota devices to upload completed audio chunks to the cloud while recording continues. This significantly reduces time-to-insight for long recordings.

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:
  1. Device records audio into Buffer A
  2. When Buffer A is full (one chunk), swap to Buffer B
  3. Upload Buffer A contents to S3 in the background
  4. Continue recording into Buffer B
  5. Repeat until recording ends
  6. Call finalize to stitch chunks and trigger transcription
This requires only ~2.5 MB of device memory (two chunks) regardless of recording length, compared to storing the entire recording on-device.

Connectivity

Streaming upload works across all connectivity methods:
PathNetworkHow It WorksBest For
WiFi UploadWi-FiDevice uploads chunks directly to S3 over Wi-FiNote, Pin/Pin Pro with WiFi configured
4G UploadCellularDevice uploads chunks directly to S3 over cellularPin, Pin Pro in the field
Wi-Fi DirectP2P Wi-FiDevice streams to phone via Wi-Fi Direct, phone uploadsFast phone-mediated sync
BLE SyncBLE + phone internetDevice streams audio over BLE to phone, phone uploads to S3Any device with phone nearby
All paths use the same backend API. For phone-mediated paths (BLE Sync, Wi-Fi Direct), the React Native SDK manages the transfer — the device streams already-recorded audio from its SD card while still recording.

Chunk Size

Choose chunk duration based on your use case:
Chunk DurationFile Size (Opus 32kbps)Trade-off
1 minute~250 KBMost real-time, highest overhead
5 minutes~1.25 MBRecommended — balanced
10 minutes~2.5 MBFewer uploads, less overhead
15 minutes~3.75 MBUltra-long recordings only
Smaller chunks = faster feedback but more upload requests. 5 minutes is the recommended default.

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. 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:
  1. Device records audio and writes to SD card (as usual)
  2. SDK initiates BLE streaming for the in-progress recording
  3. Device reads already-flushed data from SD card and sends over BLE
  4. Phone buffers chunks and uploads to S3 as they fill
  5. Recording stops — device flushes remaining data
  6. Phone uploads final chunk and calls finalize
BLE streaming is an optimization, not a requirement. If BLE disconnects, the recording continues safely on the device’s SD card and can be batch-synced later.
ScenarioWhat Happens
BLE connected when recording startsLive streaming via BLE → phone → S3
BLE not connectedNormal recording to SD card, batch sync later
BLE drops mid-recordingRecording continues on device, batch sync picks it up
App killed during streamingSame 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 UploadStreaming Upload
Device storageFull recording (~15 MB for 60 min)2 chunks (~2.5 MB)
Upload timingAfter recording endsDuring recording
NetworkAny (BLE, WiFi, Cellular)Any (WiFi, Cellular, Wi-Fi Direct, BLE via SDK)
Time to transcriptionRecording + upload + processingRecording + ~2 min
Best forShort recordings (< 30 min)Long recordings (30+ min)