1000 FAQ, 500 tutorial e video esplicativi. Qui ci sono delle soluzioni!
Proteggere uno stream MP3/AAC o HLS con una chiave unica
Questa guida spiega come mantenere il controllo sui tuoi flussi di Streaming radio MP3/AAC o HLS, ad esempio per decidere se un ascoltatore può ascoltare la tua radio, attivando la protezione tramite token unico.
Proteggere un flusso audio con token unico
Il principio è semplice: ad ogni connessione, effettuerai una richiesta all'API di Infomaniak che ti restituirà un token unico con una durata limitata e configurabile. Questo token permetterà a chiunque lo possieda di consumare il flusso per quel periodo.
Puoi proteggere un flusso MP3/AAC o HLS indipendentemente l'uno dall'altro (idem per la geolocalizzazione, tra l'altro).
Per farlo, basta andare nelle impostazioni delle restrizioni e attivare la protezione tramite token sul flusso che desideri proteggere:
- accedere al Manager Infomaniak (manager.infomaniak.com) da un browser web come Brave o Edge
- cliccare sull'icona in alto a destra dell'interfaccia (o navigare tramite il menu laterale sinistro, ad esempio)
- scegliere Streaming radio (universo Streaming)
- cliccare sul nome dell'oggetto pertinente nella tabella visualizzata
- cliccare su Restrizioni nel menu laterale sinistro
- scegliere HLS se necessario
- cliccare sul menu di azione ⋮ a destra del flusso pertinente nella tabella visualizzata
- cliccare su Restrizione tramite token
Attivare quindi la protezione.
Attenzione, nel momento in cui attiverai questa opzione, l'accesso al flusso sarà istantaneamente bloccato per le nuove connessioni. Adatta i tuoi lettori per tenere conto della restrizione, come illustrato nell'esempio qui sotto:
Creare un token API Radio
Per avere accesso all'API Radio, devi prima autenticarti con un token dell'applicazione. Questo passaggio deve essere eseguito solo una volta. Per creare questo token dell'applicazione, leggi questa guida.
Il campo è radio e la durata di vita è illimitata per evitare di dover rigenerare un codice regolarmente. Una volta generato il token, copialo per incollarlo nell'esempio qui sotto.
Esempio di utilizzo in PHP
Per MP3/AAC o HLS, il codice può essere sostanzialmente lo stesso; cambia solo l'URL chiamato in POST nella sua forma.
Incolla qui il token generato al posto di quello indicato:
if (!defined('API_TOKEN')) {
define('API_TOKEN', 'AYF5lSh3c7Xy5974Fs12RTkTThujT-L9R4Xk2ZfGyP6sV7QqJ1oC3jD8nFtKzIxUeMw5oNzR6');
}
/**
* Funzione generica per eseguire richieste cURL
*
* @param string $method Metodo HTTP (GET, POST, PUT, ecc...)
* @param string $url URL dell'API da interrogare
* @param array $headers Elenco delle intestazioni HTTP (l'autorizzazione deve essere passata qui con un ['Authorization: Bearer ']
* @param array $payload Un array che contiene i dati per creare un token
* @return mixed
*/
function request(string $method, string $url, array $headers = [], array $payload = []): mixed{
// preparare l'array delle opzioni
$opts = [
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => $url,
CURLOPT_CUSTOMREQUEST => strtoupper($method),
];
// aggiungere payload se pertinente
if ($payload && $method !== 'GET') {
$opts[CURLOPT_POSTFIELDS] = json_encode($payload);
}
$ch = curl_init();
curl_setopt_array($ch, $opts);
$result = curl_exec($ch);
if(curl_errno($ch)){
throw new Exception(curl_error($ch));
}
$data = json_decode($result, true);
if ($data['result'] === 'error') {
throw new Exception($data['error']['description'] ?? 'si è verificato un errore');
}
return $data['data'];
}
Creeremo il token, l'URL per creare il token si scompone come segue:
- Per un flusso MP3 / AAC
POST https://api.infomaniak.com/1/radios/acl/streams/mountpoint.mp3/token
Esempio per proteggere https://newradiotest.ice.infomaniak.ch/newradiotest-128.aac, il percorso sarà: https://api.infomaniak.com/1/radios/acl/streams/newradiotest-128.aac/token
- Per un flusso HLS
POST https://api.infomaniak.com/1/radios/acl/hls_streams/<stream>/token
Esempio per proteggere https://myradiostream.radiohls.infomaniak.com/myradiostream/manifest.m3u8, il percorso sarà: https://api.infomaniak.com/1/radios/acl/hls_streams/myradiostream/token
Esempio nel caso di MP3 / AAC, ricorda di regolare:
$token = request(
'POST',
'https://api.infomaniak.com/1/radios/acl/streams/newradiotest-128.aac/token',
// intestazione di autorizzazione
[
'Authorization: Bearer ' . API_TOKEN,
'Content-Type: application/json',
],
/**
* payload per creare il token, puoi passare i seguenti valori
* window | 300 | opzionale | durata di validità del token (predefinito: 5 minuti)
*/
[
'window' => 3600, // validità 1h
]
);
È importante notare che se questo codice viene generato al momento del caricamento della pagina, l'ascoltatore avrà "window" secondi per avviare la riproduzione del flusso. Oltre questo termine, il token scadrà e il flusso non potrà più essere avviato a meno che la pagina non venga ricaricata. A seconda delle tue esigenze e del tuo caso d'uso, sarà necessario regolare questo intervallo nel miglior modo possibile.
È necessario anche sostituire qui sotto l'URL di riproduzione del tuo flusso al posto di quello indicato, mantenendo il parametro $token
alla fine. E infine, visualizziamo il lettore (qui un semplice tag html5, ma possiamo aggiungere naturalmente qualsiasi sovrapposizione successiva, il token viene passato nei parametri $_GET
dell'URL).
$streamUrl = "https://newradiotest.ice.infomaniak.ch/newradiotest-128.aac?$token";
echo "<audio controls=""><source src="$streamUrl"></audio>";