rtmp_streaming 1.0.5
rtmp_streaming: ^1.0.5 copied to clipboard
A Flutter plugin for Camera and Microphone streaming library via RTMP.
rtmp_stream #
π Overview #
rtmp_stream is a Flutter plugin designed to provide unified RTMP streaming and video recording capabilities for Android and iOS.
It addresses the lack of suitable Flutter RTMP plugins on pub.dev: existing plugins are either no longer maintained or rely on outdated dependencies, making them unsuitable for modern mobile applications.
βοΈ Technical Foundation #
- Android: Based on
com.github.pedroSG94.RootEncoder:library:2.7.1 - iOS: Based on HaishinKit 2.2.5
By leveraging these mature libraries, rtmp_stream provides a consistent cross-platform API interface, reducing development complexity.
β Why This Plugin #
- No suitable Flutter RTMP plugin exists on pub.dev.
- Existing plugins suffer from:
- Long-term lack of maintenance.
- Outdated dependencies, incompatible with the latest Flutter and platform SDKs.
Therefore, the goal of rtmp_stream is to deliver a modern, stable, and maintainable RTMP streaming solution.
π οΈ Supported Methods #
π Common Methods (Android & iOS) #
- π· Get available cameras:
availableCameras - βοΈ Initialize plugin:
initialize - π₯ Start local video recording:
startVideoRecording - βΉοΈ Stop local video recording:
stopRecording - π‘ Start recording and streaming:
startVideoRecordingAndStreaming - βΉοΈ Stop recording or streaming:
stopRecordingOrStreaming - π‘ Start video streaming:
startVideoStreaming - βΉοΈ Stop video streaming:
stopStreaming - π Switch camera:
switchCamera - π Toggle audio on/off:
switchAudio - π‘ Toggle flashlight on/off:
switchFlashLight - π Get stream statistics:
getStreamStatistics - ποΈ Dispose plugin:
dispose - πΈ Take snapshot during streaming:
takePicture
π iOS Exclusive Methods #
Since HaishinKit supports not only streaming but also RTMP playback, iOS provides additional features:
- βΈοΈ Pause stream playback:
pauseStreamNote: This pauses playback, not streaming.
- βΆοΈ Resume stream playback:
resumeStreamNote: This resumes playback, not streaming.
- ποΈ Set audio bitrate:
setAudioSettings - ποΈ Set video settings:
setVideoSettings(optionalexpectedFrameRate,bitRateModeβ HaishinKit 2.2.1+ / 2.2.2+) - π± Multitasking camera access:
setMultitaskingCameraAccessEnabled(HaishinKit 2.2.5+, iOS 17+ when supported) - π Get temporary mute status:
getHasAudio - π Set temporary mute:
setHasAudio - π₯ Get temporary video stop status:
getHasVideo - π₯ Set temporary video stop:
setHasVideo - π¬ Set streaming frame rate:
setFrameRate - βοΈ Set session preset:
setSessionPreset - πΌοΈ Set screen dimensions:
setScreenSettings
π€ Android Exclusive Methods #
Android provides additional features during live streaming:
- βΈοΈ Pause recording:
pauseVideoRecording - βΆοΈ Resume recording:
resumeVideoRecording - π¨ Apply filter:
setFilterFilter
typevalues correspond to filters defined in source code:
CameraNativeView.kt - β Remove filter:
removeFilter - π¨ BT.709 encoding hint:
setForceBt709Color(RootEncoder 2.7.0+) - πΆ RTMP ping / RTT:
setRtmpShouldSendPings(RootEncoder 2.7.0+)
π Extended API usage (platform-specific) #
Android: setForceBt709Color(bool enabled) #
- What it does: Tells the video encoder to use a BT.709 color matrix for encoded video, which can align colors with players or servers that expect BT.709 for HD content.
- When to call: After
initialize, before starting recording or streaming (or before the nextpreparepath). The plugin applies the flag when preparing video for record/stream. - Example:
await controller.setForceBt709Color(true);
await controller.startVideoStreaming(url);
Android: setRtmpShouldSendPings(bool enabled) #
- What it does: Enables RTMP ping commands so the server can respond with pong; the client can derive round-trip time (RTT).
- When to call: After
initialize, beforestartVideoStreaming(or combined record+stream). Must be set before connect. - Related: Use
getStreamStatistics()while streaming; when pings are enabled and the server supports them, the map includesrttMicros(microseconds) andbytesSend(where supported). - Example:
await controller.setRtmpShouldSendPings(true);
await controller.startVideoStreaming(url);
// later, while streaming:
final stats = await controller.getStreamStatistics();
// stats.rttMicros, stats.bytesSend, ...
iOS: setVideoSettings({ ... }) #
Existing parameters: bitrate, width, height, frameInterval, profileLevel (iOS only).
HaishinKit 2.2.1+ / 2.2.2+ extensions (optional named parameters):
| Parameter | Type | Meaning |
|---|---|---|
expectedFrameRate |
double? |
Encoder hint; also appears in RTMP onMetaData as framerate (2.2.2+). |
bitRateMode |
String? |
"average" (default behavior), "constant" (iOS 16+), "variable" (iOS 26+ / VideoToolbox VBR). |
- When to call: After
initialize, typically before or early during streaming; follow HaishinKit guidance for changing settings while live. - Example:
await controller.setVideoSettings(
expectedFrameRate: 30,
bitRateMode: 'average',
);
iOS: setMultitaskingCameraAccessEnabled(bool enabled) #
- What it does: When supported, sets
AVCaptureSession.isMultitaskingCameraAccessEnabledso capture can continue in multitasking / split-screen / PiP-style scenarios (HaishinKit 2.2.5+). - Requirements: iOS 17+ for the underlying configuration API; device must report
isMultitaskingCameraAccessSupported. - When to call: After
initialize, before starting streaming (same session as preview). - Example:
await controller.setMultitaskingCameraAccessEnabled(true);
await controller.startVideoStreaming(url);
π Conclusion #
rtmp_stream provides Flutter developers with a cross-platform, modern RTMP streaming and video recording plugin, addressing the shortcomings of the current ecosystem.
It is built on Androidβs RootEncoder and iOSβs HaishinKit, offering a unified API while extending playback and audio/video controls on iOS, and snapshot and filter features on Androidβhelping developers quickly build live streaming and recording applications.