Formats de fichiers, incrustation en HTML


Streaming URLs et metafiles

On parle de stream lorsqu'un flux audio/video est lu sur un interface d'acquisition et non plus sur un disque. Il n'y a plus de notion de début et de fin d'enregistrement, la référence de temps est le temp-réel. Le media diffusé est celui présent sur l'interface, moyennant un retard constant.

La différence fondamentale est qu'on ne peut bien entendu plus télécharger le media dans son intégralité avant de le jouer. Le player doit donc paralléliser la réception des données et leur restitution. Cette capacité est aussi mise en oeuvre pour jouer des media de longue durée (une bande annonce, un titre musical) préalablement enregistrés sur disque. On parle alors de lecture anticipée. On dira aussi qu'on "streame" un fichier.

Il existe deux manières de "streamer" un fichier. La première est d'utiliser un streaming server qui met en oeuvre un protocole spécifique au temps-réel (RTSP de l'IETF, MMS de Microsoft, PNM de RealMedia). La seconde est d'utiliser un simple serveur HTTP. Dans ce dernier cas, ne reste du concept de streaming que la lecture anticipée.

Cette substitution d'un flux temps-réel à un fichier (les Unixiens peuvent penser aux pipes) appelle un moyen de l'adresser de façon uniforme: un URL de flux. C'est le streaming server qui se charge de faire correspondre un URL soit à un flux temps-réel (direct) soit à un fichier pré-enregistré (différé):

 [protocole]://[hote]/[chemin de fichier ou d'encodeur]

par exemple:

  rtsp://host.media.com/encoder/stream_1
  pnm://host.media.com/medialib/fichier_a
  mms://host.media.com/medialib/fichier_b

Plutôt que d'incruster un lien de ce type dans un document HTML, on préfère utiliser une metafile qui n'est autre qu'une référence (pointeur) vers une mediafile. La forme la plus simple de metafile est un fichier texte contenant un URL de la forme ci-dessus.

Les fichiers d'extension .ram ou .rpm de RealMedia sont des metafiles qui pointent sur une mediafile d'extension .ra (audio) ou .rm (audio/video), ces dernières pouvant être streamées ou non. De même, un fichier Quicktime (.mov ou .qt) ou movie peut contenir l'adresse d'un autre media. Elle est alors appellée reference movie. La table suivante tente de résumer les types de media-file et meta-file avec leurs extension de fichier et type MIME pour chaque plate-forme.


 ExtensionType MIMEMedia
file
Meta
file
Commentaire
RealPlayer .ra audio/x-pn-realaudio   mediafile (audio)
.rm audio/x-pn-realaudio   mediafile (audio & video)
.ram audio/x-pn-realaudio   meta-file pour .ra ou .rm (helper)
.rpm audio/x-pn-realaudio-plugin   meta-file pour .ra ou .rm (plugin)
Quicktime .mov .qt video/quicktime format générique binaire
.rtsp .rts application/x-rtsp   meta-file ascii
.avi .vfw video/avi
video/x-msvideo
video/msvideo
  mediafile au format AVI
.mpeg, .mpg,
.mpa, .mpm,
.mpv, .m1s,
.m1v,.m1a,
.m64,.m75,
.m15,.mp2,
video/mpeg,
video/x-mpeg,
audio/mpeg,
audio/xmpeg
  mediafile au format MPEG
MediaPlayer .wma video/x-ms-asf   mediafile (audio)
.wmv video/x-ms-asf   mediafile (audio & video)
.asf video/x-ms-asf   mediafile (audio & video, 3rd party codecs)
.wax video/x-ms-asf   metafile pour .wma
.wvx video/x-ms-asf   metafile pour .wmv
.asx video/x-ms-asf   metafile pour .asf



Avantage des meta-files

L'intérêt d'utiliser une meta-file au lieu d'un lien direct sur le stream est de se ramener dans l'espace HTTP.

En effet, la meta-file est toujours accédée via HTTP alors que le stream l'est via un protocole temps-réel, souvent inconnu du navigateur, comme le montrent les exemples suivants:

Exemples 1: URL sur un stream

1.1 RealAudio

Ce lien pointe sur un stream RealAudio:
pnm://son.radio-france.fr/chaines/france-info/flash/flash16.ra

1.2 Quicktime

Ce lien pointe sur un stream Quicktime:
rtsp://a549.q.kamai.net/3/549/191/.../qarnorthanchor_300.mov

Exemples 2: URL sur une meta-file

2.1 RealAudio (.ram)

Ce lien pointe sur un fichier .ram qui contient le texte suivant:
pnm://son.radio-france.fr/chaines/france-info/flash/flash16.ra

2.2 RealAudio (.rpm)

Celui-ci pointe sur un fichier .rpm qui contient le texte suivant (voir Note 1):
pnm://son.radio-france.fr/chaines/france-info/flash/flash16.ra

2.3 Quicktime (.mov)

Ce lien pointe sur un fichier .mov qui contient le texte suivant:
rtsp://a549.q.kamai.net/3/549/191/.../qarnorthanchor_300.mov

Que se passe-t-il lorsqu'on clique sur l'URL d'un stream?

Votre navigateur cherche un binding de protocole dans le système pour traiter les protocoles PNM ou RTSP.

Il ne le trouve pas parce que ce binding n'a pas été créé.

Vous pouvez le créer en allant dans vos Préférences ou Propriétés Internet, section «Helpers», «Utilitaires» ou «Protocoles», créez une nouvelle association pour le protocole PNM ou RTSP et sélectionnez l'application RealPlayer ou QuicktimePlayer respectivement (exemple MacOS9). Cliquez à nouveau sur le lien: l'application externe démarre.

Un lien direct sur un stream dépend de la bonne configuration des bindings protocole/application sur lesquels on ne peut pas se reposer.

Que se passe-t-il lorsqu'on clique sur l'URL d'une meta-file?

Votre navigateur cherche d'abord un binding de type dans ses plugins.

RealAudio a installé le binding .rpm audio/x-pn-realaudio-plugin => RealAudio plugin.
QuickTime a installé le binding .mov video/quicktime => QuickTime plugin.
Dans les exemples 2.2 et 2.3, le stream est pris en charge par le plugin.

Votre navigateur cherche ensuite un binding de type dans le système.

RealAudio a installé le binding .ram audio/x-pn-realaudio => RealAudio player
Dans l'exemple 2.1, le stream est pris en charge par l'application externe.

Un lien indirect, via une metafile, sur un stream dépend de la bonne configuration des bindings type/application du système et du navigateur, en général fiables.

Note 1: Dans l'exemple 2.2, le résultat graphique est inapproprié car le plugin n'a pas reçu de paramètres. Pour cela, il faut utiliser EMBED ou OBJECT, ce que fait cette page.

Note 2: QuickTime ne définit pas de type MIME pour activer l'application externe, ceci passe par un argument le plugin. Pour cela, il faut utiliser EMBED ou OBJECT, ce que nous allons aborder.


Incrustation par <EMBED> ou <OBJECT>

La directive <EMBED> (dépréciée) ou <OBJECT> permet, à volonté, soit d'incruster le lecteur dans le document graphique, soit de diriger le stream vers le lecteur externe.

Ce choix est affaire de goût, cependant nous pensons que le lecteur externe est en général une solution plus sûre parce qu'il s'exécute dans sa propre partition mémoire et ne risque pas d'entraîner le navigateur dans une erreur de programme. Ceci n'étant pas un cours de HTML, nous nous contenterons de diriger vers les documentations des constructeurs:

Embedding QuickTime for Web Delivery:
  http://docs.info.apple.com/article.html?artnum=61011

RealAudio Web Page Embedding:
  http://service.real.com/help/library/guides/productionguidepreview/HTML/htmfiles/embed.htm

Ce qui nous intéresse ici sont le respect des standards et l'inter-opérabilité.

La directive <EMBED> est une extension Netscape et n'a jamais fait partie de la DTD HTML. <OBJECT> doit la remplacer. A la différence de <EMBED>, pour laquelle </EMBED> est superflu, <OBJECT> est un crochet et doit être fermée par </OBJECT>.

Voici un code inapproprié mais universellement rencontré:

<EMBED SRC="play_now.mov"
	WIDTH="70" HEIGHT="20"
	CONTROLLER="false"
	AUTOPLAY="false"
	CACHE="false">
	LOOP="false"
</EMBED>

Voici un code correct équivalent:

<OBJECT DATA="play_now.mov"
	WIDTH="70" HEIGHT="20">
		<PARAM name="CONTROLLER" value="false">
		<PARAM name="AUTOPLAY" value="false">
		<PARAM name="CACHE" value="false">
		<PARAM name="LOOP" value="false">
</OBJECT>

Ceci est-il compris par tout navigateur sur tout plate-forme? Non.

À notre connaissance, ceci est à la fois conforme aux recommandations du W3C et accepté par les navigateurs supportant l'architecture de plug-ins introduite par Netscape. C'est-à-dire quasiment tous, sauf Windows Internet Explorer 5.5 SP2 and 6.0 et au-delà (voir http://developer.apple.com/quicktime/compatibility.html).

En effet, Windows Internet Explorer ne supportera plus les plugins. Mais il existe un contrôle ActiveX QuickTime fourni par Apple. Pour charger ce contrôle ActiveX, il faut inclure le <OBJECT> du plugin (pour les autres navigateurs) à l'intérieur d'un <OBJECT> ActiveX (pour Windows Explorer 5.5 et au-delà).

<OBJECT CLASSID="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" 
	CODEBASE="http://www.apple.com/qtactivex/qtplugin.cab"
	WIDTH="70" HEIGHT="20">
		<PARAM name="SRC" value="play_now.mov">
		<PARAM name="CONTROLLER" value="false">
		<PARAM name="AUTOPLAY" value="false">
		<PARAM name="CACHE" value="false">
		<PARAM name="LOOP" value="false">
		<OBJECT DATA="play_now.mov"
			WIDTH="70" HEIGHT="20">
				<PARAM name="CONTROLLER" value="false">
				<PARAM name="AUTOPLAY" value="false">
				<PARAM name="CACHE" value="false">
				<PARAM name="LOOP" value="false">
		</OBJECT>
</OBJECT>

Remarque: Ce code provoque le chargement automatique du contrôle ActiveX mais ne dispense pas de l'installation par l'utilisateur de Quicktime for Windows.

En principe, le code ci-dessus est universel vis-à-vis du système et du navigateur.

Il nous reste à le finaliser pour choisir l'ouverture dans le player externe ou dans le plugin. Pour cela, nous ajoutons:

		<PARAM name="HREF" value="fishcam.mov">
		<PARAM name="TARGET" value="QuickTimePlayer">

ce qui, en nous référant à la documentation Quicktime, ouvre notre movie dans l'application externe QuickTimePlayer; ou bien:

		<PARAM name="HREF" value="fishcam_window.html">
		<PARAM name="TARGET" value="_blank">

ce qui instruit le plugin d'ouvrir un fichier HTML dans une nouvelle fenêtre du navigateur, fichier HTML qui à son tour incrustera notre movie (étape superflue, un simple lien sur ce fichier HTML aurait suffit, mais nous avons voulu rapprocher les deux appels au plugin dans le même document en profitant de l'universalité de l'argument HREF).

Le fonctionnement des deux variantes du code est démontré dans cette page.


[Index] [Ecrire à l'auteur]