
© copyright Blender Foundation | durian.blender.org · CC BY 3.0
Xodera Plugins · Bubble Native
Xodera Video Player Native
Affichez des leçons, démonstrations produit et flux compatibles dans votre app, avec commandes, plein écran et pistes linguistiques disponibles.
Guides bêta publics · instructions Haptics dans sa fiche Bubble
Offre bêta publique : installation Bubble gratuite · essai de 7 jours avec carte, puis 1,50 USD/mois par plugin/projet.
Documentation révisée 6 novembre 2026
Exemples pratiques
Accès par chapitres dans une app de formation
L’apprenant doit pouvoir revoir une étape précise sans passer par un lecteur externe.
`source_url = Current Lesson’s video URL` ; `poster_url = Current Lesson’s cover` ; chaque chapitre stocke un temps de démarrage appartenant à l'application.
Clic sur un Chapitre → si la source change, attendre `source_loaded` → Seek avec `position_seconds` → Play. Set playback rate aide à examiner un geste ; Enter fullscreen s’utilise à la demande.
Lisez `position_seconds`, `duration_seconds` et `is_fullscreen`. Votre workflow enregistre la progression pour la source courante uniquement.
Sur `player_error`, affichez `error_code`, conservez la progression et proposez Reload video. Une fin de lecture ne vaut pas validation d’un cours ou d’une évaluation de sécurité.
Utilisez des fichiers directs ou flux compatibles. Ce lecteur n’exporte pas de vidéos.
Démonstration vidéo sur une fiche de marketplace
Une image ne suffit pas toujours à expliquer un produit ; un lien externe interrompt le parcours d’achat.
`source_url = Selected Listing’s demonstration URL` ; `poster_url = its thumbnail` ; `muted = yes` pour un premier aperçu intentionnellement muet.
Ouvrez l’Annonce, liez sa vidéo, puis lancez Play après une action de l’utilisateur. Proposez Set muted pour le son et Enter fullscreen pour mieux voir. Liez `is_active` au détail visible.
Utilisez `has_source`, `is_buffering` et `status` pour distinguer absence de vidéo, chargement et média prêt.
Au changement de source, abandonnez l’ancienne progression et les anciennes pistes. Affichez la miniature si le fichier choisi n’est pas pris en charge.
Utilisez des fichiers directs ou flux compatibles. Ce lecteur n’exporte pas de vidéos.
Choisir les pistes de langue d’un flux compatible
Une app multilingue doit proposer les pistes réellement présentes dans la source sélectionnée.
`source_url = Selected Programme’s accepted stream URL` ; la source elle‑même doit fournir des pistes audio/sous‑titres compatibles.
Sur `tracks_changed`, lisez `audio_tracks_json` et `subtitle_tracks_json` de la source courante. Votre app crée les choix et appelle Select audio track ou Select subtitle track avec l’index courant.
Utilisez `selected_audio_index`, `selected_subtitle_index` et `source_generation` pour rattacher le choix à cette source.
Reconstruisez les choix après chaque changement de source. En l’absence d’une piste compatible, gardez la piste par défaut et indiquez cette limite.
Utilisez des fichiers directs ou flux compatibles. Ce lecteur n’exporte pas de vidéos.
Ce qui fonctionne maintenant
Bêta publique. Utilisez les commandes et actions documentées ; testez les formats, les autorisations et le comportement dans votre propre app native. L’aperçu web ne valide pas les résultats sur appareil.
Construire le workflow
Utilisez les actions bêta disponibles ci-dessous et testez le résultat sur vos appareils cibles.
Les exemples utilisent des fiches comme Lesson, Message et Order. Remplacez-les par vos types de données et noms d’éléments. Utilisez vos propres fichiers à la place des adresses d’exemple.
Renseignez source_url = Selected Lesson's video_url et poster_url = Selected Lesson's poster_url. Utilisez auto ou progressive pour MP4, hls pour HLS.
Après playback_ready, utilisez Seek pour reprendre à la position position_seconds enregistrée. L'utilisateur démarre Play. Définissez is_active selon que la vue de la leçon est ouverte ou non.
Ajoutez Play, Pause, Seek, Set playback rate et Enter fullscreen. Affichez position_seconds et duration_seconds.
Après tracks_changed, affichez les choix audio_tracks_json et subtitle_tracks_json de cette vidéo. Passez l’index choisi à Select audio track ou Select subtitle track. À ended, enregistrez la progression.
Configurer une fois
Créez ou choisissez votre projet Bubble dans BestPlugins → Dashboard → Plugins. Choisissez Xodera Video Player Native, copiez sa clé, puis ouvrez Bubble → Plugins → Xodera Video Player Native et collez-la dans licensing_api_key. Enregistrez une fois, puis utilisez les actions ci-dessous. Chaque plugin de chaque projet possède sa propre clé.
Utilisez une adresse directe de vidéo ou de flux. Une page YouTube ou Vimeo n’est pas un fichier vidéo direct. Aucune permission caméra ou microphone pour la lecture.
Configurer une fois
- Créez ou choisissez votre projet Bubble dans BestPlugins → Dashboard → Plugins.
- Choisissez ce plugin et copiez sa clé de projet.
- Ouvrez Bubble → Plugins → ce plugin. Collez sa clé de projet dans licensing_api_key et enregistrez.
- Ajoutez l’élément, choisissez vos données et construisez le workflow ci-dessous.
- Dans le tableau de bord, vérifiez et confirmez l’essai de 7 jours avec carte pour ce plugin. Il coûte ensuite 1,50 USD/mois par projet, développement et production inclus. Annulez avant la fin de l’essai pour éviter le premier débit.
Installation et abonnement
Pour Audio Player, Video Player, Photo Editor, Audio Recorder, Files Kit et Haptics : installation Bubble gratuite, essai de 7 jours avec carte, puis 1,50 USD par mois, par plugin et projet. Développement et production inclus, sans plafond d’opérations. Les limites de fichier et de fonction restent applicables. Vérifiez facturation et annulation avant confirmation. Les autres plugins ne sont pas ouverts à l’achat.
Enregistrer le résultat dans votre app
Exemple WatchProgress : owner = Current User, lesson = Selected Lesson, seconds = Video Player's position_seconds, duration = Video Player's duration_seconds. Enregistrez seulement pour la vidéo choisie. Les index de pistes appartiennent à cette vidéo et ne sont pas des choix de langue permanents.
Échec, annulation et reprise
À player_error, affichez error_code et proposez Reload video, sans lecture automatique. Un changement de vidéo efface les anciens choix de pistes. Quitter la vue met en pause ; Play reprend la lecture.
Fonctions et limites
Vitesses : 0.5, 1, 1.5 et 2. Volume : 0–1. Formats : auto, progressive, HLS et uniquement Android‑DASH. Les pistes disponibles dépendent du fichier. Utilisez -1 pour désactiver une piste ; -2 signifie inconnu et ne peut pas être sélectionné. Aucun montage, exportation vidéo, DRM, image‑dans‑image ou cache hors ligne permanent.
Réglages, actions et résultats
Utilisez ces noms dans Bubble. Les fonctionnalités prévues sont marquées séparément.
Paramètres bêta disponibles
Réglages de l’élément
source_url · textposter_url · textcontent_type · textrate · numbervolume · numbermuted · yes/noloop · yes/nois_active · yes/nodisabled · yes/nonative_controls · yes/noui_text_json · textlanguage · textÉtats
is_playing · yes/nois_buffering · yes/nopending_play · yes/nois_live · yes/nomuted · yes/noloop · yes/nohas_source · yes/nois_fullscreen · yes/noposition_seconds · numberduration_seconds · numbervolume · numberrate · numbersource_generation · numberselected_audio_index · numberselected_subtitle_index · numberstatus · textaudio_tracks_json · textsubtitle_tracks_json · texterror_code · texterror_message · textÉvénements
source_changedsource_loadedplayback_readyplaying_changedtime_changedendedtracks_changedfullscreen_changedplayer_errorActions et paramètres
PlayPauseStop and rewindReload videoSeekSet volumeSet mutedSet playback rateEnter fullscreenSelect audio trackSelect subtitle trackRéglages de l’élément · 12
source_urltext · Défaut: ""- Valeur exemple
https://bestplugins.online/native-samples/lesson.mp4 - Expression Bubble exemple
Selected Lesson's video_url - Adresse du fichier audio, vidéo ou image choisi. Utilisez un type compatible avec ce plugin.
poster_urltext · Défaut: ""- Valeur exemple
https://bestplugins.online/native-samples/poster.jpg - Expression Bubble exemple
Selected Lesson's poster_url - Utilisez la valeur de la fiche courante et les limites ci-dessous.
content_typetext · Défaut: "auto"- Valeur exemple
auto - Expression Bubble exemple
Selected Lesson's video_content_type - Utilisez la valeur de la fiche courante et les limites ci-dessous.
ratenumber · Défaut: 1- Valeur exemple
1.5 - Expression Bubble exemple
Speed Dropdown's value - Utilisez la valeur de la fiche courante et les limites ci-dessous.
volumenumber · Défaut: 1- Valeur exemple
0.8 - Expression Bubble exemple
Volume Slider's value - Utilisez la valeur de la fiche courante et les limites ci-dessous.
mutedyes/no · Défaut: false- Valeur exemple
no - Expression Bubble exemple
Mute Checkbox is checked - Utilisez la valeur de la fiche courante et les limites ci-dessous.
loopyes/no · Défaut: false- Valeur exemple
no - Expression Bubble exemple
Selected Lesson's repeat_enabled - Utilisez la valeur de la fiche courante et les limites ci-dessous.
is_activeyes/no · Défaut: true- Valeur exemple
yes - Expression Bubble exemple
GuideHost's view_is_active (your yes/no custom state) - yes tant que cette vue est ouverte ; no en la quittant pour arrêter la lecture ou l’action en cours.
disabledyes/no · Défaut: false- Valeur exemple
no - Expression Bubble exemple
GuideHost's is_busy (your yes/no custom state) - Désactivez l’élément si l’app est occupée ou l’action indisponible.
native_controlsyes/no · Défaut: false- Valeur exemple
no - Expression Bubble exemple
App Settings' use_native_video_controls - Afficher ou masquer les commandes vidéo standard de l’appareil.
ui_text_jsontext · Défaut: "{}"- Valeur exemple
{} - Expression Bubble exemple
App Settings' player_labels_json (supported keys only) - JSON facultatif avec les libellés de boutons pris en charge. Laissez vide pour les textes intégrés.
languagetext · Défaut: "auto"- Valeur exemple
uk - Expression Bubble exemple
Current User's preferred_language - Utilisez language=auto pour suivre une langue prise en charge sur l’appareil ou dans le navigateur. Saisissez un code de langue pris en charge pour la choisir explicitement.
Actions et paramètres · 11
Play
Aucun paramètre d’action
Pause
Aucun paramètre d’action
Stop and rewind
Aucun paramètre d’action
Reload video
Aucun paramètre d’action
Seek
position_secondsnumber · Défaut: —- Valeur exemple
45 - Expression Bubble exemple
Selected Chapter's start_seconds - Utilisez la valeur de la fiche courante et les limites ci-dessous.
Set volume
volumenumber · Défaut: —- Valeur exemple
0.8 - Expression Bubble exemple
Volume Slider's value - Utilisez la valeur de la fiche courante et les limites ci-dessous.
Set muted
mutedyes/no · Défaut: —- Valeur exemple
no - Expression Bubble exemple
Mute Checkbox is checked - Utilisez la valeur de la fiche courante et les limites ci-dessous.
Set playback rate
ratenumber · Défaut: —- Valeur exemple
1.5 - Expression Bubble exemple
Speed Dropdown's value - Utilisez la valeur de la fiche courante et les limites ci-dessous.
Enter fullscreen
Aucun paramètre d’action
Select audio track
indexnumber · Défaut: —- Valeur exemple
0 - Expression Bubble exemple
Selected row's current_source_index - Utilisez la valeur de la fiche courante et les limites ci-dessous.
Select subtitle track
indexnumber · Défaut: —- Valeur exemple
0 - Expression Bubble exemple
Selected row's current_source_index - Utilisez la valeur de la fiche courante et les limites ci-dessous.
États et événements
États
is_playing · yes/noValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
is_buffering · yes/noValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
pending_play · yes/noValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
is_live · yes/noValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
muted · yes/noValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
loop · yes/noValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
has_source · yes/noValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
is_fullscreen · yes/noValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
position_seconds · numberValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
duration_seconds · numberValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
volume · numberValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
rate · numberValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
source_generation · numberValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
selected_audio_index · numberValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
selected_subtitle_index · numberValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
status · textRésultat actuel de l’action. Attendez l’événement de fin correspondant avant de valider la réussite. idle,loading,readyToPlay,error
audio_tracks_json · textValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
subtitle_tracks_json · textValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
error_code · textInformation sur l’erreur de la dernière action. Affichez un message utile et proposez la bonne nouvelle tentative.
error_message · textInformation sur l’erreur de la dernière action. Affichez un message utile et proposez la bonne nouvelle tentative.
Événements
source_changedÀ cet événement, lisez les états correspondants du même élément.
source_loadedÀ cet événement, lisez les états correspondants du même élément.
playback_readyÀ cet événement, lisez les états correspondants du même élément.
playing_changedÀ cet événement, lisez les états correspondants du même élément.
time_changedÀ cet événement, lisez les états correspondants du même élément.
endedÀ cet événement, lisez les états correspondants du même élément.
tracks_changedÀ cet événement, lisez les états correspondants du même élément.
fullscreen_changedÀ cet événement, lisez les états correspondants du même élément.
player_errorÀ cet événement, lisez les états correspondants du même élément.
Questions des développeurs
Puis-je exporter un extrait ?
Non. Seek et plein écran ne réécrivent pas les octets.
Comment fonctionne l’abonnement ?
Pour Audio Player, Video Player, Photo Editor, Audio Recorder, Files Kit et Haptics : installation Bubble gratuite, essai de 7 jours avec carte, puis 1,50 USD par mois, par plugin et projet. Développement et production inclus, sans plafond d’opérations. Les limites de fichier et de fonction restent applicables. Vérifiez facturation et annulation avant confirmation. Les autres plugins ne sont pas ouverts à l’achat.
Guides associés
Pour obtenir de l’aide, indiquez le plugin, l’appareil, l’action essayée et le résultat. Utilisez un exemple sans données personnelles. Ne partagez jamais votre clé ni vos fichiers privés.
