> ## Documentation Index
> Fetch the complete documentation index at: https://docs.daily.co/llms.txt
> Use this file to discover all available pages before exploring further.

# DailyStreamingOptions

> Output quality, lifetime, and layout options shared by cloud recording and live streaming.

`DailyStreamingOptions` defines the base configuration accepted by [`startRecording()`](/reference/react-native/instance-methods/start-recording), [`updateRecording()`](/reference/react-native/instance-methods/update-recording), [`startLiveStreaming()`](/reference/react-native/instance-methods/start-live-streaming), and [`updateLiveStreaming()`](/reference/react-native/instance-methods/update-live-streaming).

`DailyLiveStreamingOptions` extends `DailyStreamingOptions` with RTMP/HLS endpoint fields.

***

## DailyStreamingOptions

### Output quality

<ResponseField name="width" type="number">
  Output width in pixels. Must be even (a multiple of 2). Default: `1920`.
</ResponseField>

<ResponseField name="height" type="number">
  Output height in pixels. Must be even (a multiple of 2). Default: `1080`.
</ResponseField>

<ResponseField name="fps" type="number">
  Video frame rate. Default: `30`.
</ResponseField>

<ResponseField name="videoBitrate" type="number">
  Video bitrate in kbps (10–10000). Resolution-based defaults: 1080p → 5000, 720p → 3000, 480p → 2000, 360p → 1000.
</ResponseField>

<ResponseField name="audioBitrate" type="number">
  Audio bitrate in kbps (10–320).
</ResponseField>

<ResponseField name="backgroundColor" type="string">
  Background color behind video tiles, as `#rrggbb` or `#aarrggbb`.
</ResponseField>

### Session lifetime

<ResponseField name="instanceId" type="string">
  A UUID identifying this recording or streaming session. Multiple sessions can run concurrently (up to [`max_streaming_instances_per_room`](/reference/rest-api/domain/get-domain-config#response-config-max-streaming-instances-per-room) on your domain) if each has a unique `instanceId`.

  Recording and streaming sessions that share the same `instanceId` share the same underlying composition process — layout changes to one affect the other. HLS cannot share an `instanceId` with a recording or RTMP stream.
</ResponseField>

<ResponseField name="minIdleTimeOut" type="number">
  Seconds to wait before automatically ending the session when the room is idle (all users have muted video and audio). Default: `300`.
</ResponseField>

<ResponseField name="maxDuration" type="number">
  Maximum session duration in seconds after which recording/streaming is forcefully stopped. Default: `10800` (3 hours) for recordings, `86400` (24 hours) for live streams.
</ResponseField>

### Output artifacts

<ResponseField name="dataOutputs" type="string[]">
  Additional output artifacts to generate alongside the stream or recording. Supported values: `"event-json"`, `"transcript-webvtt"`, `"chat-webvtt"`.
</ResponseField>

<ResponseField name="type" type="'cloud' | 'cloud-audio-only' | 'raw-tracks' | 'local'">
  Specifies the recording type to start. **Recording only — not applicable to live streaming.** The type provided must also be enabled for the room or domain with the enable\_recording property; see [Update room](/reference/rest-api/rooms/update-room#body-properties-enable-recording-one-of-0).

  * `'cloud'` (default) — cloud recording with video composition
  * `'cloud-audio-only'` — cloud recording, audio only
  * `'raw-tracks'` — individual raw audio/video tracks, uncomposed
  * `'local'` — local browser recording
</ResponseField>

### Layout

<ResponseField name="layout" type="DailyStreamingLayoutConfig">
  Controls how participant video is composed. See [`DailyStreamingLayoutConfig`](/reference/react-native/types/daily-streaming-layout-config) for all presets and options.

  For live streaming, the `audio-only` preset is not available — use `DailyLiveStreamingLayoutConfig` (which excludes it).
</ResponseField>

## DailyLiveStreamingOptions

Extends `DailyStreamingOptions` with endpoint configuration. Provide either `rtmpUrl` or `endpoints` — not both. HLS can only be started with `endpoints`.

<ResponseField name="rtmpUrl" type="string | string[]">
  One or more RTMP destination URLs. When multiple URLs are provided, each receives the same layout. Avoid using this field if your URL contains sensitive values (stream keys, etc.) — use `endpoints` instead.
</ResponseField>

<ResponseField name="endpoints" type="DailyStreamingEndpoint[]">
  Array of endpoint objects, each with an `endpoint` string field containing the RTMP or HLS destination URL. Preferred over `rtmpUrl` as it keeps sensitive values out of method call arguments.
</ResponseField>

***

## See also

<CardGroup>
  <Card title="Types" icon="t" iconType="solid">
    * [DailyStreamingLayoutConfig](/reference/react-native/types/daily-streaming-layout-config)
  </Card>

  <Card title="Methods" icon="code" iconType="solid">
    * [startRecording()](/reference/react-native/instance-methods/start-recording)
    * [updateRecording()](/reference/react-native/instance-methods/update-recording)
    * [startLiveStreaming()](/reference/react-native/instance-methods/start-live-streaming)
    * [updateLiveStreaming()](/reference/react-native/instance-methods/update-live-streaming)
  </Card>

  <Card title="Guides" icon="book-open" iconType="solid">
    * [Live streaming](/docs/daily-js/features/live-streaming)
  </Card>
</CardGroup>
