• Aucun résultat trouvé

Représentation améliorée des mises à jour au format SVG pour le téléchargement

<g id="trame_k"> <defs>

<!--définition des objets utilisés dans cette trame et les suivantes--> <g id="FormeK">…</g>

</defs>

<set begin="k" xlink:href="#CoucheL" attributeName="transform" to="…"/> <set begin="k" xlink:href="#CoucheL" attributeName="xlink:href"

to="#FormeK"/> </g>

Code 6.8 – Représentation améliorée des mises à jour au format SVG pour le téléchargement progressif

Cette représentation modifiée améliore le comportement dans un scénario de téléchargement progressif car le lecteur peut commencer à rendre la scène avant d’avoir tous les objets en mémoire. De plus, dans le cas du chargement progressif, la consommation mémoire n'est pas maximale au début de la lecture.

Descriptions de scènes multimédia : représentations et optimisations

- 134 -

Bien que cette représentation couplée avec une distribution par téléchargement progressif soit plus satisfaisante, elle n'est toujours pas suffisante : le serveur ne peut pas contrôler le débit de ce qu'il envoie car il ne connaît pas l'association entre les données envoyées et l'instant auquel elles doivent être présentées à l'utilisateur. C'est typiquement ce que les solutions de streaming permettent de faire. Nous nous sommes donc intéressés à trouver une méthode pour diffuser en mode streaming des documents SVG. Nous présentons cette méthode dans la suite de ce chapitre.

6.5.2 Fragmentation temporelle de contenu SVG

Un document SVG est composé de déclarations d'objets audio-visuels, de déclarations d'animation, de déclarations d'écouteurs et de gestionnaires d'évènements. Dans les documents animés, toutes ces déclarations sont liées à la notion de temps de scène. Les animations ne sont actives qu'à partir d'un certain instant, comme nous l'avons décrit dans le chapitre 1. De même, les objets audio-visuels ne sont visibles qu'à partir d'un certain instant. Enfin, les écouteurs, les gestionnaires d'évènement ne sont utiles également qu'à partir d'un instant précis. Il est possible comme le montre la Figure 6.6, d'associer un temps de composition à chaque élément SVG.

<svg>

<g id="aFrame" visibility="hidden"> <rect id="aRect"/>

</g>

<set xlink:href="#aRect" attributeName="fill" to="red" begin="1s"/> <set xlink:href="#aFrame" attributeName="visibility" to="visible" begin="1s"/>

<defs> <circle id="aCircle"/> </defs>

<use id="aUse" xlink:href=""/>

<set xlink:href="#aUse" attributeName="xlink:href" to="#aCircle" begin="2s"/>

<discard xlink:href="#aRect" begin="3s"/> </svg> AU #1, PTS = 0s AU #2, PTS = 1s AU #3, PTS = 2s AU #4, PTS = 3s <svg> <g id="aFrame" visibility="hidden"> <rect id="aRect"/> </g>

<set xlink:href="#aRect" attributeName="fill" to="red" begin="1s"/> <set xlink:href="#aFrame" attributeName="visibility" to="visible" begin="1s"/>

<defs> <circle id="aCircle"/> </defs>

<use id="aUse" xlink:href=""/>

<set xlink:href="#aUse" attributeName="xlink:href" to="#aCircle" begin="2s"/>

<discard xlink:href="#aRect" begin="3s"/> </svg

fragmentation

SVG Document SVG Stream

Figure 6.6 – Fragmentation temporelle d'un document SVG

Si on associe à chaque élément son instant de composition respectif, le document SVG se décompose en blocs d'éléments ayant le même instant de composition. Nous définissons qu'un document SVG est fragmentable temporellement :

• si le document est décomposé en plusieurs blocs distincts dont tous les éléments ont le même instant de composition;

• et si ces blocs sont, en suivant l'ordre du document, ordonnés de façon croissante selon leur instant de composition,

• ou s'il est possible de permuter ces blocs pour obtenir que les blocs soient présents de façon croissante dans le document, sans changer le résultat visuel de sa présentation.

Chapitre 6 – Méthodes pour la représentation efficace de scènes multimédia animées

Avec cette définition, un document fragmentable temporellement est un document à partir duquel on peut former un flux. En effet, chaque fragment temporel d'un document fragmentable temporellement correspond à une unité d'accès du flux.

6.5.3 Outil générique de fragmentation et de streaming XML

Afin de valider la possibilité de diffuser en streaming des contenus SVG fragmentables, nous avons ajouté dans l'outil MP4Box, un multiplexeur pour fichier MP4, la possibilité de fragmenter un fichier XML et d'importer les fragments comme unité d'accès. Pour cela, nous proposons un langage simple, en XML décrivant la fragmentation du fichier XML source. Le Code 6.9 donne un exemple de fichier XML dans ce langage.

<Stream timeScale="12.0" DTS_increment="1" baseMediaFile="flash2.svg"> <Sample isRAP="yes" xmlFrom="doc.start" xmlTo="frame_1.start"/>

<Sample isRAP="no" xmlFrom="frame_1.start" xmlTo="frame_1.end"/> <Sample isRAP="no" xmlFrom="frame_2.start" xmlTo="frame_2.end"/> <Sample isRAP="no" xmlFrom="frame_3.start" xmlTo="frame_3.end"/> <Sample isRAP="no" xmlFrom="frame_4.start" xmlTo="frame_4.end"/> <Sample isRAP="no" xmlFrom="frame_5.start" xmlTo="frame_5.end"/> <Sample isRAP="no" xmlFrom="frame_6.start" xmlTo="frame_6.end"/> <Sample isRAP="no" xmlFrom="frame_7.start" xmlTo="frame_7.end"/> <Sample isRAP="no" xmlFrom="frame_8.start" xmlTo="frame_8.end"/> <Sample isRAP="no" xmlFrom="frame_9.start" xmlTo="frame_9.end"/> <Sample isRAP="no" xmlFrom="frame_10.start" xmlTo="frame_10.end"/> <Sample isRAP="no" xmlFrom="frame_10.end" xmlTo="doc.end"/>

</Stream>