1000 FAQ, 500 tutoriales y vídeos explicativos. ¡Aquí sólo hay soluciones!
Asegurar un flujo MP3/AAC o HLS por clave única
Esta guía explica cómo mantener un control sobre sus flujos de Streaming Radio MP3/AAC o HLS activando la protección con llave única (token) para decidir por ejemplo si un oyente puede escuchar su radio o no.
Preámbulo
- El principio es simple: en cada conexión, harás una consulta a la API Infomaniak que te devolverá un token único con una vida útil limitada y parametrable. Este token permitirá a cualquiera que lo posea consumir el flujo durante este período.
- Usted puede proteger un flujo MP3/AAC o HLS independientemente uno del otro (idem para la geolocalización por otra parte).
- La activación de la restricción implica un cambio en la configuración del flujo que puede tomar unos minutos para ser replicada en los servidores.
Proteger un flujo de audio por clave única
Para ello, sólo tienes que ir a la configuración de restricciones y activar la protección de token en el flujo que deseas asegurar:
- Haga clic aquí para acceder a la gestión de su producto en el Manager Infomaniak (¿Necesitas ayuda?).
- Haga clic directamente sobre el nombreasignado al producto afectado.
- Haga clic en el nombre del flujo de audio de que se trate.
- Haga clic en Restricciones en el menú lateral izquierdo.
- Elija HLS si es necesario.
- Haga clic en el menú de acción ⋮situado a la derecha del elemento afectado.
- Haga clic en Restricción por token:
A continuación, active la protección.
Atención, al activar esta opción, el acceso al flujo se bloqueará instantáneamente para las nuevas conexiones. Adapte sus Players para tener en cuenta la restricción, como se muestra en el ejemplo siguiente:
Crear un token API Radio
Para tener acceso a la API Radio, primero debe autentificarse con un token aplicación. Este paso sólo tiene que hacerse una vez. Para crear este token de aplicación, lea esta guía.
El scope es Radio y la duración de vida ilimitada para evitar tener que regenerar un código de manera regular. Una vez generado el token, copiarlo para pegarlo en el ejemplo de abajo.
Ejemplo de uso en lenguaje PHP
Para MP3/AAC o HLS, el código puede ser sustancialmente el mismo, sólo la URL llamada POST cambia en su forma.
Pegar a continuación el token generado en lugar de el indicado:
if (!defined('API_TOKEN')) {
define('API_TOKEN', 'AYF5lSh3c7Xy5974Fs12RTkTThujT-L9R4Xk2ZfGyP6sV7QqJ1oC3jD8nFtKzIxUeMw5oNzR6');
}
/**
* Fonction générique pour executer des requêtes cURL
*
* @param string $method Méthode HTTP (GET, POST, PUT, etc...)
* @param string $url Url de l'api a requêter
* @param array $headers Liste des en-têtes HTTP (l'autorisation doit être passée ici avec un ['Authorization: Bearer ']
* @param array $payload Un tableau contenant les données pour créer un token
* @return mixed
*/
function request(string $method, string $url, array $headers = [], array $payload = []): mixed{
// prepare options array
$opts = [
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => $url,
CURLOPT_CUSTOMREQUEST => strtoupper($method),
];
// add payload if relevant
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'] ?? 'an error occured');
}
return $data['data'];
}
Vamos a crear el token, la URL de creación del token se desglosa de la siguiente manera:
- Para un flujo MP3 / AAC
POST https://api.infomaniak.com/1/radios/acl/streams/mountpoint.mp3/token
Ejemplo para proteger https://newradiotest.ice.infomaniak.ch/newradiotest-128.aac
La carretera será: https://api.infomaniak.com/1/radios/acl/streams/newradiotest-128.aac/token
- Para un flujo HLS
POST https://api.infomaniak.com/1/radios/acl/hls_streams/<stream>/token
Ejemplo para proteger https://myradiostream.radiohls.infomaniak.com/myradiostream/manifest.m3u8
La carretera será: https://api.infomaniak.com/1/radios/acl/hls_streams/myradiostream/token
Ejemplo en el caso del MP3 / AAC, piense en ajustar:
$token = request(
'POST',
'https://api.infomaniak.com/1/radios/acl/streams/newradiotest-128.aac/token',
// en-tête d'authorization
[
'Authorization: Bearer ' . API_TOKEN,
'Content-Type: application/json',
],
/**
* payload pour créer le token, vous pouvez passer les valeurs suivantes
* window | 300 | optionnel | durée de validité du token (default: 5 minutes)
*/
[
'window' => 3600, // 1h validity
]
);
Es importante tener en cuenta que si este código se genera en el momento de cargar la página, el auditor tendrá "window" segundos para iniciar la lectura del flujo. Más allá de este plazo, el token expirará, y el flujo no podrá ser lanzado a menos que se cargue la página. Según sus necesidades y su caso de uso, será necesario ajustar este plazo de la mejor manera posible.
También será necesario reemplazar a continuación la URL de lectura de su feed en lugar de la indicada, manteniendo al mismo tiempo el parámetro $token
Al final. Y por último, se muestra el Player (aquí una simple etiqueta html5, pero se puede añadir por supuesto cualquier sobrecapa después, ya que el token ha pasado a los parámetros $_GET
del url).
$streamUrl = "https://newradiotest.ice.infomaniak.ch/newradiotest-128.aac?$token";
echo "<audio controls=""><source src="$streamUrl"></audio>";