> ## 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.

# useLiveStreaming

> Returns information about a live stream, along with helper functions that wrap daily-js live streaming-related methods.

<Badge color="blue">Paid plans only</Badge>

`useLiveStreaming(params?) : Object`

`useLiveStreaming` can also be used to set up optional callbacks for live streaming [events](/reference/daily-js/events/live-streaming-events).

When multiple live streams are running concurrently (see [multi-instance live streaming](/docs/guides/features/live-streaming/multi-instance)), you can pass an `instanceId` to get per-instance state. Without `instanceId`, the hook returns aggregate state across all instances. For a list of all active instances, see [`useLiveStreamingInstances`](/reference/daily-react/use-live-streaming-instances).

## Parameters (optional)

<ParamField body="instanceId" type="string">
  A valid UUID. When provided, returns state for a specific live streaming instance and filters event callbacks to only fire for that instance. See [multi-instance live streaming](/docs/guides/features/live-streaming/multi-instance).
</ParamField>

<ParamField body="onLiveStreamingError" type="Function">
  Callback for the [`live-streaming-error`](/reference/daily-js/events/live-streaming-events#live-streaming-error) event.
</ParamField>

<ParamField body="onLiveStreamingStarted" type="Function">
  Callback for the [`live-streaming-started`](/reference/daily-js/events/live-streaming-events#live-streaming-started) event.
</ParamField>

<ParamField body="onLiveStreamingStopped" type="Function">
  Callback for the [`live-streaming-stopped`](/reference/daily-js/events/live-streaming-events#live-streaming-stopped) event.
</ParamField>

<ParamField body="onLiveStreamingUpdated" type="Function">
  Callback for the [`live-streaming-updated`](/reference/daily-js/events/live-streaming-events#live-streaming-updated) event.
</ParamField>

<ParamField body="onLiveStreamingWarning" type="Function">
  Callback for the [`nonfatal-error` event with type `'live-streaming-warning'`](/reference/daily-js/events/error-events#live-streaming-warning).
</ParamField>

## Return value

An object with the following properties:

### Without `instanceId` (aggregate state)

When called without `instanceId`, the hook returns aggregate state across all live streaming instances. This works well for single-instance use cases — the scalar fields (`errorMsg`, `layout`) reflect the only active instance. With multiple concurrent instances, these fields reflect the first active instance; use `useLiveStreaming({ instanceId })` for unambiguous per-instance access.

<ResponseField name="errorMsg" type="string">
  Error message from the first errored instance. With multiple instances, use `useLiveStreaming({ instanceId })` for per-instance error state.
</ResponseField>

<ResponseField name="isLiveStreaming" type="boolean">
  `true` if any live streaming instance is active.
</ResponseField>

<ResponseField name="layout" type="Object">
  Layout of the first active instance. With multiple instances, use `useLiveStreaming({ instanceId })` for per-instance layout.
</ResponseField>

<ResponseField name="startLiveStreaming" type="Function">
  Wraps [`startLiveStreaming()`](/reference/daily-js/instance-methods/start-live-streaming).
</ResponseField>

<ResponseField name="stopLiveStreaming" type="Function">
  Wraps [`stopLiveStreaming()`](/reference/daily-js/instance-methods/stop-live-streaming).
</ResponseField>

<ResponseField name="updateLiveStreaming" type="Function">
  Wraps [`updateLiveStreaming()`](/reference/daily-js/instance-methods/update-live-streaming).
</ResponseField>

### With `instanceId` (per-instance state)

When called with `instanceId`, the hook returns state for that specific live streaming instance only.

<ResponseField name="errorMsg" type="string">
  Error message for this instance, if any.
</ResponseField>

<ResponseField name="instanceId" type="string">
  The instance ID.
</ResponseField>

<ResponseField name="isLiveStreaming" type="boolean">
  Whether this instance is currently live streaming.
</ResponseField>

<ResponseField name="layout" type="Object">
  The [live streaming layout](/docs/guides/features/live-streaming#live-streaming-layout-options) for this instance.
</ResponseField>

<ResponseField name="startLiveStreaming" type="Function">
  Wraps [`startLiveStreaming()`](/reference/daily-js/instance-methods/start-live-streaming).
</ResponseField>

<ResponseField name="stopLiveStreaming" type="Function">
  Wraps [`stopLiveStreaming()`](/reference/daily-js/instance-methods/stop-live-streaming).
</ResponseField>

<ResponseField name="updateLiveStreaming" type="Function">
  Wraps [`updateLiveStreaming()`](/reference/daily-js/instance-methods/update-live-streaming).
</ResponseField>

<Tip>
  For more on live streaming with Daily, reference our [guide](/docs/guides/features/live-streaming).
</Tip>

## Example

### Basic usage

```jsx theme={null}
import { useLiveStreaming } from '@daily-co/daily-react';

export const UseLiveStreamingDemo = () => {
  const liveStreamingState = useLiveStreaming();

  return (
    <div>
      This call is {!liveStreamingState.isLiveStreaming ? 'not' : ''} live
      streamed
    </div>
  );
};
```

### Multi-instance usage

```jsx theme={null}
import { useLiveStreaming } from '@daily-co/daily-react';
import { useLiveStreamingInstances } from '@daily-co/daily-react';

// instanceId must be a valid UUID
const MOBILE_INSTANCE = 'a1b2c3d4-5678-9abc-def0-1234567890ab';
const DESKTOP_INSTANCE = 'b2c3d4e5-6789-abcd-ef01-234567890abc';

export const MultiStreamDemo = () => {
  // Aggregate state: true if any instance is streaming
  const { isLiveStreaming } = useLiveStreaming();

  // Per-instance state
  const mobileStream = useLiveStreaming({
    instanceId: MOBILE_INSTANCE,
  });
  const desktopStream = useLiveStreaming({
    instanceId: DESKTOP_INSTANCE,
  });

  return (
    <div>
      <p>Any stream active: {isLiveStreaming ? 'Yes' : 'No'}</p>
      <p>Mobile: {mobileStream.isLiveStreaming ? 'Live' : 'Idle'}</p>
      <p>Desktop: {desktopStream.isLiveStreaming ? 'Live' : 'Idle'}</p>
    </div>
  );
};
```

## See also

<CardGroup>
  <Card title="daily-js methods" icon="code" iconType="solid">
    * [startLiveStreaming()](/reference/daily-js/instance-methods/start-live-streaming)
    * [stopLiveStreaming()](/reference/daily-js/instance-methods/stop-live-streaming)
    * [updateLiveStreaming()](/reference/daily-js/instance-methods/update-live-streaming)
  </Card>

  <Card title="Events" icon="bolt" iconType="solid">
    * [live-streaming-started](/reference/daily-js/events/live-streaming-events#live-streaming-started)
    * [live-streaming-stopped](/reference/daily-js/events/live-streaming-events#live-streaming-stopped)
    * [live-streaming-error](/reference/daily-js/events/live-streaming-events#live-streaming-error)
    * [live-streaming-updated](/reference/daily-js/events/live-streaming-events#live-streaming-updated)
    * [nonfatal-error type live-streaming-warning](/reference/daily-js/events/error-events#live-streaming-warning)
  </Card>

  <Card title="Hooks" icon="code" iconType="solid">
    * [useLiveStreamingInstances()](/reference/daily-react/use-live-streaming-instances)
  </Card>

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