MediaView
Lecture audio et vidéo, playlists et posters.
Description
Le composant MediaView regroupe des ressources audio et vidéo dans une liste de lecture homogène, destinée à la lecture sur mobile. Il prend en charge plusieurs éléments média, avec leurs sources, leurs affiches et leurs contrôles de lecture.
Notes de rendu
Une MediaView est un lecteur assorti d’une liste de lecture facultative — et NON un carrousel ou un pager. Les moteurs de rendu doivent :
- Afficher un seul lecteur pour l’élément sélectionné (affiche + contrôles de lecture natifs ; plein écran pour la vidéo, lecture intégrée avec contrôles pour l’audio).
- Lorsque
content.itemscomporte plus d’un élément, afficher une liste de lecture (une liste sélectionnable des éléments) afin que l’utilisateur puisse charger n’importe quel élément dans le lecteur. Avec un élément unique, n’afficher que le lecteur. - Ne pas présenter les éléments comme des pages plein écran défilantes (c’est le rôle de
CarouselView).
content.title désigne le titre de la liste de lecture ; chaque entrée de items[] constitue une ressource lisible indépendamment, décrite par ses sources, son poster et ses indicateurs de lecture.
Description des champs
idstringrequisIdentifiant unique de la vue média
typestringrequisToujours
"Media"contentMediaContentrequisObjet de contenu média
content.titlestringrequisTitre de la liste de lecture
content.introstringoptionnelTexte d’introduction affiché avant les éléments média
content.itemsMediaItem[]requisTableau d’éléments média (au moins un requis)
content.items[].idstringrequisIdentifiant unique de l’élément média
content.items[].kindstringrequisNature du média :
"audio" ou "video"content.items[].titlestringoptionnelTitre du média
content.items[].descriptionstringoptionnelDescriptif du média
content.items[].posterstringoptionnelURL de l’image d’affiche (pour la vidéo)
content.items[].autoplaybooleanoptionnelLecture automatique du média (défaut : false)
content.items[].loopbooleanoptionnelLecture en boucle du média (défaut : false)
content.items[].controlsbooleanoptionnelAfficher les contrôles de lecture (défaut : true)
content.items[].selectedbooleanoptionnelMarque l’entrée présentée en premier dans le lecteur. À positionner via
setSelectedItem(id) (qui désélectionne toutes les autres) — ne jamais le renseigner manuellement sur plusieurs éléments. Par défaut, il s’agit du premier élément. À combiner avec autoplay pour démarrer la lecture dès l’ouverture.content.items[].sourcesMediaSource[]requisTableau de sources média (au moins une requise)
content.items[].sources[].srcstringrequisURL de la source média
content.items[].sources[].typestringoptionnelType MIME (par ex. "video/mp4", "audio/mpeg")
content.items[].metaRecord<string, unknown>optionnelMétadonnées facultatives
processIdstringoptionnelIdentifiant de processus pour les parcours en plusieurs étapes
metadataobjectoptionnelMétadonnées de la vue (version, createdAt, author, tags)
Méthodes
setIntro(intro)→ thisDéfinit le texte d’introduction affiché avant les éléments média
intro- Texte d’introduction
addMediaItem(item)→ thisAjoute une entrée média prête à être lue (
selected est ignoré ici — utilisez setSelectedItem)item- Objet MediaItem
setSelectedItem(id) (py: set_selected_item)→ thisMarque cette entrée comme celle présentée en premier ; efface
selected sur toutes les autres, afin qu’une seule reste sélectionnéeid- identifiant de l’élément média
createMedia(id, kind, src, options?)→ MediaItemCrée un objet élément média (sans l’ajouter)
id- Identifiant du médiakind- Nature du média ('audio' ou 'video')src- URL de la source médiaoptions- Options du média (type, title, description, poster, autoplay, loop, controls)
clearItems()→ thisSupprime tous les éléments média
getContent()→ MediaContentRenvoie l’objet de contenu média complet
serve()→ Record<string, unknown>Diffuse la vue après validation (hérité de BaseView)
toJSON()→ Record<string, unknown>Renvoie la représentation JSON (hérité de BaseView)
setState(key, value)→ voidDéfinit l’état de la vue (hérité de BaseView)
key- Clé d’étatvalue- Valeur d’état
getState(key)→ unknownLit l’état de la vue (hérité de BaseView)
key- Clé d’état
setNext(url)→ thisDéfinit la navigation vers la vue suivante (hérité de BaseView)
url- URL de la vue suivante
setPrev(url)→ thisDéfinit la navigation vers la vue précédente (hérité de BaseView)
url- URL de la vue précédente
setProcess(processId, context?)→ thisDéfinit le contexte de processus (hérité de BaseView)
processId- Identifiant de processuscontext- Contexte du processus
Exemples de code JavaScript
Vue média simple
1import { YeriaApp } from '@numerum-tech/yeriasdk';
2
3const yeriaApp = new YeriaApp({ appId: 'my-app' });
4
5const mediaView = yeriaApp
6 .createMediaView('media-library', 'Tutorials')
7 .setIntro('Learn in a few minutes')
8 .addMediaItem(
9 mediaView.createMedia('video-intro', 'video', 'https://example.com/videos/intro.mp4', {
10 type: 'video/mp4',
11 title: 'Introduction Video',
12 poster: 'https://example.com/posters/intro.jpg'
13 })
14 );
15
16const response = yeriaApp.serve(mediaView);Vue média avec de l’audio
1const mediaView = yeriaApp
2 .createMediaView('audio-library', 'Audio Guides')
3 .setIntro('Listen to our audio guides')
4 .addMediaItem({
5 id: 'audio-guide',
6 kind: 'audio',
7 title: 'Getting Started Guide',
8 description: 'Learn the basics in 5 minutes',
9 sources: [
10 { src: 'https://example.com/audio/guide.mp3', type: 'audio/mpeg' }
11 ],
12 controls: true
13 });Vue média à plusieurs sources
1const mediaView = yeriaApp
2 .createMediaView('video-library', 'Video Tutorials')
3 .setIntro('Watch our video tutorials')
4 .addMediaItem({
5 id: 'tutorial-1',
6 kind: 'video',
7 title: 'Tutorial 1',
8 description: 'First tutorial video',
9 poster: 'https://example.com/posters/tutorial1.jpg',
10 sources: [
11 { src: 'https://example.com/videos/tutorial1.mp4', type: 'video/mp4' },
12 { src: 'https://example.com/videos/tutorial1.webm', type: 'video/webm' }
13 ],
14 controls: true,
15 autoplay: false,
16 loop: false
17 });Vue média en lecture automatique
1const mediaView = yeriaApp
2 .createMediaView('promo-videos', 'Promotional Videos')
3 .setIntro('Watch our promotional content')
4 .addMediaItem(
5 mediaView.createMedia('promo-1', 'video', 'https://example.com/videos/promo.mp4', {
6 type: 'video/mp4',
7 title: 'Promotional Video',
8 poster: 'https://example.com/posters/promo.jpg',
9 autoplay: true,
10 loop: true,
11 controls: true
12 })
13 );Vue média à plusieurs éléments
1const mediaView = yeriaApp
2 .createMediaView('playlist', 'Media Playlist')
3 .setIntro('Browse our media collection')
4 .addMediaItem(
5 mediaView.createMedia('video-1', 'video', 'https://example.com/videos/video1.mp4', {
6 type: 'video/mp4',
7 title: 'Video 1',
8 poster: 'https://example.com/posters/video1.jpg'
9 })
10 )
11 .addMediaItem(
12 mediaView.createMedia('audio-1', 'audio', 'https://example.com/audio/audio1.mp3', {
13 type: 'audio/mpeg',
14 title: 'Audio 1'
15 })
16 )
17 .addMediaItem({
18 id: 'video-2',
19 kind: 'video',
20 title: 'Video 2',
21 description: 'Second video',
22 poster: 'https://example.com/posters/video2.jpg',
23 sources: [
24 { src: 'https://example.com/videos/video2.mp4', type: 'video/mp4' }
25 ]
26 });Vue média — vidage des éléments
1const mediaView = yeriaApp
2 .createMediaView('dynamic-media', 'Dynamic Media')
3 .setIntro('Dynamic media playlist')
4 .addMediaItem(
5 mediaView.createMedia('item-1', 'video', 'https://example.com/video1.mp4', {
6 type: 'video/mp4'
7 })
8 );
9
10// Clear all items
11mediaView.clearItems();
12
13// Add new items
14mediaView.addMediaItem(
15 mediaView.createMedia('new-item-1', 'video', 'https://example.com/new-video.mp4', {
16 type: 'video/mp4',
17 title: 'New Video'
18 })
19);Vue média dans un parcours à étapes
1const mediaView = yeriaApp
2 .createMediaView('onboarding-media', 'Onboarding Tutorials')
3 .setProcess('onboarding', {
4 processName: 'User Onboarding',
5 currentStep: 2,
6 totalSteps: 3
7 })
8 .setIntro('Watch these tutorials to get started')
9 .addMediaItem(
10 mediaView.createMedia('intro-video', 'video', 'https://example.com/intro.mp4', {
11 type: 'video/mp4',
12 title: 'Introduction',
13 poster: 'https://example.com/intro-poster.jpg',
14 controls: true
15 })
16 )
17 .addMediaItem({
18 id: 'guide-audio',
19 kind: 'audio',
20 title: 'Quick Guide',
21 description: '5-minute audio guide',
22 sources: [
23 { src: 'https://example.com/guide.mp3', type: 'audio/mpeg' }
24 ]
25 });Exemple JSON complet
1{
2 "id": "tutorial-playlist",
3 "type": "Media",
4 "content": {
5 "title": "Tutorials",
6 "intro": "Learn in a few minutes",
7 "items": [
8 {
9 "id": "intro-video",
10 "kind": "video",
11 "title": "Introduction Video",
12 "description": "Get started with our platform",
13 "poster": "https://example.com/posters/intro.jpg",
14 "autoplay": false,
15 "loop": false,
16 "controls": true,
17 "sources": [
18 {
19 "src": "https://example.com/videos/intro.mp4",
20 "type": "video/mp4"
21 },
22 {
23 "src": "https://example.com/videos/intro.webm",
24 "type": "video/webm"
25 }
26 ],
27 "meta": {
28 "duration": 300,
29 "views": 1250
30 }
31 },
32 {
33 "id": "guide-audio",
34 "kind": "audio",
35 "title": "Quick Guide",
36 "description": "5-minute audio guide",
37 "autoplay": false,
38 "loop": false,
39 "controls": true,
40 "sources": [
41 {
42 "src": "https://example.com/audio/guide.mp3",
43 "type": "audio/mpeg"
44 }
45 ],
46 "meta": {
47 "duration": 300
48 }
49 },
50 {
51 "id": "advanced-tutorial",
52 "kind": "video",
53 "title": "Advanced Tutorial",
54 "description": "Learn advanced features",
55 "poster": "https://example.com/posters/advanced.jpg",
56 "autoplay": false,
57 "loop": false,
58 "controls": true,
59 "sources": [
60 {
61 "src": "https://example.com/videos/advanced.mp4",
62 "type": "video/mp4"
63 }
64 ]
65 }
66 ]
67 },
68 "process": {
69 "processId": "onboarding",
70 "processName": "User Onboarding",
71 "currentStep": 2,
72 "totalSteps": 3
73 },
74 "metadata": {
75 "version": "1.0.0",
76 "createdAt": "2025-01-28T10:00:00.000Z"
77 }
78}