---
title: "ATEME TITAN 연동 가이드"
description: "본 문서는 ATEME의 TITAN Live, TITAN File 제품을 사용하여 콘텐츠 패키징 워크플로우에 도브러너 멀티 DRM 서비스를 연동하는 방법을 설명합니다."
---
> For the complete documentation index, see [llms.txt](/llms.txt).

![](/img/content-security/Ateme_logo.png)

도브러너 멀티DRM 서비스는 ATEME TITAN Live 및 TITAN File 제품과의 원활한 연동을 통해 고객이 VOD(주문형 비디오) 및 라이브 스트림에 대한 DRM 암호화 키 데이터를 연동할 수 있도록 지원합니다. 이 연동 작업은 DRM 키 서버와 다양한 트랜스코더 및 패키저 솔루션 간의 업계 표준 인터페이스 역할을 하는 [콘텐츠 보호 정보 교환(CPIX) API](/content-security/multi-drm/packaging/cpix-api/)를 기반으로 합니다.

본 가이드는 고객이 도브러너 멀티DRM과 ATEME TITAN 제품을 연동하는 데 도움이 되는 단계별 안내와 샘플 코드를 제공합니다.

## 사전 요구 사항

- 도브러너 멀티 DRM 서비스 및 ATEME TITAN 제품의 활성 계정
- ATEME TITAN Live 및 TITAN File 솔루션에 대한 기본 지식
- CPIX API 및 DRM 암호화 개념에 대한 기본적 이해

## 라이브 콘텐츠를 위한 TITAN Live 연동

TITAN Live 제품으로 DRM 암호화가 적용된 새로운 라이브 스트림을 생성하는 방법은 두 가지가 있습니다. TITAN Live에서 제공하는 웹 GUI와 REST API 중 선호하는 방식에 따라 해당 안내를 따릅니다.

### 웹 GUI를 통한 라이브 패키징

TITAN 계정으로 TITAN Live 웹 GUI에 로그인합니다. `SERVICES` 탭에서 아래와 같이 신규 서비스를 생성하고 설정합니다.

#### 입력 스트림

새로 생성할 라이브 스트림의 입력을 다음과 같이 설정합니다.

- Input Type: `RTMP`
- Mode: `Client`
- Url: 원본 스트림의 RTMP URL
- Stream name: 해당 스트림에 대한 임의의 이름

#### Muxer

필요에 따라 DASH, HLS 또는 FMP4 출력에 대한 Muxer를 추가하고, `DEVICE CONFIGURATION` 항목에 다음과 같은 값을 입력합니다.

- DRM Configuration
  - `Multi-DRM`, `Widevine`, `PlayReady`, `FairPlay` 옵션 중에서 하나를 선택합니다. `Multi-DRM` 옵션에는 `Widevine`과 `PlayReady`가 모두 포함됩니다.
- Key Management Parameter
  - Server Type: `Standard CPIX`
  - Key Server URL: `<KMS 토큰 값을 포함한 도브러너 KMS URL>`
  - Content ID: 해당 라이브 스트림 콘텐츠에 대한 임의의 고유 ID를 입력합니다. 영숫자와 `-`(하이픈), `_`(밑줄) 문자로 최대 200바이트까지 입력할 수 있습니다.
  - Key ID: `<CPIX 요청 데이터의 KID>` 

:::note 

`KMS URL`, `KID` 등 입력값에 대한 자세한 내용은 [CPIX API 가이드](/content-security/multi-drm/packaging/cpix-api/)를 참고하시기 바랍니다.

:::

#### 출력 

- `Ignore SSL errors` 및 `Enable` 옵션을 체크합니다.
- Url: 출력될 DASH mpd 또는 HLS m3u8 URL을 입력합니다.

> CMAF 출력(Muxer 1개, 출력 2개)을 구성하려면 아래 단계를 진행합니다.
> 
> 1. CMAF URL 필드에 mpd URL을 입력합니다.
> 2. `ADD HLS MASTER PLAYLIST` 버튼을 클릭하고 m3u8 URL을 추가로 입력합니다.

### REST API를 통한 라이브 패키징 

TITAN Live 제품에서 지원하는 REST API URI를 호출하여 신규 라이브 스트림 서비스를 생성하거나 기존 서비스를 관리할 수 있습니다.

**REST API URI**

```sh
https://<ID>:<PW>@<ip address>/api/v1/servicesmngt/services
```

:::note 

REST API URL에는 웹 UI에 사용되는 관리자 계정 대신 TITAN Live 서비스 계정의 ID/비밀번호를 입력해야 합니다.

:::

#### HTTP 메소드에 따른 REST API 동작

- `GET` 메서드: 기존에 등록되어 있는 작업(서비스) 목록을 반환합니다.
- `POST` 메서드: 이전에 사용되지 않은 UUID인 경우 새 작업을 생성합니다. 요청과 동일한 UUID를 가진 작업이 있는 경우 기존 작업을 업데이트합니다.

#### 요청 데이터의 DRM 설정

아래 예시와 같이 json 형식의 데이터를 생성하고 HTTP 요청에 설정하여 DRM 암호화를 연동합니다.

- DRM Type: `Multi-DRM`, `Widevine`, `PlayReady`, `FairPlay` 옵션 중에서 하나를 입력합니다. `Multi-DRM` 옵션에는 `Widevine`과 `PlayReady`가 모두 포함됩니다.
- KeyServerParam
  - ContentID: 해당 라이브 스트림 콘텐츠에 대한 임의의 고유 ID를 입력합니다. 영숫자와 `-`(하이픈), `_`(밑줄) 문자로 최대 200바이트까지 입력할 수 있습니다.
  - KID: `<CPIX 요청 데이터의 KID>`
  - ScramblerKeyServerUrl: `<KMS 토큰 값을 포함한 도브러너 KMS URL>`
  - ServerType: `Standard CPIX`

```json
{
  "DRMType": "Multi-DRM",
  "IVSize": "16 Bytes",
  "InternalKeySettings": {},
  "KeyServerParam": {
    "ContentID": "titanlive",
    "KID": "44bf0b6d-e751-4afb-a687-568eaec911d5",
    "KeyDuration": 0,
    "ScramblerKeyServerUrl": "https://drm-kms.doverunner.com/v2/cpix/doverunner/getKey/eyJhY2Nlc3Nfa2V5IjoiZHNJb2xjN2gxRzhUVW1JMTdiWXd4aFV1TkZvRmNlNzJjeDllTU9rNjJ3YjhWTjJQZGdwV1lISXhTRVg5ZjBIaSIsInNpdGVfaWQiOiJERU1PIn0=",
    "ServerType": "Standard CPIX",
    "SslParameters": {
      "SslClientCertificate": {
        "Name": "filename",
        "UseCertificate": false
      },
      "SslPeerCertificate": {
        "Authority": "Default authority",
        "Name": "filename",
        "VerifyCertificate": false
      }
    }
  },
  "SetKeyServer": true,
  "WriteKey": false
}
```

:::note 

`KMS URL`, `KID` 등 입력값에 대한 자세한 내용은 [CPIX API 가이드](/content-security/multi-drm/packaging/cpix-api/)를 참고하시기 바랍니다.

:::

### 라이브 스트림 시작 및 재생

웹 GUI 또는 REST API를 통해 서비스를 생성한 후, 아래 단계에 따라 라이브 스트림을 시작하고 재생을 테스트할 수 있습니다.

1. 웹 GUI `SERVICES` 탭 또는 REST API 응답에 새 서비스가 나열되어 있는지 확인합니다.
2. GUI의 재생 버튼을 클릭하거나 API 호출을 통해 스트리밍을 시작합니다.
  > 작업이 실패한 경우 `ALARMS` 탭에서 오류 로그를 확인할 수 있습니다.
3. 출력 스트리밍 서버를 구성하여 mpd 또는 m3u8 출력 URL의 재생을 테스트합니다.

## VOD 콘텐츠를 위한 TITAN File 연동

TITAN Live 연동과 마찬가지로, TITAN File 연동을 통한 VOD 콘텐츠 패키징도 웹 GUI 또는 REST API를 통해 수행할 수 있습니다.

### 웹 GUI를 통한 VOD 패키징 

#### S3 스토리지 등록

TITAN File 제품의 웹 GUI에서 좌측 탭의 `Credentials`로 이동해 다음과 같이 Amazon S3 접근에 필요한 인증 정보를 등록합니다.

- Choose a protocol: S3
- Name: 인증 정보에 대한 임의의 이름
- AWS Access Key: 등록할 S3 저장소에 접근하기 위해 필요한 AWS 엑세스 키
- AWS Secret Key: 등록할 S3 저장소에 접근하기 위해 필요한 AWS 비밀 키
- AWS Storage Region: 해당 S3 스토리지의 AWS 리전을 선택합니다.
- ACL Full Control: 사용하지 않는 옵션이므로 비활성화 합니다.
- Certificate Authority Bundle: 사용하지 않는 옵션입니다.

:::note 

다음 단계에서 작업 생성 시 입력하는 Input, Output URL에 위 `Credential Name`이 사용됩니다.

- 예: s3://< credential name >@s3.ap-northeast-2.amazonaws.com/< bucket name >/path/to/file/source.mp4

:::

#### 패키징 작업 등록 및 시작

웹 GUI 좌측 탭에 있는 `Job Composer`를 통해 다음과 같이 VOD 패키징 작업 생성과 DRM 설정이 가능합니다.

- Assets, Inputs, Tracks, Outputs 각 영역 별로 설정을 진행
  - Input source와 Output storage 항목에 각각 해당되는 Amazon S3 경로를 입력 

`Output` 탭의 DRM 설정에서 `DRM Type`을 `manual`로 선택하고, `Add DRM`을 클릭해 DRM 종류별로 다음과 같은 값을 입력합니다.

| 옵션 | PlayReady | Widevine | FairPlay |
|:---|:-----|:-----|:-----|
| DRM System Identifier | playready | widevine | fairplay |
| Encryption Key | 16 바이트 암호화 키 | 16 바이트 암호화 키 | 16 바이트 암호화 키 |
| Key ID | 16 바이트 키 ID (UUID 형식) | 16 바이트 키 ID (UUID 형식) | 16 바이트 키 ID (UUID 형식) |
| PSSH Data | PlayReady PSSH 데이터 | Widevine PSSH 데이터 | 사용하지 않음 |
| Initialization Vector | 사용하지 않음 | 사용하지 않음 | 16 바이트 IV 값 |
| Key Uri | 사용하지 않음 | 사용하지 않음 | skd://base64_인코딩된_키_ID |

:::note 

`암호화 키`, `키 ID`, `PSSH 데이터` 등의 입력 값은 도브러너 CPIX API를 호출해 획득해야 합니다. API 규격과 샘플 코드 등의 정보는 [CPIX API 가이드](/content-security/multi-drm/packaging/cpix-api/)를 참고하시기 바랍니다.

:::

DRM 설정 후 `Save Configuration`을 클릭하고 우측 상단 `Run Job` 버튼을 클릭해 작업을 실행합니다.

> 아래 REST API 연동에서 사용하는 JSON Body 데이터를 입력해 GUI에서 작업을 생성할 수도 있습니다.

### REST API를 통한 VOD 패키징

TITAN File 제품에서 지원하는 REST API URI를 호출하여 VOD 패키징 작업을 생성할 수 있습니다.

#### API 인증을 위한 토큰 요청 

다음과 같이 API URI에 요청 데이터를 설정해 호출하여 API 인증 토큰을 획득합니다.

**API URI**

```sh
https://<TITAN File server IP or domain>/titanfile/users/token
```

**Request Body**

```json
{
  "username": <id>,
  "password": <password>
}
```

**Response Body (예시)**

```json
{
    "access_token": "e042a836c751224ca4c689d63bbd471e49a73ab7e4a7ff6e29c7496be09f8c72",
    "refresh_token": "05a8d364b730236be9f75328b43c2a053d3be8ce8b9b81d4101fcfd0c9509130",
    "expires_in": 3600,
    "token_type": "bearer"
}
```

#### 작업 생성 및 실행 

다음과 같이 API URI에 Header와 Body 데이터를 설정해 호출하여 새로운 VOD 패키징 작업을 생성합니다.

**API URI**

```sh
https://<TITAN File server IP or domain>/titanfile/api/jobs
```

**Request Header**

- Content Type: application/json
- Authorization: 토큰 유형 + 인증 토큰 값
  - 예: Bearer e042a836c751224ca4c689d63bbd471e49a73ab7e4a7ff6e29c7496be09f8c72

**Request Body (예시)**

```json
{
  "name": "pallycon-drm-integration-wv",
  "configuration": {
    "version": "1.82",
    "chunking": {
      "period": 2
    },
    "assets": {
      "first_file": {
        "uri": "s3://pallycon-titan@s3.ap-northeast-2.amazonaws.com/titan-qa-test/bbb_480p.mp4",
        "audio_composition": "mono"
      }
    },
    "inputs": [
      {
        "video": {
          "input_1": {
            "asset": "first_file"
          }
        },
        "audio": {
          "input_en": [
            {
              "asset": "first_file"
            }
          ]
        }
      }
    ],
    "track_configurations": {
      "avc": {
        "video_1": {
          "quality_speed": "ultrafast"
        }
      },
      "aac": {
        "audio_1": {}
      }
    },
    "tracks": {
      "video": {
        "video_1": {
          "configuration": "avc.video_1",
          "input": {
            "id": "video.input_1"
          }
        }
      },
      "audio": {
        "audio_1": {
          "configuration": "aac.audio_1",
          "input": {
            "id": "audio.input_en"
          }
        }
      }
    },
    "outputs": {
      "cmaf": {
        "first_hls": {
          "output": "s3://pallycon-titan@s3.ap-northeast-2.amazonaws.com/titan-qa-test/output/widevine/demo_pallycon_cpix-w.cmaf",
          "playlists": {
            "hls": {
              "HLS_Playlist_1": {
                "default_audio_track": "1",
                "profiles": {
                  "Profile 1": {
                    "tracks": [
                      "audio_1",
                      "video_1"
                    ]
                  }
                }
              }
            },
            "dash": {
              "DASH_Playlist_1": {
                "enable_segment_timeline": true,
                "tracks": [
                  "video_1",
                  "audio_1"
                ]
              }
            }
          },
          "profile": "live",
          "drms": {
            "manual": {
              "drm1": {
                "system_id": "widevine",
                "key": "af6b6f562085d36decd6d693f7e0e784",
                "key_id": "1a3a1b8d-8617-18c8-247e-908f2e436c8a",
                "pssh": "AAAAUXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAADESEBo6G42GFxjIJH6Qjy5DbIoaDGlua2FlbnR3b3JrcyIJdGl0YW5maWxlSPPGiZsG"
              },
              "drm2": {
                "system_id": "playready",
                "pssh": "AAACYnBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAkJCAgAAAQABADgCPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMwAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAUwA+ADwASwBJAEQAIABBAEwARwBJAEQAPQAiAEEARQBTAEMAQgBDACIAIABWAEEATABVAEUAPQAiAGoAUgBzADYARwBoAGUARwB5AEIAZwBrAGYAcABDAFAATABrAE4AcwBpAGcAPQA9ACIAPgA8AC8ASwBJAEQAPgA8AC8ASwBJAEQAUwA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAaQBjAGUAbgBzAGUALgBwAGEAbABsAHkAYwBvAG4ALgBjAG8AbQAvAHIAaQAvAGwAaQBjAGUAbgBzAGUATQBhAG4AYQBnAGUAcgAuAGQAbwA8AC8ATABBAF8AVQBSAEwAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==",
                "key": "af6b6f562085d36decd6d693f7e0e784",
                "key_id": "1a3a1b8d-8617-18c8-247e-908f2e436c8a"
              },
              "drm3": {
                "system_id": "fairplay",
                "key": "af6b6f562085d36decd6d693f7e0e784",
                "initialization_vector": "30313233343536373839616263646566",
                "key_uri": "skd://GjobjYYXGMgkfpCPLkNsig==",
                "key_id": "1a3a1b8d-8617-18c8-247e-908f2e436c8a"
              }
            }
          },
          "tracks": {
            "audio_1": {
              "media_playlist_path": "${OUTPUT_BASE_URL}/${TRACK_NAME}.m3u8",
              "id": "audio.audio_1",
              "drms": [
                "drm1"
              ]
            },
            "video_1": {
              "media_playlist_path": "${OUTPUT_BASE_URL}/${TRACK_NAME}.m3u8",
              "id": "video.video_1",
              "drms": [
                "drm1"
              ]
            }
          }
        }
      }
    }
  }
}
```

### 참고 사항

- 하나의 스트림에 PlayReady와 Widevine 동시 적용(DRM Type: Multi-DRM)이 가능한 TITAN Live와 달리, TITAN File의 VOD 패키징은 하나의 작업 당 한 가지 DRM만 적용 가능합니다.
- FairPlay DRM 적용 시 IV 값을 정확히 입력해야 하며, FairPlay 명세 상에는 키 ID가 사용되지 않지만 TITAN File 연동 시 해당 입력 값을 비워두면 에러가 발생합니다.
- HLS Output의 경우 `HLS Version` 항목을 6 이상으로 지정해야 합니다.