1000 FAQ, 500 tutoriales y vídeos explicativos. ¡Aquí sólo hay soluciones!
Asegurar 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, para decidir si un oyente puede escuchar su radio, activando la protección por clave única (token).
Proteger un flujo de audio con clave única
El principio es simple: con cada conexión, realizará una solicitud a la API de Infomaniak que le devolverá un token único con una duración limitada y configurable. Este token permitirá a cualquier persona que lo posea consumir el flujo durante ese período.
Puede proteger un flujo MP3/AAC o HLS independientemente uno del otro (lo mismo aplica para la geolocalización).
Para hacerlo, simplemente dirígete a la configuración de restricciones y activa la protección por token en el flujo que deseas asegurar:
- inicie sesión en el Manager de Infomaniak (manager.infomaniak.com) desde un navegador web como Brave o Edge
- haga clic en el ícono en la parte superior derecha de la interfaz (o navegue a través del menú lateral izquierdo, por ejemplo)
- seleccione Streaming radio (universo Streaming)
- haga clic en el nombre del objeto correspondiente en la tabla que se muestra
- haga clic en Restricciones en el menú lateral izquierdo
- seleccione HLS si es necesario
- haga clic en el menú de acción ⋮ a la derecha del flujo correspondiente en la tabla que se muestra
- haga clic en Restricción por token
Luego active 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 siguiente ejemplo:
Crear un token API Radio
Para acceder a la API Radio, primero debe autenticarse con un token de aplicación. Este paso solo debe hacerse una vez. Para crear este token de aplicación, lea esta guía.
El ámbito es radio y la duración es ilimitada para evitar tener que regenerar un código regularmente. Una vez generado el token, cópielo para pegarlo en el siguiente ejemplo.
Ejemplo de uso en PHP
Para MP3/AAC o HLS, el código puede ser prácticamente el mismo; solo cambia la URL llamada en POST en su forma.
Pegue aquí el token generado en lugar del indicado:
if (!defined('API_TOKEN')) {
define('API_TOKEN', 'AYF5lSh3c7Xy5974Fs12RTkTThujT-L9R4Xk2ZfGyP6sV7QqJ1oC3jD8nFtKzIxUeMw5oNzR6');
}
/**
* Función genérica para ejecutar solicitudes cURL
*
* @param string $method Método HTTP (GET, POST, PUT, etc...)
* @param string $url URL de la API a consultar
* @param array $headers Lista de encabezados HTTP (la autorización debe pasarse aquí con un ['Authorization: Bearer ']
* @param array $payload Un array que contiene los datos para crear un token
* @return mixed
*/
function request(string $method, string $url, array $headers = [], array $payload = []): mixed{
// preparar el array de opciones
$opts = [
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => $url,
CURLOPT_CUSTOMREQUEST => strtoupper($method),
];
// agregar payload si es relevante
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'] ?? 'ocurrió un error');
}
return $data['data'];
}
Vamos a crear el token, la URL para crear el token se descompone 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 de MP3 / AAC, recuerde ajustar:
$token = request(
'POST',
'https://api.infomaniak.com/1/radios/acl/streams/newradiotest-128.aac/token',
// encabezado de autorización
[
'Authorization: Bearer ' . API_TOKEN,
'Content-Type: application/json',
],
/**
* payload para crear el token, puede pasar los siguientes valores
* window | 300 | opcional | duración de validez del token (predeterminado: 5 minutos)
*/
[
'window' => 3600, // 1h de validez
]
);
Es importante tener en cuenta que si este código se genera en el momento de la carga de la página, el oyente tendrá "window" segundos para iniciar la reproducción del flujo. Más allá de este plazo, el token expirará y el flujo no podrá ser iniciado a menos que se recargue la página. 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 finalizar, mostramos el reproductor (aquí una simple etiqueta HTML5, pero se puede agregar, por supuesto, cualquier superposición después, el token siendo pasado 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>";