# Live streaming

> Choose Agora, LiveKit, or raw WebRTC to publish a Nosmai-processed camera feed from Flutter, Android, or iOS.

> For AI agents: the complete documentation index is at https://nosmai.com/llms/effects.txt

Product: Nosmai Effects
Group: integrations
Source: https://nosmai.com/docs/effects/integrations/live-streaming/

Nosmai processes the camera feed before the streaming provider publishes it.
The provider continues to manage rooms, signalling, audio, participants, and
network transport.

![A camera feed passes through Nosmai Effects before a streaming provider publishes it](/images/docs/live-streaming-options-v1.svg)

## Choose an integration

| Integration | Available platforms | Use it when |
| --- | --- | --- |
| Agora | Android, iOS, Flutter | Your application already uses Agora RTC Engine |
| LiveKit | Android, iOS, Flutter | You use LiveKit Cloud or a self-hosted LiveKit server |
| Raw WebRTC | Android, iOS | You own signalling, peer connections, or a custom WebRTC stack |

Flutter has maintained Agora and LiveKit bridges. Native Android and iOS have
verified examples for all three routes. React Native does not currently expose
a high-rate zero-copy streaming bridge, and the Web SDK remains a developer
preview, so neither is listed as a verified streaming target here.

## Keep one camera owner

Nosmai owns camera capture and the processed local preview in the verified
streaming examples. Do not also ask the streaming provider to open its camera.
A second camera path can fail to start, publish unfiltered video, or reduce
frame rate.

The correct path is:

1. Start Nosmai capture and processing.
2. Create a custom video source or track for the provider.
3. Send Nosmai's processed output into that source.
4. Publish the custom track.
5. Stop frame production before releasing the provider session.

## What stays with your application

- Provider credentials, room tokens, and signalling
- Microphone capture and audio publishing
- Participant, reconnect, and background lifecycle
- Encoder settings, bitrate, simulcast, and orientation policy
- Customer-facing errors and connection state

## Verify a stream

Apply a clearly visible effect and join from a second device. Confirm that the
remote participant sees the filtered feed, not the raw camera, and test camera
switch, stop, rejoin, portrait orientation, and app backgrounding.

## Next steps

- [Use Agora in Flutter](/docs/effects/integrations/agora/flutter/)
- [Use LiveKit in Flutter](/docs/effects/integrations/livekit/flutter/)
- [Use LiveKit on Android](/docs/effects/integrations/livekit/android/)
- [Use raw WebRTC on iOS](/docs/effects/integrations/webrtc/ios/)
- [Understand off-screen rendering](/docs/effects/concepts/off-screen-rendering/)

## References

- [Nosmai Effects samples](/docs/effects/samples/)
- [Platform and feature support](/docs/effects/platform-support/)
