> For the complete documentation index, see [llms.txt](https://sdn.docs.3q.video/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sdn.docs.3q.video/interface/player/content-absicherung.md).

# Content-Absicherung

Unsere Plattform bietet Methoden zur Absicherung von Live- und Video On-Demand Content vor unberechtigten Zugriffen.

{% hint style="info" %}
Bei der Absicherung ist zwischen der Player Protection und Content Protection zu unterscheiden. Die Schlüsselerzeugung für die Content Protection muss nur in Szenarien verwendet werden, wenn unser Videoplayer **nicht** zum Einsatz kommt. Wenn die Content Protection aktiv ist, kümmert sich unser Player selbständig um die Erzeugung der notwendigen Schlüssel.
{% endhint %}

### Projektschlüssel (Private Key) <a href="#page_projektschlussel_-private_key" id="page_projektschlussel_-private_key"></a>

Jedes Projekt in Ihrem Kundenkonto hat einen eigenen **Project Key**. Diesen benötigen Sie zur Nutzung der einzelnen Schutzmechanismen.

Um den Schlüssel zu erhalten, gehen Sie in Ihre Projektübersicht und öffnen den Bereich **Einstellungen**. Hier können Sie den Projektschlüssel kopieren oder auch einen neuen Schlüssel erzeugen.

### Player Protection  <a href="#page_player_protection" id="page_player_protection"></a>

Bei dieser Methode wird der 3Q Player mit einem **Key** vor unberechtigten Zugriffen geschützt.  Diese Methode kann für einzelne Videodateien oder für alle Inhalte eines Projektes genutzt werden.

Zur Ausführung erzeugt der Kunde Serverseitig einen **Key** und aktiviert in der Player-Konfiguration **Schutz des Players mit Key**.

{% hint style="danger" %}
Ist die Funktion aktiv, kann der 3Q Player ohne den Key **nicht** aufgerufen werden.
{% endhint %}

#### Beispiele für serverseitige Schlüsselerzeugung und Übergabe an den Player <a href="#page_beispiel_schlusselerzeugung_und_ubergabe_an_den_player" id="page_beispiel_schlusselerzeugung_und_ubergabe_an_den_player"></a>

PHP Code:

```php
// serverside.php
$_project_id = 'project_id';
$_project_key = 'project_key';
$timestamp = time() + 60; // Gültigkeit des Schlüssels, aktuelle Zeit zzgl. 60 Sekunden
$key = md5($_project_id.$_project_key.$timestamp);
```

Python Code:

```python
from hashlib import md5
project_id = 'project id'
# You'll find the private key in the project settings.
project_key = 'project_secret'
timestamp = int(time.time()) + 60
key = md5('{}{}{}'.format(project_id, project_key, timestamp).encode('utf-8')).hexdigest()
```

{% hint style="warning" %}
Generieren Sie die Token nicht im Browser da dabei der Key nicht geschützt ist!
{% endhint %}

**JavaScript Integration (js3q)**

Eine Anleitung zur Integration des Players und Erzeugung des Keys finden Sie hier: <https://docs.3q.video/en/Player_API/Basic_usage.html>.

**Iframe Integration**

Bei der Iframe Integration kann der Key und Timestamp mittels `GET`-Parameter.

Beispiel Integration Iframe mit Schlüssel:

```
<iframe id="sdn" title="3Q SDN" width="640px" height="360px" src="https://playout.3qsdn.com/59422d06-9ed4-11ea-97a4-002590c750be?key=[key]&timestamp=[timestamp]" frameborder="0" scrolling="no" allowfullscreen></iframe>
```

### Content Distribution Protection <a href="#page_content_distribution_protection" id="page_content_distribution_protection"></a>

Mit der Methode **Content Distribution Protection** kann die Auslieferung von Content mit unserem Player, direkte Streaming URLs oder Download URLs geschützt werden.

{% hint style="info" %}
Wenn Sie diese Option aktivieren und unseren Player integrieren, wird die Schlüsselerzeugung für diese Absicherung automatisch geregelt. Nur im Fall dessen, dass Sie unseren Player nicht verwenden, z.B. bei progressive Download oder mit einem Videoplayer von einem Drittanbieter, müssen Sie die Schlüssel selbstständig erzeugen.
{% endhint %}

Dieses Feature aktivieren Sie über die **Projekt Einstellungen  > Content-Absicherung** im gewünschten Projekt. Fortan wird sämtlicher Content in unserem Videoplayer automatisch mit diesem Schutzmechanismus ausgeliefert.

Für die Nutzung der direkten Streaming- und Download-URLs **ohne unseren Player** ist es nun notwendig, für jede Nutzung einen Schlüssel zu generieren.

#### Beispiel Schlüsselerzeugung <a href="#page_beispiel_schlusselerzeugung" id="page_beispiel_schlusselerzeugung"></a>

Schlüssel mit Hilfe von PHP oder einer anderen Programmiersprache erzeugen:

```
// token.php
function generateToken() {

$expires = time() + 600; // Gültigkeit des Schlüssels, aktuelle Zeit zzgl. 10 Minuten
$_user_agent = ''; // User Agent
$project_key = ''; // Your private project key
$md5 = md5($expires.$project_key.$_user_agent, false);

return $md5.'/'.$expires;
}
```

Link generieren:

```
https://sdn-global-streaming-cache.3qsdn.com/s/{generateToken()}/3144/files/17/11/766971/3144-F98zkwncqTR7BMg2.ism/manifest.m3u8?format=hls&mime=mp4&source=html5
```

{% hint style="danger" %}
Es ist essentiell, dass für jeden Aufruf ein eigener Schlüssel generiert wird.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://sdn.docs.3q.video/interface/player/content-absicherung.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
