# Projects

### Project Management (Content Pools)

Projects - also referred to as **Content Pools** - are the central organizational units for media content on the platform. In **On-Demand projects**, you can upload and manage an unlimited number of media files, while **Livestream projects** represent a dedicated livestream channel used to create and manage live broadcasts.

***

### Projects Overview

<figure><img src="https://949886435-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FY0a9tRqzqI1wGBkmcjxd%2Fuploads%2Fr8J5DXZ1Y2NX3j0Fuaqw%2FBildschirmfoto%202026-01-26%20um%2011.22.21.png?alt=media&#x26;token=c693c8ce-81f2-4109-bc81-c3c3ea47ef87" alt=""><figcaption></figcaption></figure>

The **Projects** section provides an overview of all available content pools within the account.

Here you can:

* View all existing projects
* Filter projects by type (**On-Demand** or **Livestream**)
* Mark projects as favorites
* Search for projects by name
* Create new projects

Projects are displayed as tiles showing the project name, type, and assigned group.

***

### Project Types

Two project types are available:

#### On-Demand Projects

On-Demand projects are used to manage pre-recorded media content.

Within an On-Demand project, you can:

* Upload video and audio files
* [Organize and manage media assets](https://docs.3q.video/user-guide-new-ui/projects/on-demand)
* Publish content for on-demand playback

#### Livestream Projects

Livestream projects are used for live video events.

Within a Livestream project, you can:

* Stream video and audio content
* [Configure and manage live streams](https://docs.3q.video/user-guide-new-ui/projects/livestreaming)
* Store and manage livestream recordings (depending on enabled modules)

***

### Creating a Project

New projects can be created directly from the Projects overview.

When creating a project, you define:

* **Title** of the project
* **Project type** (On-Demand or Livestream)
* [**Group assignment**](https://docs.3q.video/user-guide-new-ui/account/groups)
* **Default publication status**
* **Default metadata language**

These settings apply to all content within the project.

***

### Project Configuration

Additional configuration options depend on the selected project type and enabled modules.

Detailed configuration settings for:

* [**On-Demand projects**](https://docs.3q.video/user-guide-new-ui/projects/livestreaming)
* [**Livestream projects**](https://docs.3q.video/user-guide-new-ui/projects/on-demand)

are described in the corresponding chapters of this documentation.

### Content Protection

With **Content Protection**, you can secure the delivery of content when using our player, direct streaming URLs, or download URLs.

This option is enabled by default and when you integrate our player, token generation for content protection is handled automatically. Only if you do not use our player - for example, when using progressive download or a third-party video player - do you need to generate the access tokens yourself.

You can enable or disable this feature in **Project Settings → Content Protection** for the desired project. Once activated, all content delivered through our video player will automatically be protected by this mechanism.&#x20;

Content Protection secures media delivery by **signing and tokenizing every video chunk** that is requested during playback or download. Each request is validated against a time-limited token before the chunk is delivered. If the token is missing, invalid, or expired, access to the requested video segment is denied. This prevents unauthorized access and sharing of direct streaming or download URLs.

***

#### Example: Token Generation

{% hint style="info" %}
A new token must be generated for every request. Reusing tokens is not supported and may result in access being denied.
{% endhint %}

#### Generate a token (PHP example)

```php
// token.php
function generateToken() {
    $expires = time() + 600; // Token validity: current time + 10 minutes
    $_user_agent = ''; // User Agent (required).
    $project_key = ''; // Your private project key (required).
    $md5 = md5($expires . $project_key . $_user_agent, false);

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

#### Generate the streaming URL

```
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
```

***
