ATEME TITAN 제품 연동 가이드

개요

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

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

사전 요구 사항

  • PallyCon 멀티 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 옵션에는 WidevinePlayReady가 모두 포함됩니다.
  • Key Management Parameter
    • Server Type: Standard CPIX
    • Key Server URL: <KMS 토큰 값을 포함한 PallyCon KMS URL>
    • Content ID: 해당 라이브 스트림 콘텐츠에 대한 임의의 고유 ID를 입력합니다. 영숫자와 -(하이픈), _(밑줄) 문자로 최대 200바이트까지 입력할 수 있습니다.
    • Key ID: <CPIX 요청 데이터의 KID>
KMS URL, KID 등 입력값에 대한 자세한 내용은 CPIX API 가이드를 참고하시기 바랍니다.

출력

  • Ignore SSL errorsEnable 옵션을 체크합니다.
  • 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

https://<ID>:<PW>@<ip address>/api/v1/servicesmngt/services
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 옵션에는 WidevinePlayReady가 모두 포함됩니다.
  • KeyServerParam
    • ContentID: 해당 라이브 스트림 콘텐츠에 대한 임의의 고유 ID를 입력합니다. 영숫자와 -(하이픈), _(밑줄) 문자로 최대 200바이트까지 입력할 수 있습니다.
    • KID: <CPIX 요청 데이터의 KID>
    • ScramblerKeyServerUrl: <KMS 토큰 값을 포함한 PallyCon KMS URL>
    • ServerType: Standard CPIX
{
  "DRMType": "Multi-DRM",
  "IVSize": "16 Bytes",
  "InternalKeySettings": {},
  "KeyServerParam": {
    "ContentID": "titanlive",
    "KID": "44bf0b6d-e751-4afb-a687-568eaec911d5",
    "KeyDuration": 0,
    "ScramblerKeyServerUrl": "https://kms.pallycon.com/v2/cpix/pallycon/getKey/eyJhY2Nlc3Nfa2V5IjoiZHNJb2xjN2gxRzhUVW1JMTdiWXd4aFV1TkZvRmNlNzJjeDllTU9rNjJ3YjhWTjJQZGdwV1lISXhTRVg5ZjBIaSIsInNpdGVfaWQiOiJERU1PIn0=",
    "ServerType": "Standard CPIX",
    "SslParameters": {
      "SslClientCertificate": {
        "Name": "filename",
        "UseCertificate": false
      },
      "SslPeerCertificate": {
        "Authority": "Default authority",
        "Name": "filename",
        "VerifyCertificate": false
      }
    }
  },
  "SetKeyServer": true,
  "WriteKey": false
}
KMS URL, KID 등 입력값에 대한 자세한 내용은 CPIX API 가이드를 참고하시기 바랍니다.

라이브 스트림 시작 및 재생

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

  1. 웹 GUI SERVICES 탭 또는 REST API 응답에 새 서비스가 나열되어 있는지 확인합니다.
  2. GUI의 재생 버튼을 클릭하거나 API 호출을 통해 스트리밍을 시작합니다.

작업이 실패한 경우 ALARMS 탭에서 오류 로그를 확인할 수 있습니다.

  1. 출력 스트리밍 서버를 구성하여 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: 사용하지 않는 옵션입니다.

다음 단계에서 작업 생성 시 입력하는 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 Typemanual로 선택하고, 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>
암호화 키, 키 ID, PSSH 데이터 등의 입력 값은 PallyCon CPIX API를 호출해 획득해야 합니다. API 규격과 샘플 코드 등의 정보는 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

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

Request Body

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

Response Body (예시)

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

작업 생성 및 실행

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

API URI

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

Request Header

  • Content Type: application/json
  • Authorization: <토큰 유형> <인증 토큰 값>
    • 예: Bearer e042a836c751224ca4c689d63bbd471e49a73ab7e4a7ff6e29c7496be09f8c72

Request Body (예시)

{
  "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 이상으로 지정해야 합니다.
이전