mebius 0.2.2
mebius: ^0.2.2 copied to clipboard
Mebius live video SDK for Flutter — broadcast and watch real-time streams through the Mebius gateway with a single, simple API.
0.2.2 #
- A viewer no longer gets stuck on a black frame when the real-time route connects but sends nothing. The 8-second first-frame budget existed for exactly that case, but the check behind it asked whether a video track was present and enabled — true from the moment the session is negotiated, and true forever after, whether or not a single frame follows. So the route always reported success, playback never moved on to the next route, and there was no error to react to. Playback now waits for the decoder to actually produce a frame.
- A route that walks away is released properly. Failover never ran before this fix, so a peer connection was never abandoned; now that it can be, the connection is disposed rather than merely closed.
- A hiccup reading playback statistics no longer surfaces as an
unknownerror carrying an internal message. It is treated as "not playing yet", which is what it means.
Known limitation, unchanged: a broadcast with no camera — audio only — cannot be played on the real-time route, on any Mebius SDK. Audio arrives, but the first-frame budget is waiting for a picture that never comes, so playback falls through to the buffered routes and then reports a connection failure. Publish with video if you need the real-time route.
0.2.1 #
- A broadcast published from this SDK now reaches viewers who are not on the real-time route. libwebrtc negotiated VP8, which the gateway's segment-based deliveries cannot carry — they dropped the video track, so those viewers got audio only while the device showed a healthy preview and bitrate the whole time. The publishing transceiver now prefers H264, with VP8 kept as the fallback for a device that cannot encode H264.
0.2.0 #
Mebius.connectacceptsdeliveries, the route list your backend receives with the access token. Pass it through as-is; Mebius orders it and picks from it. Without it every viewer is served from Mebius origin instead of the nearest edge — on mobile that is a per-viewer bill rather than none.- New
MebiusPlayerMode.auto, andcreatePlayer()now defaults to it. The old default waslowLatency, which opened a per-viewer real-time session for every audience member; only a monitor needs one. - Playback walks an ordered route list with an 8-second first-frame budget per
route. A route that opens successfully is not yet a route that plays: an edge
with no ingest answers 200 with an empty stream, and a WebRTC connection reports
connectedwhile zero frames arrive. Previously either case left the viewer on a black frame with no error to react to. - New
client.createMonitor()for watching the other side of a co-broadcast. - New
MebiusDeliverywithlistFromJson, which skips malformed entries instead of throwing, andisResolvable, which refuses any path that would send the access token to a host Mebius did not choose. - The buffered mid-latency route is deliberately not offered on Flutter: the platform player cannot play it, so declaring it would be a mode that can never work.
Changelog #
All notable changes to the mebius package are documented here. This project
adheres to Semantic Versioning. The public API is stable
within a major version.
0.1.0 #
- Initial release.
- Gateway contract aligned with the Mebius stream engine: the access token is
passed via the
?token=query parameter (the form the engine enforces) and scale playback is served from/live/{streamId}/index.m3u8. Mebius.init/Mebius.connectsession bootstrap.MebiusClient.createBroadcasterandMebiusClient.createPlayer.MebiusBroadcaster:start,stop,switchCamera,setMicEnabled,setCameraEnabled, andstarted/stopped/statsevents.MebiusPlayer:play,stop,setVolume, low-latency and scale modes, andplaying/buffering/ended/statsevents.MebiusViewwidget for broadcaster preview and player surfaces.- Stable
MebiusErrorcodes:TOKEN_EXPIRED,PERMISSION_DENIED,CONNECTION_FAILED,NOT_CONNECTED,STREAM_NOT_FOUND,UNKNOWN.