-
-
Notifications
You must be signed in to change notification settings - Fork 14
Player API
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 :

À 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.
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';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
}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 quecur_urlvarie (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"etcur_urlest vide - Dans "Freebox Replay",
"package_id":24,"package":"fr.freebox.vodlauncher"etcur_urlest vide ;cur_urlva 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"etcur_urlest vide - Dans le "Guide des Programmes",
"package_id":29,"package":"fr.freebox.epg"etcur_urlest vide - Pendant la lecture d'un enregistrement,
"package_id":6,"package":"fr.freebox.mediaplayer"etcur_urlest vide - Dans "Mes Vidéos",
"package_id":31,"package":"fr.freebox.filebrowser"etcur_urlest vide ; mais lorsqu'on lit une vidéo du disque durcur_urlva 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"etcur_urlest vide
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
}
}
}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 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 une radio (par exemple "Radio FG") – NON FONCTIONNEL :
{ "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
}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
}
}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 }
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"}Voir https://github.com/Aymkdn/assistant-freebox-cloud/issues/113#issuecomment-669188691