lunionmeet_flutter 1.3.0
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
RTCPeerConnectionet ré-étiquetéescreenauwelcomesuivant — 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é (onEndeda 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 seulreplaceTrack(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()écoutetrack.onEnded, donc stopper le partage depuis le bandeau système appelle automatiquementstopScreenShare()et met à jourisScreenSharing(l'UI ne reste plus bloquée sur « partage en cours »). - Correctifs de cycle de vie :
leave()(et doncdispose()) 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,
LunionRoomré-ouvre le WebSocket, reconstruit laRTCPeerConnectionet re-publie le flux local, en réutilisant leclientId(cid) pour être ré-admis par le SFU. Configurable via le paramètrereconnect(LunionReconnectConfig) ; backoff exponentiel plafonné, activée par défaut. - Nouvel état
RoomStatus.reconnecting(les participants distants sont purgés puis reconstruits) ; callbacksonReconnecting(attempt)/onReconnected. Les états terminaux (refusé, éjecté) arrêtent la reconnexion. - Réception de la modération :
LunionRoomapplique désormais localement la coupure/reprise demandée par l'hôte (muteMic/muteCam/unmuteMic/unmuteCam) — piste locale coupée à la source etmicEnabled/cameraEnabledmis à jour, en cohérence avec l'enforcement serveur (drop RTP). Configurable viaautoApplyModeration(défauttrue) ; callbackonModerated(op). - Plan de contrôle entrant complet (parité web) : locuteur actif (
activeSpeaker+onActiveSpeaker), statut et contrôle d'enregistrement (onRecordingStatus,startRecording/stopRecording), notifications terminalesonRoomFull/onServerBusy, métadonnée de source de pisteonTrackMetaet action publiquesetTrackSource, surLunionRoom. - Mode récepteur pur : paramètre
receiveOnlysurLunionRoom(rejoint sans publier, sansgetUserMedia— écran de projection / spectateur). - Bascule caméra :
switchCamera()surLunionRoom(avant/arrière, absent jusque-là). - Qualité vidéo par couche (
rid) :setVideoLayerPolicysurLunionRoom(viaLunionVideoLayer) — 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
e2eesurLunionRoom(clé partagée 256 bits viaLunionE2ee) — chaque frame émise/reçue est (dé)chiffrée en AES-GCM par leFrameCryptornatif deflutter_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/wsajouté (passez le champurldu 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
Str0mSignalingdevientLunionSignaling(fichiersignaling.dart).LunionRoom,LunionVideoView,RemoteParticipant,RoomStatussont 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
producerActivesurLunionRoom). - Préférence de codec matériel : paramètre
preferredVideoCodec(ex."video/H264") surLunionRoom, accélération matérielle. No-op si indisponible. - Partage d'écran :
shareScreen()/stopScreenShare()/isScreenSharingsurLunionRoom(getDisplayMedia; desktop et web ; Android et iOS exigent une config native, voir README). - Plan de contrôle entrant : callbacks
onChatMessage,onReaction,onPeerStatesurLunionRoom(le SDK exposait déjàsendChat/sendReactionmais ne remontait pas la réception).
0.2.0 #
- Refonte transport :
RTCPeerConnectionstandard (WebRTC) viaflutter_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.