# getstream ingress

{/*cli-reference: generated by scripts/cli-reference.mjs from `getstream ingress --help` (Stream CLI 0.0.0-local). Edit only inside the custom blocks; everything else is overwritten on the next run.*/}

**Scope:** app

Generate the signed ingress URL to stream into a call with ffmpeg, OBS,
etc. Protocol subcommands print the URL; add `--obs` to print copyable
values for the OBS stream settings instead.

The call is created if it doesn't exist, under `--cid` or `--call-id`, or
under a random id when neither is given. The specified `--user` becomes
the publisher. Without `--ttl` the signed URL never expires, so prefer
setting a shorter one.

Like every app-scoped command, `ingress` acts on the current project's
app unless `--app-id` or the `STREAM_API_KEY` and `STREAM_API_SECRET`
environment variables override it.

{/*custom:intro*/}
{/*/custom:intro*/}

```sh
getstream ingress [flags]
getstream ingress [command]
```

## Examples

```sh
ffmpeg -re -i video.mp4 -c:v libx264 -c:a aac -f mpegts \
  "$(getstream ingress srt --cid livestream:my-stream --user host --ttl 1h)"

getstream ingress rtmp --cid livestream:my-stream --user host --obs
```

## Subcommands

### `getstream ingress rtmp`

Publish over RTMPS: works with nearly any streaming software.

```sh
getstream ingress rtmp [flags]
```

#### Examples

```sh
ffmpeg -re -i video.mp4 -c:v libx264 -c:a aac -f flv "$(getstream ingress rtmp --cid livestream:my-stream --user host)"
```

#### Flags

| Flag    | Description                        |
| ------- | ---------------------------------- |
| `--obs` | print copyable OBS stream settings |

### `getstream ingress srt`

Publish over SRT: a modern alternative to RTMP with UDP transport,
codec-agnostic support, and strong resilience to jitter and packet loss.

```sh
getstream ingress srt [flags]
```

#### Examples

```sh
ffmpeg -re -i video.mp4 -c:v libx264 -c:a aac -f mpegts "$(getstream ingress srt --cid livestream:my-stream --user host)"
```

#### Flags

| Flag    | Description                        |
| ------- | ---------------------------------- |
| `--obs` | print copyable OBS stream settings |

### `getstream ingress whip`

Publish over WHIP: WebRTC straight to Stream's edge, with no transcoding
cost. Requires OBS 32.1+, or FFmpeg 8+ built with the WHIP muxer.

Check if the WHIP muxer is available:

```text
ffmpeg -h muxer=whip
```

```sh
getstream ingress whip [flags]
```

#### Examples

```sh
ffmpeg -re -i video.mp4 -profile:v baseline -f whip "$(getstream ingress whip --cid livestream:my-stream --user host)"
```

#### Flags

| Flag    | Description                        |
| ------- | ---------------------------------- |
| `--obs` | print copyable OBS stream settings |

## Flags

| Flag                   | Description                                                          |
| ---------------------- | -------------------------------------------------------------------- |
| `--app-id <int>`       | id of the app to act on; defaults to the project's app               |
| `--call-id <string>`   | call id; a new call under a random id when omitted                   |
| `--call-type <string>` | call type (default "livestream")                                     |
| `--cid <string>`       | call as &lt;type>:&lt;id>, instead of --call-type and --call-id      |
| `--ttl <string>`       | signed URL lifetime (e.g. 30s, 5m, 2h, 1d); no expiration if omitted |
| `--user <string>`      | publishing user (required)                                           |

## Global flags

| Flag        | Description                               |
| ----------- | ----------------------------------------- |
| `--verbose` | print API requests and full error details |

{/*custom:notes*/}
{/*/custom:notes*/}

---

For the most recent version of this documentation, visit [https://getstream.io/cli/docs/commands/ingress/](https://getstream.io/cli/docs/commands/ingress/).