Bonsoir,
Le contexte: je suis en train de développer un lecteur vidéo en javascript.
Dans un premier temps je gérais les frames sous forme d'images dans un tableau, j'ai vite déchanté quand FF/IE montaient à plus de 300mega de ram avec une centaines d'images.
J'ai trouvé une solution qui consiste à gérer un ensemble de frames ( appelé scène ) dans un fichier XML de ce type:
<video id="-1" width="640" heigth="304" frameRate="25.0" videoLength="6032600">
<frames offset="1" noFrames="10">
<frame id="1" value="data:image/jpeg;base64,/9j/4AAQSk...."/>
<frame id="2" value="data:image/jpeg;base64,/9j/4AAQSk..../>
....
</frames>
</video>
Une meilleur définition de ce principe
ici.
Cela marche très bien dans la mesure où les navigateurs sont prévus pour mettre en cache les réponses XML.
Quand on veut une frame on recherche la scène dans laquelle elle est, puis on recherche la valeur du noeud frame correspondant.
Enfin pour les curieux il suffit de faire:
image.src = scene.getElementsByTagName("frame")[ index ].getAttribute('value');
Magique cela marche l'image est affichée.
Alors voilà le souci:
quand on "joue" les frames contenues dans une même scène tout est fluide.
Le souci ( en particulier sous FF ) vient du passage de la dernière frame vers la première de la scène suivante. Le navigateur rame pendant une petite seconde ce qui est impensable pour un lecteur vidéo efficace.
Aussi, sous FF lors de la seconde lecture tout est beaucoup plus fluide.
Donc c'est la que je me dis, il faut améliorer tout ça pour que dès la première lecture le passage d'une scène à l'autre soit plus fluide sans bien sur faire augmenter la mémoire vive du navigateur.
Je suis tout ouie pour répondre à vos questions si ce n'est pas clair, et bien entendu j'aimerai avoir des suggestions.
D'avance merci à tous,
Pierrick