Bonjour, lecteur
Habra Giktayms! Aujourd'hui, je vais vous apprendre à tirer profit de fonctionnalités inutiles. Nous recevrons par l'exemple d'une maison intelligente de la célèbre société Xiaomi et son produit sous la forme d'une passerelle ZigBee.
Les propriétaires de composants de maison intelligente Xiaomi savent que la plupart d'entre eux sont divisés en ceux qui peuvent communiquer via zigbee ou bluetooth. Nous serons intéressés par la passerelle pour les appareils zigbee version 2, car c'est là que la fonctionnalité radio est apparue, qui par défaut ne peut lire que les stations de radio Internet chinoises.

Bien sûr, il existe un projet sur Internet à l'aide duquel vous ne pouvez pas compliquer l'ajout de diverses autres stations de radio, mais nous irons dans l'autre sens et ferons un haut-parleur sans fil à partir de la passerelle.
De quoi avez-vous besoin?
Pour réussir l'opération, vous avez besoin de:
- En fait, la version de la passerelle ZigBee est au moins 2 (une radio y est apparue)
- N'importe quel serveur Web
- Un smartphone sur lequel se trouve un root et un logiciel installé MiHome avec le pays sélectionné Chine continentale
Que ferons-nous?
Afin de faire un haut-parleur sans fil de notre passerelle, vous devez faire semblant d'être un flux de radio Internet et former la passerelle dont vous avez besoin pour frapper la liste des stations pour nous, et non pour l'API chinoise.
Afin de comprendre comment l'application sur le téléphone communique avec les serveurs chinois, vous pouvez flairer le trafic, mais je vais vous sauver de ces hémorroïdes :) Si vous souhaitez élargir vos horizons, vous pouvez le faire en option.
Ainsi, nous serons intéressés par trois demandes et, par conséquent, la réponse à l'API chinoise, qui vit sur api.ximalaya.com:
- / openapi-gateway-app / live / radios
- / openapi-gateway-app / live / get_radios_by_ids
- / openapi-gateway-app / recherche / radios
Le mot openapi dans le sens fait allusion à quelque chose d'ouvert, mais je n'ai pas trouvé de spécification publique. La demande est livrée avec des paramètres qui ne sont pas nécessaires à nos fins, nous les rejetons donc.
J'ai utilisé nginx comme serveur web, voici la configuration:
server { listen *:80; server_name api.io.mi.com ximalaya.com www.ximalaya.com api.ximalaya.com mobile.ximalaya.com open.ximalaya.com ximiraga.ru www.ximiraga.ru; root /opt/xiaomiradio/www; index index.php index.html index.htm; access_log /var/log/nginx/radio_access.log; error_log /var/log/nginx/radio_error.log; location @ximalaya { proxy_pass http://api.ximalaya.com; } }
Créez la même hiérarchie à la racine de votre serveur Web. En outre, créez les dossiers radio et hls à la racine du serveur Web. Tous les appels sur ces chemins doivent produire le même JSON, il est donc logique de leur faire des liens vers un fichier, que nous appellerons stations.json
Voici son contenu:
{ "total_page":1, "total_count":1, "current_page":0, "radios":[ { "id":527782023, "kind":"radio", "program_name":"AirSound1", "radio_name":"AirSound1", "radio_desc":"", "schedule_id":0, "support_bitrates":[ 64 ], "rate24_aac_url":"", "rate64_aac_url":"http://< >/hls/live1.m3u8", "rate24_ts_url":"", "rate64_ts_url":"", "radio_play_count":1, "cover_url_small":"http://< >/radio/527782023/cover_small.png", "cover_url_large":"http://< >/radio/527782023/cover_big.png", "updated_at":0, "created_at":0 } ] }
Comme vous pouvez le voir, tout est simple ici - nous donnons un tableau de radio indiquant où chercher le flux. Si vous avez plusieurs passerelles - vous pouvez créer plusieurs canaux. Une note importante - l'adresse indiquée ici doit être accessible depuis la passerelle!
Pour que l'application puisse voir vos modifications, vous devez modifier les hôtes sur votre smartphone et enregistrer api.ximalaya.com pour correspondre à l'adresse de votre serveur Web.
Maintenant, comment obtenir le flux. J'ai décidé de tout sortir de ma carte son depuis le PC sur lequel le serveur Web est déployé. Pour cela, nous utiliserons ffmpeg:
Faites attention aux chemins et à l'adresse du serveur Web - remplacez les vôtres.
En principe, tout cela est pour un travail réussi - exécutez le script ffmpeg, il commencera à créer des segments avec le son de votre carte son, lancera l'application sur le téléphone et sélectionnera votre station - après une seconde ou deux, le son du PC devrait disparaître.