Télésite Freebox : Gérer les pages de status

Un article de Wiki FreePlayer.org.


ATTENTION !!! CETTE PARTIE NE CONCERNE QUE LES TELESITES DANS LEUR VERSION FREEPLAYER

Sommaire

Le principe des pages de status

Vous pouvez lancer un contenu suivant la procédure définie dans les pages suivantes :

Mais il peut être intéressant d'afficher une page HTML par dessus ce contenu.

Que ce soit pour afficher des informations sur le contenu ou pour interagir avec celui ci.

Pour cela, il suffit de définir un tag <element> sous tag de l'élément <configuration> La valeur de ce tag <element> pour l'attribut status.remotePage est l'url à utiliser pour gérer le status du contenu.

La page sera alors appelée dés le lancement du contenu et devra gérer les différentes phases du lancement.

Par exemple, dans cette utilisation, c'est au télésite de gérer la réception des images vidéos, le chargement correcte du contenu ...

Voici un exemple de xml utilisant une page de status :

<?xml version="1.0" encoding="ISO-8859-1"?>
<tvcContent>
<content>
  <contentInfo>
    <tvc:videoInfo xmlns:tvc="http://telesite.free.fr/xml/ns/common-content">
      <title>Une vidéo de test</title>
      <source>
          <url>http://www.ts-box.com/videos/test.flv</url>
      </source>
      <configuration>
         <element key="status.remotePage">http://www.ts-box.com/status.php</element>
         <element key="remote.content.id">Un Test</element>
      </configuration> 
    </tvc:videoInfo >
  </contentInfo>
</content>
</tvcContent>

Le mod freeplayer lance le contenu et charge la page http://www.ts-box.com/status.php, la page status peut alors afficher n'importe quelle page HTML Freebox...

L'attribut "remote.content.id" permet de définir une valeur qui sera passé dans le header de la requête d'ouverture de la page de status. C'est uniquement un tag passé au serveur pour qu'il puisse "identifier" le média dont on souhaite le status.

Gérer différents mode de status

Le principe

Pour découper l'affichage des status suivant plusieurs modes, on peut définir un ensemble de sous catégorie pour status.remotePage

La page sera alors appelé en utilisant la syntaxe particuliére : browser://status?mode=<nom du mode>

Par exemple, si dans le fichier xml de lancement du contenu, on définit :

Cela permet de découper facilement les différentes pages d'information pour le média.

Les modes prédéfinis

Afin de faciliter l'utilisation des pages de status. Il existe trois modes prédéfinis. Contrairement aux autres modes, il n'est pas nécessaire d'appeler directement la page correspondante. C'est le mod freeplayer qui chargera automatiquement les pages correspondantes avec le principe suivant :

  • mode hidden - une fois que le contenu est lancé et durant la lecture "normale" (vide pour un film, pochette pour une radio, ...)
  • mode simpleDisplay - bandeau affiché une fois le lancement effectué avec un résumé du contenu
  • mode simpleControl - lorsque l'on a appuyé sur 'INFO' et que le panneau de control apparait

Le mode simpleDisplay est affiché durant 4 secondes (sur homejukebox) puis on repasse en mode hidden Le mode simpleControl est affiché durant 15 secondes (sur homejukebox) puis on repasse en mode hidden

Voici un xml qui défini par exemple les pages à afficher dans les trois modes "standard" :

<?xml version="1.0" encoding="ISO-8859-1"?>
<tvcContent>
<content>
  <contentInfo>
    <tvc:videoInfo xmlns:tvc="http://telesite.free.fr/xml/ns/common-content">
      <title>Une vidéo de test</title>
      <source>
          <url>http://www.ts-box.com/videos/test.flv</url>
      </source>
      <configuration>
         <element key="status.remotePage.simpleDisplay">http://www.ts-box.com/simpleDisplay.html</element>
         <element key="status.remotePage.simpleControl">http://www.ts-box.com/simpleControl.html</element>
         <element key="status.remotePage.hidden">http://www.ts-box.com/hidden.html</element>
         <element key="status.remotePage.monmode">http://www.ts-box.com/monmode.html</element>
         <element key="remote.content.id">Un Test</element>
      </configuration> 
    </tvc:videoInfo >
  </contentInfo>
</content>
</tvcContent>

La page hidden.html pouvant être une page vide pour ne rien afficher sur l'écran durant la lecture du contenu...

Interaction Client / Serveur sur les pages de status

Lors de la définition d'une page de status à distance (via la configuration du contenu), il faut fournir des infos au serveur pour qu'il sache quoi afficher.

Pour identifier le contenu et savoir dans quel état il se trouve, le mod Freeplayer envoi les variables suivantes dans le header de la requête HTTP faîte au serveur :

  • X-Remote-Content-ID qui a été donné par le serveur dans le fichier xml de description de contenu (afin que le client indique "le contenu qu'il joue")
  • X-Content-State qui indique dans quel état est le contenu, il existe 3 états : LAUNCHING (en cours de

lancement), PLAYING (contenu lancé), ENDED (fin)

  • X-Content-State-Details qui pour chaque état donne des informations de détails (cf ci-dessous)

Pour chaque état dans lequel ce trouve un contenu, on a donc une information de détail qui est adaptée:

LAUNCHING

X-Content-State-Details contient les informations maxRetries / retryDelay / nbRetries / phase

  • maxRetries correspond au nombre maximum de fois ou le mod freeplayer va tenter d'accéder au média
  • retryDelay est le temps entre chaque essai
  • nbRetries est le nombre d'essais déjà effectués (cela permet par exemple de créer un bargraph de progression avant connexion)
  • phase est une variable qui indique l'état dans la phase de connexion :
    • 0 = NO PHASE
    • 1 = PRELAUNCH_PHASE (avant l'ouverture du média)
    • 2 = LAUNCHING_PHASE (tentative de connexion au média et de lancement)
    • 3 = CONFIRM_LAUNCH_PHASE (le média a été chargé par le mode, on attend confirmation de la réception des images par la freebox)

PLAYING

X-Content-State-Details contient les informations isPaused / isPlaying / ElapsedTime / TotalDuration

  • isPaused a la valeur true ou false suivant si le média est en pause ou non
  • isPlaying a la valeur true ou false suivant si le média est en cours de lecture ou non
  • ElapsedTime correspond à la position dans la lecture du média (en nombre de milliseconde depuis le début)
  • TotalDuration correspond à la durée du média (en nombre de milliseconde)

ENDED

X-Content-State-Details contient un code d'arrêt indiquant pourquoi on est dans ce mode :

    • 1 = REASON_SUCCESS (le média c'est arrêté normalement en fin de lecture)
    • 2 = REASON_FAILED_CANNOT_START (impossible de démarrer le média)
    • 3 = REASON_FAILED_CANNOT_RESTART (impossible de démarrer le média après plusieurs essais)

Exemple complet d'utilisation

Supposons par exemple un média sur le tour de france cycliste.

On souhaite gérer complétement les status sur le média, et en particulier un status profil qui permet d'afficher le profil de l'étape.

Voici un xml de lancement du contenu qui pourra convenir :

<?xml version="1.0" encoding="ISO-8859-1"?>
<tvcContent>
<content>
  <contentInfo>
    <tvc:videoInfo xmlns:tvc="http://telesite.free.fr/xml/ns/common-content">
      <title>Tour de France 2007</title>
      <source>
          <url>mms://www.letourdefrance.fr/flux</url>
      </source>
      <configuration>
         <element key="status.remotePage">http://www.ts-box.com/status.php</element>
         <element key="status.remotePage.profil">http://www.ts-box.com/showprofil.php</element>
         <element key="remote.content.id">Tour_de_France</element>
      </configuration> 
    </tvc:videoInfo >
  </contentInfo>
</content>
</tvcContent>

La page status.php est appelée dés le lancement est permet ainsi d'afficher une page qui présente à l'utilisateur des informations sur l'étape du jour...

Aprés 10 secondes, la page s'efface et un bandeau discret avec uniquement la durée depuis le début ainsi que le coureur en tête s'affiche et se raffraichit toutes les 1 secondes.

Finalement, le bouton rouge est associé à la page browser://status?mode=profil, donc quand l'utilisateur appuie sur le bouton rouge de la télécommande, le profil de l'étape s'affiche automatiquement en surimpression ...

Comme vous le voyez dans cette exemple simple, les pages de status sont modulables à volonté pour afficher des pages html par dessus des contenus...