1000 FAQ, 500 tutoriales y vídeos explicativos. ¡Aquí sólo hay soluciones!
Segurizar un flujo MP3/AAC o HLS con una clave única
Esta guía explica cómo mantener el control sobre sus flujos de Streaming Radio MP3/AAC o HLS activando la protección por clave única (token) para decidir, por ejemplo, si un oyente puede escuchar su radio o no.
Prólogo
- El principio es sencillo: en cada conexión, realizarás una solicitud a la API de Infomaniak que te devolverá un token único con una duración de vida limitada y configurable. Este token permitirá a quien lo posea consumir el flujo durante este período.
- Puede proteger un flujo MP3/AAC o HLS independientemente uno del otro (lo mismo ocurre con la geolocalización).
- La activación de la restricción implica un cambio en la configuración del flujo que puede tardar unos minutos en replicarse en los servidores.
Proteger un flujo de audio por clave única
Para hacerlo, basta con ir a los parámetros de restricciones y activar la protección por token en el flujo que desea proteger:
- Haga clic aquí para acceder a la gestión de su producto en el Manager Infomaniak (¿Necesita ayuda?).
- Haga clic directamente en el nombre asignado al producto en cuestión.
- Haga clic en el nombre del flujo de audio correspondiente.
- Haga clic en Restricciones en el menú lateral izquierdo.
- Seleccione HLS si es necesario.
- Haga clic en el menú de acción ⋮ ubicado a la derecha del elemento correspondiente.
- Haga clic en Restricción por token:
Active luego la protección.
Atención, en el momento en que active esta opción, el acceso al flujo se bloqueará instantáneamente para las nuevas conexiones. Ajuste sus reproductores para tener en cuenta la restricción, como se ilustra en el ejemplo a continuación:
Crear un token API Radio
Para acceder a la API Radio, primero debe autenticarse utilizando un token de aplicación. Este paso solo se debe hacer una vez. Para crear este token de aplicación, consulte esta otra guía.
El ámbito es radio y la duración ilimitada para evitar tener que regenerar un código de manera regular. Una vez generado el token, cópielo para pegarlo en el ejemplo de abajo.
Ejemplo de uso en lenguaje PHP
Para MP3/AAC o HLS, el código puede ser bastante similar, solo cambia la URL llamada en POST en cuanto a su forma.
Pega el token generado a continuación en lugar del 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 ruta 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 ruta será: https://api.infomaniak.com/1/radios/acl/hls_streams/myradiostream/token
Ejemplo en el caso del MP3/AAC, asegúrate de 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 oyente tendrá "window" segundos para iniciar la reproducción del flujo. Pasado este plazo, el token expirará y el flujo no podrá iniciarse a menos que la página se recargue. Según sus necesidades y su caso de uso, será necesario ajustar este plazo de la mejor manera posible.
También deberá reemplazar a continuación la URL de reproducción de su flujo en lugar de la indicada, manteniendo el parámetro $token
al final. Y para terminar, se muestra el Reproductor (aquí una simple etiqueta html5, pero se puede agregar cualquier capa adicional después, ya que el token se pasa en los parámetros $_GET
de la url).
$streamUrl = "https://newradiotest.ice.infomaniak.ch/newradiotest-128.aac?$token";
echo "<audio controls=""><source src="$streamUrl"></audio>";