Skip to content

Player API

Aymeric edited this page Nov 19, 2020 · 32 revisions

Free n'ayant pas encore documenté l'API dédié au player, j'ai dû chercher un moment avant de trouver quelques informations.
Free a fini par documenter l'API Player dans la section "Aide" de Freebox OS : http://mafreebox.freebox.fr/#Fbx.os.app.help.app

Tout d'abord, il est à noter qu'il est nécessaire d'avoir les droits player sur Freebox OS pour l'application – ces droits ne pouvant se définir que manuellement :
Capture

À noter qu'il est bien sûr nécessaire de se loguer et d'envoyer l'en-tête X-Fbx-App-Auth dans tous les requêtes.

Lister les players

GET https://mafreebox.freebox.fr/api/v6/player

Réponse :

{
    "result": [
      {
          "api_available": true,
          "api_version": "7.0",
          "device_name": "Freebox Player",
          "id": 1,
          "reachable": true,
          "stb_type": "stb_v6",
          "uid": "9f20347c10fcd7751f3e6543d3aafb86"
      }
    ],
    "success": true
}

Les players vont être listés. On notera que stb_type est stb_v6 pour la Freebox Révolution, mais stb_v7 pour la Freebox Delta et la One.

Ici on aura donc :

PLAYER_ID = 1;
PLAYER_API_VERSION = 'v7';

État du Player

GET https://mafreebox.freebox.fr/api/v6/player/PLAYER_ID/api/PLAYER_API_VERSION/status/

Réponse quand le player est éteint :

{
    "result": {
        "power_state": "standby"
    },
    "success": true
}

Réponse quand le player est allumé sur une chaine :

{
    "result": {
        "foreground_app": {
            "context": {},
            "cur_url": "tv://?bouquetId=675&channel=7",
            "package": "fr.freebox.tv",
            "package_id": 28
        },
        "power_state": "running"
    },
    "success": true
}

Paramètres

Ces paramètres varient selon où on se trouve (tests faits avec une Révolution) :

  • Pour une chaine de TV : "package": "fr.freebox.tv", "package_id": 28, et "cur_url":tv://?bouquetId=675&channel=7
  • Dans les menus : "package_id":21, "package":"fr.freebox.home", tandis que cur_url varie (par exemple sur l'icône Netflix : home://?highlight=app%3Acom.netflix%3Fsource_type%3D2, ou icône "Mes Vidéos" home://?highlight=filebrowser%3A%2F%2F%3Funiverse%3Dvideo)
  • Dans "Mes Enregistrements", "package_id":26, "package":"fr.freebox.pvr" et cur_url est vide
  • Dans "Freebox Replay", "package_id":24, "package":"fr.freebox.vodlauncher" et cur_url est vide ; cur_url va prendre une valeur selon le programme dans lequel on se rend (par exemple dans "MyTF1" "cur_url":"vodservice://replay?currentSelectedService=42")
  • Dans "Netflix", "package_id":35, "package":"com.netflix" et cur_url est vide
  • Dans le "Guide des Programmes", "package_id":29, "package":"fr.freebox.epg" et cur_url est vide
  • Pendant la lecture d'un enregistrement, "package_id":6, "package":"fr.freebox.mediaplayer" et cur_url est vide
  • Dans "Mes Vidéos", "package_id":31, "package":"fr.freebox.filebrowser" et cur_url est vide ; mais lorsqu'on lit une vidéo du disque dur cur_url va indiquer tout un tas de paramètres sur la vidéo
  • Dans "Système" > "Information Freebox", on aura "package_id":2, "package":"fr.freebox.freeboxinfo" et cur_url est vide

Récupération des chaines avec leur uuid

GET https://mafreebox.freebox.fr/api/v6/tv/channels/

Retourne les centaines de chaines avec leur uuid :

{
  "success": true,
  "result": {
    "uuid-webtv-404": {
      "uuid": "uuid-webtv-404",
      "name": "TEVA",
      "available": true,
      "logo_url": "https://mafreebox.freebox.fr/api/v6/tv/img/channels/logos68x60/uuid-webtv-404.png",
      "has_service": true,
      "short_name": "TEVA",
      "has_abo": true
    },
    "uuid-webtv-1204": {
      "uuid": "uuid-webtv-1204",
      "name": "Syfy",
      "available": false,
      "logo_url": "https://mafreebox.freebox.fr/api/v6/tv/img/channels/logos68x60/uuid-webtv-1204.png",
      "has_service": false,
      "short_name": "Syfy",
      "has_abo": false
    }
  }
}

Lancer un média / une application

Cette action allumera automatiquement le player s'il ne l'est pas déjà.

Pour les chaines de TV, l'uuid est fourni par https://mafreebox.freebox.fr/api/v6/tv/channels/.

POST https://mafreebox.freebox.fr/api/v6/player/PLAYER_ID/api/PLAYER_API_VERSION/control/open
{ "url": "tv://?uuid=uuid-webtv-XXXX" }

Il est également possible d'envoyer un numéro de chaine :

{ "url": "tv://?channel=6" }

Pour allumer la TV avec la dernière chaine :

{ "url": "tv://" }

Ou aller dans le service Freebox Replay :

{ "url": "vodservice://replay"

Ou lancer un service de Replay en particulier, par exemple celui de "MYTF1" :

{ "url": "vodservice://replay?currentSelectedService=42" }

Ou ouvrir une page web dans le navigateur :

{ "url": "https://www.google.fr" }

Ou lancer l'application Netflix :

{ "url": "https://www.netflix.com" }

Ou lancer l'application Amazon Prime :

{ "url": "https://www.primevideo.com" }

Ou lancer l'application Youtube :

{ "url": "https://www.youtube.com" }

Ou aller dans "Mes Enregistrements" :

{ "url": "pvr://" }

Ou aller dans "Mes Vidéos" :

{ "url": "filebrowser://?currentPathString=%5B%7B%22defaults%22%3A%7B%22nid%22%3A%22fbx-fs%3A%2F%2Ffreebox-gw%253A8091%2FL0Rpc3F1ZSBkdXI%253D%2FL0Rpc3F1ZSBkdXIvVmlkw6lvcw%253D%253D%22%2C%22profileId%22%3A1%2C%22title%22%3A%22Vid%C3%A9os%22%2C%22savedNid%22%3A%22fbx-fs%3A%2F%2Ffreebox-gw%253A8091%2FL0Rpc3F1ZSBkdXI%253D%2FL0Rpc3F1ZSBkdXIvVmlkw6lvcw%253D%253D%22%7D%2C%22title%22%3A%22Vid%C3%A9os%22%2C%22url%22%3A%22file%3A%2F%2F%2Fusr%2Fshare%2Ffbxqmlapps%2Ffilebrowser%2Fviews%2Fdirectory_page.qml%22%7D%5D" }

À noter que pour "Mes Vidéos" (les autres listés plus bas), il s'agit en fait de l'objet ci-dessous qui est encodé :

[
  {
    "defaults": {
      "nid": "fbx-fs://freebox-gw%3A8091/L0Rpc3F1ZSBkdXI%3D/L0Rpc3F1ZSBkdXIvVmlkw6lvcw%3D%3D",
      "profileId": 1,
​​​      "savedNid": "fbx-fs://freebox-gw%3A8091/L0Rpc3F1ZSBkdXI%3D/L0Rpc3F1ZSBkdXIvVmlkw6lvcw%3D%3D",
​​​      "title": "vidéos"
    },
    "title": "vidéos",
​​    "url": "file:///usr/share/fbxqmlapps/filebrowser/views/directory_page.qml"
  }
]

Pour faciliter la création du path, on peut utiliser la fonction JS ci-dessous :

function fbxUrl (path, title) {
  let str = [
    {
      defaults: {
        nid: "fbx-fs://freebox-gw%3A8091/L0Rpc3F1ZSBkdXI%3D/",
        profileId: 1,
        savedNid: "fbx-fs://freebox-gw%3A8091/L0Rpc3F1ZSBkdXI%3D/",
        title: ""
      },
      title: "",
      url: "file:///usr/share/fbxqmlapps/filebrowser/views/directory_page.qml"
    }
  ];

  str[0].defaults.nid += encodeURIComponent(btoa(path));
  str[0].defaults.savedNid += encodeURIComponent(btoa(path));
  str[0].defaults.title = title;
  str[0].title = title;

  return encodeURIComponent(JSON.stringify(str));
}

fbxUrl("/Disque dur/Musiques", "Musiques");

Ou aller dans "Mes Musiques" :

{ "url": "filebrowser://?currentPathString=%5B%7B%22defaults%22%3A%7B%22nid%22%3A%22fbx-fs%3A%2F%2Ffreebox-gw%253A8091%2FL0Rpc3F1ZSBkdXI%253D%2FL0Rpc3F1ZSBkdXIvTXVzaXF1ZXM%253D%22%2C%22profileId%22%3A1%2C%22savedNid%22%3A%22fbx-fs%3A%2F%2Ffreebox-gw%253A8091%2FL0Rpc3F1ZSBkdXI%253D%2FL0Rpc3F1ZSBkdXIvTXVzaXF1ZXM%253D%22%2C%22title%22%3A%22Musiques%22%7D%2C%22title%22%3A%22Musiques%22%2C%22url%22%3A%22file%3A%2F%2F%2Fusr%2Fshare%2Ffbxqmlapps%2Ffilebrowser%2Fviews%2Fdirectory_page.qml%22%7D%5D" }

Ou aller dans "Mes Photos" :

{ "url": "%5B%7B%22defaults%22%3A%7B%22nid%22%3A%22fbx-fs%3A%2F%2Ffreebox-gw%253A8091%2FL0Rpc3F1ZSBkdXI%253D%2FL0Rpc3F1ZSBkdXIvUGhvdG9z%22%2C%22profileId%22%3A1%2C%22savedNid%22%3A%22fbx-fs%3A%2F%2Ffreebox-gw%253A8091%2FL0Rpc3F1ZSBkdXI%253D%2FL0Rpc3F1ZSBkdXIvUGhvdG9z%22%2C%22title%22%3A%22Photos%22%7D%2C%22title%22%3A%22Photos%22%2C%22url%22%3A%22file%3A%2F%2F%2Fusr%2Fshare%2Ffbxqmlapps%2Ffilebrowser%2Fviews%2Fdirectory_page.qml%22%7D%5D" }

Ou lancer les Radios :

{ "url": "radio://" }

Pour le moment je n'ai pas trouvé comment lancer une radio précise… À défaut il est possible de lancer un lien vers le stream d'une radio, par exemple avec NRJ :

{ "url" => "http://cdn.nrjaudio.fm/audio1/fr/30001/mp3_128.mp3", "type" => "audio/mp3" }

Ou une vidéo de votre Disque Dur (par exemple un fichier .mkv qui se trouve dans "TV" > "BIG LITTLE LIES") – référence :

{ "url" : "filebrowser://?currentPathString=%5B%7B%22defaults%22%3A%7B%22nid%22%3A%22fbx-fs%3A%2F%2Ffreebox-gw%253A8091%2FL0Rpc3F1ZSBkdXI%253D%2FL0Rpc3F1ZSBkdXIvVmlkw6lvcw%253D%253D%22%2C%22profileId%22%3A1%2C%22title%22%3A%22Mes vidéos%22%2C%22savedNid%22%3A%22fbx-fs%3A%2F%2Ffreebox-gw%253A8091%2FL0Rpc3F1ZSBkdXI%253D%2FL0Rpc3F1ZSBkdXIvVmlkw6lvcy9UVg%253D%253D%22%7D%2C%22title%22%3A%22Mes vidéos%22%2C%22url%22%3A%22file%3A%2F%2F%2Fusr%2Fshare%2Ffbxqmlapps%2Ffilebrowser%2Fviews%2Fdirectory_page.qml%22%7D%2C%7B%22defaults%22%3A%7B%22nid%22%3A%22fbx-fs%3A%2F%2Ffreebox-gw%253A8091%2FL0Rpc3F1ZSBkdXI%253D%2FL0Rpc3F1ZSBkdXIvVmlkw6lvcy9UVg%253D%253D%22%2C%22profileId%22%3A1%2C%22title%22%3A%22TV%22%2C%22savedNid%22%3A%22fbx-fs%3A%2F%2Ffreebox-gw%253A8091%2FL0Rpc3F1ZSBkdXI%253D%2FL0Rpc3F1ZSBkdXIvVmlkw6lvcy9UVi9CSUcgTElUVExFIExJRVM%253D%22%7D%2C%22title%22%3A%22TV%22%2C%22url%22%3A%22file%3A%2F%2F%2Fusr%2Fshare%2Ffbxqmlapps%2Ffilebrowser%2Fviews%2Fdirectory_page.qml%22%7D%2C%7B%22defaults%22%3A%7B%22nid%22%3A%22fbx-fs%3A%2F%2Ffreebox-gw%253A8091%2FL0Rpc3F1ZSBkdXI%253D%2FL0Rpc3F1ZSBkdXIvVmlkw6lvcy9UVi9CSUcgTElUVExFIExJRVM%253D%22%2C%22profileId%22%3A1%2C%22title%22%3A%22BIG LITTLE LIES%22%2C%22savedNid%22%3A%22fbx-fs%3A%2F%2Ffreebox-gw%253A8091%2FL0Rpc3F1ZSBkdXI%253D%2FL0Rpc3F1ZSBkdXIvVmlkw6lvcy9UVi9CSUcgTElUVExFIExJRVMvQmlnLkxpdHRsZS5MaWVzLlMwMkUwMy43MjBwLldFQi5oMjY0LVRCU1tlenR2XS5ta3Y%253D%22%7D%2C%22title%22%3A%22BIG LITTLE LIES%22%2C%22url%22%3A%22file%3A%2F%2F%2Fusr%2Fshare%2Ffbxqmlapps%2Ffilebrowser%2Fviews%2Fdirectory_page.qml%22%7D%5D"

Réponse :

{
    "success": true
}

Récupération du volume

GET https://mafreebox.freebox.fr/api/v6/player/PLAYER_ID/api/PLAYER_API_VERSION/control/volume

Réponse :

{
  "success":true,
  "result":{
    "target":"avr",
    "valid":true,
    "mute":false,
    "volume":64
   }
}

Définir le volume

L'API ci-dessous a été trouvée dans ce code Python, mais n'est pas encore disponible pour la Freebox Révolution ; cependant elle pourrait être disponible pour la Freebox Delta (à vérifier)

PUT https://mafreebox.freebox.fr/api/v6/player/PLAYER_ID/api/PLAYER_API_VERSION/control/volume
{ "volume":50 }

Ou :

PUT https://mafreebox.freebox.fr/api/v6/player/PLAYER_ID/api/PLAYER_API_VERSION/control/volume
{ "mute":true }

Contrôle de la lecture

L'API partielle ci-dessous a été trouvée dans ce code Python, mais n'est pas encore disponible pour la Freebox Révolution ; cependant elle pourrait être disponible pour la Freebox Delta (à vérifier)

POST https://mafreebox.freebox.fr/api/v7/player/PLAYER_ID/api/PLAYER_API_VERSION/control/mediactrl
{ "cmd":"play_pause" }

Les commandes disponibles devraient être :

{
  "play",
  "pause",
  "play_pause",
  "stop",
  "next",
  "prev",
  "seek_forward",
  "seek_backward",
  "seek_to",
  "repeat_all",
  "repeat_one",
  "repeat_off",
  "repeat_toggle",
  "shuffle_on",
  "shuffle_off",
  "shuffle_toggle",
  "record",
  "record_stop",
  "select_audio_track",
  "select_srt_track",
  "select_stream",
}

Avec d'autres paramètres… :

{"seek_position": 0, "type": "seek_position"}
media_control_stream = {"quality": "", "source": ""}
media_control_stream_args = {"stream": media_control_stream, "type": "stream"}
{"track_id": 0, "type": "track_id"}
{"args": media_control_stream_args, "cmd": "pause"}

Associer une chaine avec un numéro de chaine

Voir https://github.com/Aymkdn/assistant-freebox-cloud/issues/113#issuecomment-669188691

Clone this wiki locally