lunionmeet_flutter 1.3.0 copy "lunionmeet_flutter: ^1.3.0" to clipboard
lunionmeet_flutter: ^1.3.0 copied to clipboard

SDK Flutter de lunion.meet — appels audio et vidéo temps réel à intégrer dans votre application Flutter (iOS, Android, web ; desktop macOS/Linux). Se connecte au SFU str0m (WebRTC standard, sans media [...]

Changelog #

1.3.0 #

  • Le partage d'écran survit à la reconnexion réseau. La capture est conservée pendant la coupure, puis ré-attachée à la nouvelle RTCPeerConnection et ré-étiquetée screen au welcome suivant — sinon l'écran réapparaîtrait en « caméra » chez les pairs (source par défaut du SFU). Parité avec les SDK web et React Native. Si l'utilisateur a arrêté le partage depuis le bandeau système pendant la coupure, rien n'est republié (onEnded a déjà purgé l'état).
  • Scaffolding natif prêt à copier (manifeste Android, extension iOS ReplayKit) + checklist de validation sur appareil : docs/screen-share-native/.

1.2.0 #

  • Arrêt du partage d'écran complet. stopScreenShare() stoppe désormais les pistes avant de disposer le flux — ce qui libère réellement la capture système (MediaProjection Android / ReplayKit iOS / capture desktop) et fait disparaître l'indicateur de l'OS. Auparavant seul replaceTrack(null) était appelé : la capture continuait en arrière-plan. La méthode est ré-entrante (appel multiple sans effet de bord).
  • Arrêt depuis l'OS pris en compte : shareScreen() écoute track.onEnded, donc stopper le partage depuis le bandeau système appelle automatiquement stopScreenShare() et met à jour isScreenSharing (l'UI ne reste plus bloquée sur « partage en cours »).
  • Correctifs de cycle de vie : leave() (et donc dispose()) ainsi que la reconnexion réseau libèrent maintenant la capture d'écran. Sans cela, quitter la salle — ou une simple coupure réseau — laissait une capture système active sans aucune interface pour l'arrêter.
  • Documentation : guide de configuration native (Android MediaProjection + service au premier plan ; iOS Broadcast Upload Extension + App Group) — docs/SCREEN-SHARE-NATIVE.md. Sans cette configuration, shareScreen() échoue au runtime sur mobile.

1.1.0 #

  • Reconnexion réseau automatique (le manque n°1 en mobile) : sur coupure transitoire (bascule 4G↔wifi, mise en arrière-plan, perte de porteuse) ou échec ICE, LunionRoom ré-ouvre le WebSocket, reconstruit la RTCPeerConnection et re-publie le flux local, en réutilisant le clientId (cid) pour être ré-admis par le SFU. Configurable via le paramètre reconnect (LunionReconnectConfig) ; backoff exponentiel plafonné, activée par défaut.
  • Nouvel état RoomStatus.reconnecting (les participants distants sont purgés puis reconstruits) ; callbacks onReconnecting(attempt) / onReconnected. Les états terminaux (refusé, éjecté) arrêtent la reconnexion.
  • Réception de la modération : LunionRoom applique désormais localement la coupure/reprise demandée par l'hôte (muteMic / muteCam / unmuteMic / unmuteCam) — piste locale coupée à la source et micEnabled / cameraEnabled mis à jour, en cohérence avec l'enforcement serveur (drop RTP). Configurable via autoApplyModeration (défaut true) ; callback onModerated(op).
  • Plan de contrôle entrant complet (parité web) : locuteur actif (activeSpeaker + onActiveSpeaker), statut et contrôle d'enregistrement (onRecordingStatus, startRecording / stopRecording), notifications terminales onRoomFull / onServerBusy, métadonnée de source de piste onTrackMeta et action publique setTrackSource, sur LunionRoom.
  • Mode récepteur pur : paramètre receiveOnly sur LunionRoom (rejoint sans publier, sans getUserMedia — écran de projection / spectateur).
  • Bascule caméra : switchCamera() sur LunionRoom (avant/arrière, absent jusque-là).
  • Qualité vidéo par couche (rid) : setVideoLayerPolicy sur LunionRoom (via LunionVideoLayer) — couche active + débit max, combinés au dynacast par un writer unique (supprime la course des deux writers qui pouvait figer la vidéo).
  • Chiffrement de bout en bout (E2EE) : paramètre e2ee sur LunionRoom (clé partagée 256 bits via LunionE2ee) — chaque frame émise/reçue est (dé)chiffrée en AES-GCM par le FrameCryptor natif de flutter_webrtc ; le SFU ne relaie que de l'opaque, la clé ne transite jamais par le serveur. Cryptors recréés à chaque reconnexion. Validation runtime sur appareil recommandée (tous les pairs doivent partager la même clé).

1.0.1 #

  • Correctif : l'URL du SFU (sfuUrl) est utilisée telle quelle, plus de /ws ajouté (passez le champ url du token, access.url, directement). Inclut le partage d'écran (shareScreen/stopScreenShare) et le plan de contrôle entrant (onChatMessage/onReaction/ onPeerState).

1.0.0 #

  • BREAKING : la classe de signalisation bas niveau Str0mSignaling devient LunionSignaling (fichier signaling.dart). LunionRoom, LunionVideoView, RemoteParticipant, RoomStatus sont inchangés ; seul un usage avancé direct de la signalisation doit mettre à jour son import.
  • Dynacast (économie d'uplink), automatique : quand aucun pair n'est abonné, l'upload vidéo est coupé à la source et repris à l'arrivée d'un abonné (état producerActive sur LunionRoom).
  • Préférence de codec matériel : paramètre preferredVideoCodec (ex. "video/H264") sur LunionRoom, accélération matérielle. No-op si indisponible.
  • Partage d'écran : shareScreen() / stopScreenShare() / isScreenSharing sur LunionRoom (getDisplayMedia ; desktop et web ; Android et iOS exigent une config native, voir README).
  • Plan de contrôle entrant : callbacks onChatMessage, onReaction, onPeerState sur LunionRoom (le SDK exposait déjà sendChat/sendReaction mais ne remontait pas la réception).

0.2.0 #

  • Refonte transport : RTCPeerConnection standard (WebRTC) via flutter_webrtc (^0.12), débloque la compilation Android, iOS, Windows et desktop.
  • API publique préservée (LunionRoom, LunionVideoView, SfuSignaling, RemoteParticipant, RoomStatus), mise à jour transparente côté application.
  • Requiert un SFU à jour (négociation offer/answer SDP standard sur /ws) : un client 0.2.x n'est pas compatible avec un SFU antérieur. Déployez le SFU avant de mettre à jour les clients.

0.1.3 #

  • Sécurité : le jeton d'accès est désormais transmis via le sous-protocole WebSocket (Sec-WebSocket-Protocol: lunion.token.<JWT>) au lieu de la query string de l'URL, pour éviter toute fuite via les logs de proxy, l'historique ou l'en-tête Referer. Nécessite un SFU à jour (le repli ?token= reste accepté côté serveur).

0.1.2 #

  • Documentation : l'URL d'exemple utilise le domaine de déploiement actuel (https://meet.lunion-lab.com).

0.1.1 #

  • Documentation : les URLs d'exemple pointent désormais sur le déploiement réel (https://meet.lunion-lab.com).

0.1.0 #

  • Version initiale du SDK Flutter lunionmeet_flutter.
  • LunionRoom : connexion au SFU, publication caméra/micro, abonnement automatique aux participants (ChangeNotifier).
  • LunionVideoView : widget d'affichage d'un flux.
  • SfuSignaling : client de signalisation bas niveau (protocole identique à @lunionlab/meet-client-js).
  • Exemple d'application minimal.
0
likes
140
points
30
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

SDK Flutter de lunion.meet — appels audio et vidéo temps réel à intégrer dans votre application Flutter (iOS, Android, web ; desktop macOS/Linux). Se connecte au SFU str0m (WebRTC standard, sans mediasoup) via un jeton émis par votre serveur (@lunionlab/meet-server-sdk).

Homepage
Repository (GitHub)

License

MIT (license)

Dependencies

flutter, flutter_webrtc, web_socket_channel

More

Packages that depend on lunionmeet_flutter