live_media_stream_sdk 0.4.9
live_media_stream_sdk: ^0.4.9 copied to clipboard
Self-hosted Flutter live streaming with native Opus and VP8/VP9 encoding, WebM output, advanced camera/audio controls, and any binary WebSocket server.
0.4.9 #
- Started remote WebM playback on iOS as soon as playable media packets arrive instead of waiting for the complete URL response to download into memory.
- Reported incremental URL download and demux failures through player state after playback has opened.
0.4.8 #
- Reconnect WebSocket transports automatically after an established connection closes, without waiting for another outgoing media packet.
- Pause socket queue draining while disconnected, discard stale video frames, and request a fresh keyframe after reconnecting.
- Prevent explicit disconnects from starting a new reconnect cycle and avoid blocking stream shutdown during an outage.
- Expanded public API documentation for stream modes, codecs, devices, states, resolutions, and stream events.
0.4.7 #
- Added
listRecordings()for discovering finalized WebM files in the SDK-managed recording directory. - Added safe recording management with
deleteRecording(),exportStoredRecording(), andshareStoredRecording(). - Restricted deletion to WebM files located directly inside the SDK-managed recording directory.
0.4.6 #
- Added independent runtime microphone and camera enable/disable controls with
setMicrophoneEnabled()andsetCameraEnabled(). - Camera re-enabling requests a fresh keyframe so receivers can resynchronize without restarting the publishing session.
0.4.5 #
- Documented the WebSocket binary frame wire format, socket metadata fields, media headers, and JSON-only control message behavior.
0.4.4 #
- Simplified the native camera preview to render the texture directly in a portrait 9:16 viewport without affecting video encoding or live streaming.
- Preserved the existing preview constructor parameters for source compatibility.
- Reported the Android camera preview rotation separately from encoded video orientation.
0.4.3 #
- Fixed Android playback of remotely hosted audio-only WebM recordings getting stuck buffering while Media3 attempted an optional cue seek over HTTP.
0.4.2 #
- Fixed Android playback of locally recorded audio-only WebM files getting stuck buffering while Media3 searched for cue metadata.
- Attached Android loudness enhancement only after ExoPlayer allocates a valid audio session, preventing preparation failures on affected devices.
- Added an audio record-to-playback regression test action to the example app.
0.4.1 #
- Fixed iOS recording startup failing with a file-not-found error when opening
a named WebM destination such as
Test.webm. - Finalized Android audio-only WebM recordings with duration and cue metadata so completed files expose a reliable seekable timeline.
- Reported Android player seekability from the active Media3 item instead of assuming every non-live source is seekable.
0.4.0 #
- Added a headless-friendly player control API. Applications can now use
LiveMediaVideoSurfacedirectly or setshowControls: falseand build their own controls from the controller state. - Added
LiveMediaVideoPlayer.controlsBuilder, which replaces the SDK control overlay with application-owned Flutter widgets while retaining the native video surface. - Added
LiveMediaPlayerTimelinethroughstate.timelineandcontroller.timeline, exposing position, buffered position, duration, live/seekability flags, optional seekable bounds, and a fixed-duration progress value for custom scrubbers. - Added
LiveMediaPlayerCapabilitiesthroughstate.capabilitiesandcontroller.capabilities, allowing custom UIs to show only currently available actions such as seek, mute, volume, playback speed, audio route, and return-to-live. - Made
LiveMediaPlayerControlleraValueListenable<LiveMediaPlayerState>and added itsstatesbroadcast stream for reactive player UIs. - Added
seekTo,seekBy,togglePlayback, andsetPlaybackRatecontroller helpers for custom controls. - Updated
play()so pressing play after a completed seekable audio or video restarts the media from the beginning. - Fixed partial native player events so absent timeline fields retain their previous values instead of resetting to zero.
0.3.0 #
- Fixed iOS front/rear camera orientation and front-camera mirroring by requesting upright portrait pixel buffers, encoding their actual dimensions, and removing the duplicate 90° preview and packet rotation.
- Fixed Android Opus timestamps to prevent accelerated audio in some recordings.
- Normalized Android and iOS microphone audio before encoding so quiet input is raised before applying manual gain.
- Fixed iOS gain so it is applied directly to PCM audio data.
- Added Android playback loudness boost and updated speaker routing to use media-volume controls.
- Updated iOS speaker/receiver audio-session routing.
- Disabled the Debug dylib to retain
flutter rundebug-launch compatibility on older iOS devices.
0.2.0 #
- Added native Android and iOS WebM recording for audio-only, video-only, and combined streams without running a second encoder.
- Added configurable recording directories and file names, collision-safe generated names, and rich completion metadata.
- Added hybrid native playback: Android Media3 for platform-supported containers/codecs and adaptive HLS/DASH, iOS AVPlayer for Apple-supported files/URLs/HLS, plus the SDK libvpx/Opus WebM fallback.
- Added an iOS Ogg Opus fallback for
.opus,.ogg, and.ogaaudio files that AVPlayer cannot decode natively. - Fixed a Swift runtime crash while reading native iOS audio codec metadata, including MP3 URL playback on newer Apple Silicon simulators.
- Fixed silent iOS WebM audio by splitting Xiph, fixed-size, and EBML-laced Opus blocks into individual decoder packets.
- Added
MediaUrlSource.parse, which automatically prefixes user-entered media URLs withhttps://when no scheme is supplied. - Updated the example to accept a runtime WebSocket IP address or URL, normalize missing schemes, and teach simultaneous WebM recording and socket delivery from the same encoded packets.
- Fixed bare
IP:portWebSocket input being parsed as an invalid URI scheme. - Fixed distorted iOS WebM/Ogg Opus playback by using the Opus 48 kHz decode clock, accurate packet frame counts, and an explicit playback audio session.
- Fixed iOS
OSStatus -50while opening recorded WebM/Opus media by removing playback-incompatible audio-session route options and adding contextual native audio initialization errors. - Replaced packet-by-packet AVAudioConverter Opus playback on iOS with the stateful libopus 1.6.1 reference decoder and gapless PCM buffer scheduling for clean WebM/Ogg Opus file and URL playback.
- Fixed iOS Opus PCM corruption and underruns by passing libopus an explicit mutable sample buffer, converting interleaved samples safely, batching PCM into continuous blocks, and prebuffering file/URL audio ahead of playback.
- Fixed distorted iOS playback of multichannel Opus WebM media by reading the
complete
OpusHead, using the required libopus multistream channel mapping, and downmixing 5.1 output to stereo. - Fixed timestamp drift in SDK-recorded iOS audio/video WebM files by preserving each encoder packet's media timestamp instead of rewriting asynchronous audio/video callbacks as a synthetic sequence.
- Added player audio routing for system-default, loudspeaker, and phone receiver output on Android and iOS.
- Fixed iOS recording audio discontinuities by preserving all PCM requested by
AVAudioConverter, accepting valid output returned withinputRanDry, deriving timestamps from encoded Opus frame durations, and flushing final packets before closing the WebM writer. - Isolated socket delivery from capture/recording with a bounded, event-queue transport scheduler, audio/keyframe priority, video backpressure recovery, and fail-open recording when a WebM socket can no longer keep up.
- Increased iOS file/URL Opus prebuffering and PCM batch duration while retaining the low-latency live-stream settings.
- Added live recording duration to stream statistics.
- Added native Android and iOS recording export through the system Files/Save picker and sharing through the platform share sheet.
- Updated the example so users enter a recording name without an extension, see elapsed recording time, and can save to Documents/Downloads/iCloud Drive or share through WhatsApp and other installed applications.
- Added WebM playback from raw byte streams and WebSocket live streams.
- Added real player container, codec, file-size, track, rotation, resolution, bitrate, sample-rate, and channel metadata.
- Added reusable Flutter video and audio player controls with seek, volume, mute, playback speed, elapsed/total time, adaptive sizing, and fullscreen orientation support.
- Added Android Media3 playback and iOS libvpx/Opus playback pipelines.
- Added iOS Swift Package Manager support while retaining CocoaPods compatibility.
- Fixed Android camera/video orientation by combining sensor direction, device rotation, and front/rear lens orientation; the resolved rotation is now carried by live packets, recording metadata, and the WebM container.
- Fixed portrait Android recordings by rendering Camera2 frames into a portrait encoder surface without applying the sensor rotation twice.
- Fixed Android WebM recordings reporting multi-day or effectively infinite
durations by reading each SurfaceTexture timestamp after
updateTexImageand normalizing video presentation timestamps to a zero-based timeline. - Added an Android camera preview texture and connected it to the Camera2
capture session, allowing
LiveMediaPreviewand the example application to display the live view while streaming or recording. - Expanded the English and Turkish README introductions to explain the complete capture-to-server-to-player architecture, simultaneous recording, export, sharing, and server responsibilities.
- Added explicit Android/iOS encode, decode, codec, container, and adaptive streaming support matrices plus a complete production lifecycle guide.
0.1.0 #
- Added Android and iOS audio-only, video-only, and audio/video capture.
- Added Opus audio and VP8/VP9 video encoding.
- Added separate media packet and live WebM output modes.
- Added transport-independent delivery and a binary WebSocket transport.
- Added native iOS camera preview, camera switching, and orientation handling.
- Added Android foreground service support for active streams.
- Added audio processing controls, input-device selection, stream events, and live statistics.
- Added runtime bitrate, keyframe, pause/resume, reconnect, background-audio, and iOS thermal-management support.