PallyCon Wowza DRM 플러그인 가이드
개요
PallyCon Wowza DRM 플러그인
은 Wowza Streaming Engine
의 확장 모듈로, 원본 MP4 영상 또는 라이브 스트림을 실시간으로 DRM 패키징해 DASH(CENC)와 HLS(FPS, NCG) 콘텐츠로 스트리밍 서비스를 할 수 있도록 지원하는 제품입니다.
Wowza Streaming Engine에 대한 자세한 소개와 PallyCon Wowza DRM 플러그인에 대한 데모는 아래 링크들을 참고하시기 바랍니다.
- Wowza Streaming Engine 웹사이트 : https://www.wowza.com/products/streaming-engine
- Wowza 실시간 패키징 데모 페이지 : https://sample.pallycon.com/drm/wowza
Wowza DRM 플러그인 연동에 필요한 라이브러리 파일은 Github 저장소에서 다운 받으시기 바랍니다.
본 문서는 Wowza Streaming Engine 설치 후에 PallyCon Wowza DRM 플러그인을 적용하는 방법을 설명합니다.
요구 사항
- Wowza Streaming Engine 4.8.21 이후 버전
- Java 버전: Open JDK 11 이상
스트리밍 프로토콜 및 DRM 지원
- DASH-CENC: Widevine, PlayReady DRM
- HLS-SampleAES: FairPlay Streaming DRM
- CMAF-CENC: Widevine, PlayReady DRM (아래 정보 참조)
- HLS-AES128: NCG DRM
Wowza Streaming Engine은 현재 CMAF 패키징을 위한 CBCS 암호화 모드를 지원하지 않습니다. 따라서 CBCS 모드가 필요한 FairPlay DRM에는 Wowza CMAF 패키징을 사용할 수 없습니다.
Wowza 측에서 CMAF HLS 패키징에 대한 지원을 공식적으로 발표하지는 않았지만, CMAF DASH와 HLS 패키징 모두 CTR 모드(CENC)에서는 정상적으로 작동합니다.
연동 워크플로우
- 원본 콘텐츠 업로드
- Wowza 스트리밍 서버와 연동된 스토리지에 원본 MP4 콘텐츠를 업로드합니다. Adaptive Streaming을 위해서는 해상도 별 MP4 파일들과 SMIL 파일을 업로드합니다.
- 라이브 스트림을 서비스하는 경우에는 라이브 방식으로 생성된 Wowza 애플리케이션에 해당 라이브 소스를 설정합니다.
- 동영상 재생 요청
- 클라이언트(HTML5 플레이어 또는 모바일 애플리케이션)에서 DASH(mpd) 또는 HLS(m3u8) 방식의 스트리밍 URL을 통해 스트리밍 재생을 요청합니다.
- 패키징 키 정보 요청
- 실시간 패키징에 필요한 키 정보를 PallyCon 클라우드 서버에 요청합니다. 키 정보 요청 시 원본 MP4 파일 또는 라이브 스트림 이름에 해당하는 콘텐츠 ID(CID) 값을 매핑 파일 형태로 지정할 수 있습니다.
- 실시간 패키징
- PallyCon 클라우드에서 받은 키 정보를 이용하여 원본 콘텐츠를 DASH 또는 HLS 포맷으로 패키징합니다.
- DRM 라이선스 발급
- 클라이언트는 암호화된 스트리밍 콘텐츠의 재생에 필요한 키를 PallyCon 클라우드 서버에 요청하며, PallyCon 클라우드 서버는 라이선스 연동을 통해 확인된 클라이언트에게 키 정보를 전달합니다.
Wowza 및 플러그인 모듈 설치
Wowza Application 생성
고객사에서 관리하는 실시간 스트리밍용 서버에 Wowza Streaming Engine
을 설치합니다. 웹 브라우저로 해당 Wowza Streaming Engine Manager
주소에 접속 후, Applications
탭에서 Wowza 스트리밍 애플리케이션을 생성합니다. VoD 또는 라이브 방식의 애플리케이션을 선택할 수 있으며, 두 가지 방식을 모두 이용하는 경우 각각의 애플리케이션을 별도로 생성해 설정해야 합니다.
라이브러리 설치
압축 해제한 PallyCon Wowza DRM 플러그인의 /lib
폴더의 라이브러리 파일들을 /[WOWZA_HOME]/lib/
폴더에 복사합니다. (파일명 내 숫자는 플러그인의 버전에 따라 변경됨)
- pallycon-cpix-client-java-x.x.x-jar-with-dependencies.jar
- pallycon-wowza-cpix-x.x.x.jar
- pallycon-wowza-cpix-ncg-x.x.x.jar
pallycon-wowza-cpix-ncg-x.x.x.jar
파일과 관련 설정을 제거할 수 있습니다.
Wowza Application 환경 설정
웹 브라우저를 통해 Wowza Streaming Engine Manager
를 이용하거나, /[WOWZA_HOME]/conf/[APPLICATION]/Application.xml
파일을 직접 수정해 PallyCon 플러그인 관련 설정을 추가합니다. 멀티 DRM(PlayReady, Widevine, FPS)용 Wowza 애플리케이션과 NCG DRM 애플리케이션은 아래와 같이 별도로 생성하여 설정해야 합니다.
멀티 DRM 패키징 설정
멀티 DRM 패키징 연동을 위해서는 해당 Wowza Application을 아래와 같이 설정합니다.
멀티DRM용 Application module 추가
<Modules>
...
<Module>
<!-- add property -->
<!-- Settings for MPEG-DASH(Widevine, PlayReady), HLS(FairPlayStream) -->
<Name>DrmModule</Name>
<Descript>Multi DRM CPIX Module</Descript>
<Class>com.pallycon.wowza.DrmModule</Class>
<Description></Description>
</Module>
</Modules>
멀티DRM용 Application property 추가
<Properties>
...
<!-- add property -->
<Property>
<Name>cupertinoEncryptionAPIBased</Name>
<Value>true</Value>
<Type>Boolean</Type>
</Property>
<Property>
<Name>KmsUrl</Name>
<!-- pallycon kms v2 url-->
<Value>https://kms.pallycon.com/v2/cpix/pallycon/getKey/{enc-token}</Value>
</Property>
</Properties>
enc-token
: KMS URL의 사용자 인증을 위해 PallyCon 서비스 계정에 발급되는 KMS 토큰값 (PallyCon 콘솔 사이트에서 확인)
라이브 스트림 패키징 시 키 로테이션을 적용하려면 위 V2 규격 KMS URL에 key-rotation=true
파라미터를 추가해야 합니다. 키 로테이션이 적용된 URL의 형태는 다음과 같습니다.
https://kms.pallycon.com/v2/cpix/pallycon/getKey/{enc-token}?key-rotation=true
FairPlay용 HLS 패키징
FairPlay용 Application LiveStreamPacketizer 추가
https://www.wowza.com/docs/how-to-configure-apple-hls-packetization-cupertinostreaming 가이드를 참고해 아래와 같이 설정합니다.
...
<LiveStreamPacketizer>
<Property>
<Name>cupertinoChunkDurationTarget</Name>
<Value>10000</Value>
<Type>Integer</Type>
</Property>
<Property>
<Name>cupertinoMaxChunkCount</Name>
<Value>10</Value>
<Type>Integer</Type>
</Property>
<Property>
<Name>cupertinoPlaylistChunkCount</Name>
<Value>3</Value>
<Type>Integer</Type>
</Property>
<Property>
<Name>cupertinoRepeaterChunkCount</Name>
<Value>-1</Value>
<Type>Integer</Type>
</Property>
<Property>
<Name>cupertinoCalculateChunkIDBasedOnTimecode</Name>
<Value>false</Value>
<Type>Boolean</Type>
</Property>
</LiveStreamPacketizer>
FairPlay Application HTTPStreamer 추가
...
<HTTPStreamer>
<Properties>
<Property>
<Name>cupertinoExtXVersion</Name>
<Value>5</Value>
<Type>Integer</Type>
</Property>
<Property>
<Name>cupertinoAppendQueryParamsToEncUrl</Name>
<Value>false</Value>
<Type>Boolean</Type>
</Property>
</Properties>
</HTTPStreamer>
cupertinoAppendQueryParamsToEncUrl
속성을 false
로 설정해야 합니다.
Session ID 관련 설정
기본적으로 Wowza Streaming Engine은 아래와 같이 HLS 매니페스트의 암호화 URI 값에 스트리밍 세션 ID를 추가합니다.
sdk://content-id?wowzasessionid=30273096
PallyCon 연동을 위해서는 세션 ID가 해당 값에 추가되지 않도록 Wowza 설정을 변경해야 합니다. 위 예제 XML과 같이 cupertinoAppendQueryParamsToEncUrl
속성을 false
로 설정합니다. (참고 링크)
CMAF-CENC 패키징 설정
아래와 같이 Wowza 애플리케이션을 구성하여 PlayReady 및 Widevine DRM을 지원하는 CMAF-CENC 라이브 스트림을 생성할 수 있습니다. 애플 기기에도 서비스를 제공하려는 경우 별도의 Wowza 애플리케이션에서 FairPlay용 HLS 스트림을 설정해야 합니다.
Wowza는 아직 VoD용 CMAF 패키징을 지원하지 않습니다.
LiveStreamPacketizers 설정
속성에 cmafstreamingpacketizer
를 추가합니다. CMAF 스트림만 전송하는 Wowza 애플리케이션의 경우, 다음과 같이 하나의 항목만 입력합니다.
<LiveStreamPacketizers>cmafstreamingpacketizer</LiveStreamPacketizers>
HTTPStreamers 설정
HTTPStreamers 속성의 경우, HLS(cupertinostreaming
)와 MPEG-DASH(mpegdashstreaming
)가 모두 지정되어 있는지 확인합니다.
<HTTPStreamers>mpegdashstreaming, cupertinostreaming</HTTPStreamers>
NCG-HLS 패키징 설정
NCG-HLS 패키징 연동을 위해서는 Wowza 애플리케이션을 별도로 생성하고 아래와 같이 설정합니다.
NCG-HLS 패키징용 모듈 추가
<Modules>
...
<Module>
<Name>NetsyncModule</Name>
<Descript>NCG Module V2</Descript>
<Class>com.pallycon.wowza.ncg.NetsyncModule</Class>
<Description></Description>
</Module>
</Modules>
NCG-HLS 패키징용 프로퍼티 추가
<Properties>
...
<!-- add property -->
<Property>
<Name>cupertinoEncryptionAPIBased</Name>
<Value>true</Value>
<Type>Boolean</Type>
</Property>
<Property>
<Name>KmsUrl</Name>
<!-- pallycon kms v2 url-->
<Value>https://kms.pallycon.com/v2/cpix/pallycon/getKey/{enc-token}</Value>
</Property>
<Property>
<Name>SiteID</Name>
<Value>YOUR_SITE_ID</Value>
</Property>
<Property>
<Name>HLSKeyPackUrl</Name>
<Value>https://kms.pallycon.com/ncg/hlskeyPackager.do</Value>
</Property>
</Properties>
enc-token
: KMS URL의 사용자 인증을 위해 PallyCon 서비스 계정에 발급되는 KMS 토큰값 (PallyCon 콘솔 사이트에서 확인)SiteID
: PallyCon 서비스 계정에 발급된 사이트 ID (네자리 영숫자)HLSKeyPackUrl
: KMS URL과의 통신에 문제가 발생한 경우, 임의로 생성된 키와 NCG 키 URL을 설정하기 위한 정보
콘텐츠 ID(CID) 설정
PallyCon Wowza DRM 플러그인
v2.2.0 부터는 텍스트 방식의 매핑 테이블을 이용한 콘텐츠 ID 설정 기능을 지원합니다.
CID
는 DRM 패키징과 라이선스 요청/발급 과정에서 해당 콘텐츠를 구별하기 위해 사용되는 고유한 ID입니다. 고객사에서 원하는 임의의 값을 입력 가능하며, 주로 CMS(Content Management System)에서 관리하는 콘텐츠 ID 값을 사용합니다. (영숫자, 하이픈, 또는 언더바 문자로 구성된 최대 200자 문자열)
CID 매핑 파일 생성
CID 매핑을 적용할 Wowza 애플리케이션의 경로에 다음과 같은 텍스트 파일을 생성합니다.
/[WOWZA_HOME]/conf/[APPLICATION_NAME]/PallyconStreamMap.txt
생성된 텍스트 파일에 아래와 같이 각 입력 스트림에 대한 CID를 지정합니다.
SOURCE_NAME={"contentId" : "CID_VALUE"}
SOURCE_NAME
: 해당 Wowza 애플리케이션의 원본 영상 이름. VOD인 경우 해당 파일명, 라이브 스트림의 경우는 스트림 명을 입력 (예:sample.mp4
또는sample.stream
)CID_VALUE
: 해당 스트림의 고유한 콘텐츠 ID를 입력
-
여러 항목을 줄바꿈으로 구분해 입력하면 서로 다른 입력 스트림에 대해서 각각 CID를 매핑할 수 있습니다.
-
SOURCE_NAME
값에는 와일드카드 문자(*
)를 입력할 수 있습니다.*
만 입력해 모든 입력 스트림에 대해 동일한 CID를 지정하거나,myStream*
와 같이 접두어가 일치하는 스트림들에 대해서 하나의 CID를 설정할 수도 있습니다. -
CID 매핑 파일을 설정하지 않았거나, 매핑 파일에 입력되지 않은 스트림에 대해서는 해당
StreamName
을 CID로 사용합니다. -
CID 매핑 파일의 수정 사항은 Wowza 애플리케이션을 재시작해야 적용됩니다.
매핑 파일 설정
해당 Wowza 애플리케이션의 Application.xml
파일에 다음과 같이 CID 매핑 설정을 추가합니다.
<Properties>
...
<Property>
<Name>PallyconMapFile</Name>
<Value>PallyconStreamMap.txt</Value>
</Property>
</Properties>
Application 재시작 및 HTTPS URL 적용
환경 설정 완료 후 Wowza 애플리케이션을 재시작하면 설정한 정보로 동작합니다.
참고 : DASH(.mpd) 또는 HLS(.m3u8) URL 등의 모든 스트리밍 관련 URL에는 HTTPS가 필수적으로 적용되어야 합니다. (브라우저 강제 사항)