Wissensdatenbank

1 000 FAQs, 500 Anleitungen und erläuternde Videos. Hier gibt es nur Lösungen!

Audio-Stream mit eindeutigem Schlüssel (Token) sichern

Dieser Leitfaden erklärt, wie Sie die Kontrolle über Ihre Streaming-Radio-MP3/AAC- oder HLS-Streams durch Aktivierung des Schutzes durch einzigartigen Token (Token) behalten, um beispielsweise zu entscheiden, ob ein Hörer Ihren Radio hören kann oder nicht.

 

Vorwort

  • Bei jeder Verbindung führen Sie eine Anfrage an die Infomaniak-API durch, die Ihnen im Gegenzug einen eindeutigen Token mit einer begrenzten und parametrierbaren Lebensdauer zurücksendet.
  • Dieser Token ermöglicht es jedem, der ihn besitzt, den Stream während dieser Zeit zu nutzen.
  • Sie können einen MP3/AAC- oder HLS-Stream unabhängig voneinander schützen (ebenso wie die Geolokalisierung übrigens).
  • Die Aktivierung der Einschränkung erfordert eine Änderung der Stream-Konfiguration, die einige Minuten in Anspruch nehmen kann, um auf den Servern repliziert zu werden.

 

Einen Audio-Stream durch einen eindeutigen Schlüssel schützen

Dazu müssen Sie nur zu den Einschränkungsparametern gehen und den Token-Schutz für den Stream, den Sie sichern möchten, aktivieren:

  1. Hier klicken, um auf die Verwaltung Ihres Produkts im Infomaniak Manager zuzugreifen (Hilfe benötigt?).
  2. Klicken Sie direkt auf den Produktnamen, der dem betreffenden Produkt zugewiesen wurde:
  3. Klicken Sie:
    1. entweder auf den Namen des Radios:
    2. oder auf Einschränkungen im linken Seitenmenü, um Einschränkungen für das gesamte Produkt anzuwenden:
  4. Wenn Sie die obige Option a auswählen, klicken Sie anschließend auf Einschränkungen im linken Seitenmenü.
  5. Wählen Sie HLS bei Bedarf aus.
  6. Klicken Sie auf das Aktionsmenü rechts neben dem betreffenden Element.
  7. Klicken Sie auf Token-Einschränkung:

     

Aktivieren Sie dann den Schutz.

Achtung, wenn Sie diese Option aktivieren, wird der Zugriff auf den Stream sofort für neue Verbindungen blockiert. Passen Sie Ihre Player an, um die Einschränkung zu berücksichtigen, wie im folgenden Beispiel dargestellt:

 

API-Radio-Token erstellen

Um auf die Radio-API zugreifen zu können, müssen Sie sich zunächst mit einem Anwendungstoken authentifizieren. Dieser Schritt muss nur einmal durchgeführt werden. Um dieses Anwendungstoken zu erstellen, nehmen Sie sich diesen anderen Leitfaden zu Hilfe.

Der Umfang ist radio und die Laufzeit unbegrenzt, um zu vermeiden, dass regelmäßig ein Code regeneriert werden muss. Sobald das Token generiert ist, kopieren Sie es, um es in das untenstehende Beispiel einzufügen.

 

Beispiel für die Verwendung in der Programmiersprache PHP

Für MP3/AAC oder HLS kann der Code im Wesentlichen derselbe sein, nur die in POST aufgerufene URL ändert sich in ihrer Form.

Fügen Sie unten das generierte Token anstelle des angegebenen ein:

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'];
}

 

Wir werden das Token erstellen, die URL zur Token-Erstellung setzt sich wie folgt zusammen:

  • Für einen MP3 / AAC-Stream
POST https://api.infomaniak.com/1/radios/acl/streams/mountpoint.mp3/token

Beispiel zum Schutz von https://newradiotest.ice.infomaniak.ch/newradiotest-128.aac der Pfad wird: https://api.infomaniak.com/1/radios/acl/streams/newradiotest-128.aac/token

  • Für einen HLS-Stream
POST https://api.infomaniak.com/1/radios/acl/hls_streams/<stream>/token

Beispiel zum Schutz von https://myradiostream.radiohls.infomaniak.com/myradiostream/manifest.m3u8 der Pfad wird: https://api.infomaniak.com/1/radios/acl/hls_streams/myradiostream/token

Beispiel im Fall von MP3 / AAC, denken Sie daran, anzupassen:

$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 ist wichtig zu beachten, dass, wenn dieser Code zum Zeitpunkt des Ladens der Seite generiert wird, der Hörer "window" Sekunden Zeit hat, um die Wiedergabe des Streams zu starten. Nach Ablauf dieser Frist wird das Token ablaufen und der Stream kann nicht mehr gestartet werden, es sei denn, die Seite wird neu geladen. Je nach Ihren Anforderungen und Ihrem Anwendungsfall wird es notwendig sein, diese Frist bestmöglich anzupassen.

Sie müssen auch unten die Abspiel-URL Ihres Streams anstelle der angegebenen ersetzen, wobei der Parameter $token am Ende beibehalten wird. Und schließlich wird der Player angezeigt (hier ein einfaches HTML5-Tag, aber man kann natürlich jede beliebige Überlagerung hinzufügen, wobei das Token in den Parametern $_GET der URL übergeben wird).

$streamUrl = "https://newradiotest.ice.infomaniak.ch/newradiotest-128.aac?$token";
echo "<audio controls=""><source src="$streamUrl"></audio>";

War diese FAQ nützlich?