Skip to content

Player API

Aymeric edited this page Mar 28, 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.

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
    }
  }
}

Zapper sur une chaine

Cette action allumera automatiquement le player s'il ne l'est pas déjà. L'uuid de la chaine 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" }

Ou un service de Replay (par exemple "MYTF1") :

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

Ou une radio (par exemple "Radio FG") :

{ "url": "radio://?currentPathString=%5B%7B%22defaults%22%3A%7B%22parentDatas%22%3A%7B%22directory_content_url%22%3A%22root.json%22%2C%22name%22%3A%22Radios%22%2C%22type%22%3A%22root%22%7D%2C%22currentName%22%3A%22Radios musicales%22%7D%2C%22title%22%3A%22Radios%22%2C%22url%22%3A%22file%3A%2F%2F%2Fusr%2Fshare%2Ffbxqmlapps%2Fradio%2Fviews%2Fradio_page.qml%22%7D%2C%7B%22defaults%22%3A%7B%22parentDatas%22%3A%7B%22directory_content%22%3Anull%2C%22directory_content_count%22%3A19%2C%22directory_content_global_count%22%3A124%2C%22directory_content_global_item_count%22%3A105%2C%22directory_content_item_count%22%3A0%2C%22directory_content_subdir_count%22%3A19%2C%22directory_content_url%22%3A%2219.json%22%2C%22name%22%3A%22Radios musicales%22%2C%22priv%22%3A%7B%22logos%22%3A%5B%7B%22images%22%3A%5B%7B%22height%22%3A%22160%22%2C%22url%22%3A%22logo_2494_1340821817_x160.png%22%2C%22width%22%3Anull%7D%2C%7B%22height%22%3A%22196%22%2C%22url%22%3A%22logo_2494_1340821817_x196.png%22%2C%22width%22%3Anull%7D%2C%7B%22height%22%3A%2280%22%2C%22url%22%3A%22logo_2494_1340821817_x80.png%22%2C%22width%22%3Anull%7D%5D%2C%22ratio%22%3A%5B196%2C196%5D%2C%22type%22%3A%22logo%22%7D%5D%2C%22icon%22%3A%22http%3A%2F%2F172.18.2.31%2Fradiostore%2Fimgs%2Flogo_2494_1340821817_x160.png%22%7D%2C%22type%22%3A%22directory%22%2C%22weight%22%3A76%7D%2C%22currentName%22%3A%22Dance%2FElectro%22%7D%2C%22title%22%3A%22Radios musicales%22%2C%22url%22%3A%22file%3A%2F%2F%2Fusr%2Fshare%2Ffbxqmlapps%2Fradio%2Fviews%2Fradio_page.qml%22%7D%2C%7B%22defaults%22%3A%7B%22parentDatas%22%3A%7B%22directory_content%22%3Anull%2C%22directory_content_count%22%3A9%2C%22directory_content_global_count%22%3A9%2C%22directory_content_global_item_count%22%3A9%2C%22directory_content_item_count%22%3A9%2C%22directory_content_subdir_count%22%3A0%2C%22directory_content_url%22%3A%222.json%22%2C%22name%22%3A%22Dance%2FElectro%22%2C%22priv%22%3A%7B%22logos%22%3Anull%7D%2C%22type%22%3A%22directory%22%2C%22weight%22%3A76%7D%2C%22currentName%22%3A%22Radio FG%22%7D%2C%22title%22%3A%22Dance%2FElectro%22%2C%22url%22%3A%22file%3A%2F%2F%2Fusr%2Fshare%2Ffbxqmlapps%2Fradio%2Fviews%2Fradio_page.qml%22%7D%5D"

Ou une vidéo de votre Disque Dur (par exemple le fichier "Big.Little.Lies.S02E03.720p.WEB.h264-TBS[eztv].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 (PAS ENCORE DISPONIBLE ?!)

L'API ci-dessous a été trouvée dans un code Python, mais ne semble pas encore être implémentée… Peut-être dans une future version ?

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 (PAS ENCORE DISPONIBLE ?!)

L'API partielle ci-dessous a été trouvée dans un code Python, mais ne semble pas encore être implémentée… Peut-être dans une future version ?

POST https://mafreebox.freebox.fr/api/v6/player/PLAYER_ID/api/PLAYER_API_VERSION/control/mediactrl { "paramètres exactes":"unknown" }

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"}

Changer les droits

À noter qu'il est possible de changer les droits d'une application en utilisant le mot de passe de Freebox OS – ainsi on pourrait donner les droits player à une application.

POST https://mafreebox.freebox.fr/api/v6/login/request_perms/
{
 "password": "fa0c29b41d6c7adf74090dde053c0d295859de66",
  "permissions": {
   "player": true
  }
}

Le password doit être formé de la façon suivante :

// javascript en utilisant https://gist.github.com/Seldaek/1730205 pour Crypto.sha1_hmac
var password = Crypto.sha1_hmac("BS>@45D7=.0&" + session_token + "%3]4vXy24", sha1(password_salt + user_password))

Concernant les paramètres :

  • Avec https://mafreebox.freebox.fr/api/v6/login/session/ qui va permettre de récupérer session_token et password_salt.
  • user_password étant le mot de passe de l'utilisateur pour se connecter à Freebox OS.
  • "BS>@45D7=.0&" et "%3]4vXy24" sont des chaines statiques.

Clone this wiki locally