Skip to content

Player API

Aymeric edited this page Nov 6, 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
    }
  }
}

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 un service de Replay (par exemple "MYTF1") :

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

Ou 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 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%22Mes%20vid%C3%A9os%22%2C%22savedNid%22%3A%22fbx-fs%3A%2F%2Ffreebox-gw%253A8091%2FL0Rpc3F1ZSBkdXI%253D%2FL0Rpc3F1ZSBkdXIvVmlkw6lvcy9UVg%253D%253D%22%7D%2C%22title%22%3A%22Mes%20vid%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", il s'agit en fait de l'objet ci-dessous qui est encodé :

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

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