FWM CLI 패키져 가이드

PallyCon FWM CLI 패키져는 인코딩된 MP4 동영상을 대상으로 워터마크 전처리와 DRM 패키징을 수행하는 CLI(Command Line Interface) 기반 툴입니다.

고객사에서 자체적으로 구축한 온프레미스 또는 클라우드 서버에서 구동되며, mp4 원본 영상을 워터마크 전처리(0/1 버전 생성)가 적용된 스트리밍 콘텐츠로 만들어냅니다.

sequenceDiagram
    participant A as 인코더
    participant B as 패키징 서버
    participant C as CDN
    A ->> B: 인코딩된 MP4
    Note right of B: FwmPreprocessor
    B -->> B: 워터마크 전처리
    opt 멀티DRM 적용
    Note right of B: PallyConPackager
    B -->> B: 콘텐츠 패키징/암호화
    end
    Note right of B: ABComposer
    B -->> B: 파일명/폴더 재구성
    B ->> C: 패키징 결과물
    Note right of C: DASH / HLS 콘텐츠<br>(각각 A/B 두 벌)

모듈 구성

PallyCon FWM CLI 패키져는 워터마킹 서비스 가입 후 별도 요청을 통해 받을 수 있으며, 다음과 같이 구성되어 있습니다.

  • FwmPreprocessor: 각각 ‘0’ 또는 ‘1’로 마크된 두 개의 콘텐츠 파일을 만듭니다. 예를 들어, 입력 콘텐츠가 ‘A.mp4’일 때 ‘A_0.mp4’와 ‘A_1.mp4’를 생성합니다. 생성된 두 벌의 콘텐츠는 각각 PallyCon 패키져를 이용해 DASH/HLS 스트리밍 콘텐츠로 패키징할 수 있습니다.

  • fmkeyDemo.dat: 워터마크 전처리에 사용되는 데모버전 키 파일로, 트라이얼 계정에서의 테스트에 사용됩니다. 데모키로 전처리된 영상에는 보이지 않는 포렌식 워터마크 외에도 ‘PALLYCON DEMO’라는 문구가 눈에 보이게 표시됩니다.

  • PallyConPackager: 전처리된 0/1 버전 mp4 파일에 대하여 DASH/HLS 패키징과 DRM 암호화를 수행합니다.

  • ABComposer: PallyConPackager에 의해 패키징된 파일들을 CDN 연동이 가능하도록 재구성합니다.

  • FwmCliPackager.py: 하나의 명령으로 위에 나열된 툴들을 순차적으로 호출해 통합 실행해 주는 파이선 스크립트 파일입니다.

  • 각종 라이브러리 파일: lib 폴더 내에는 FWM CLI 패키져에서 사용되는 각종 라이브러리가 있습니다.

실행 환경

FWM CLI 패키져를 실행하려면 다음과 같은 환경이 필요합니다.

하드웨어

AWS GPU 인스턴스 성능

  • Geforce GTX1050 (데스크탑, 파스칼) « P2 (테슬라 K80) « P3 (테슬라 V100), G3 (테슬라 M60)
  • AWS EC2 인스턴스를 워터마크 전처리용 서버로 사용시, GPU 가속 기능을 위해 P3 또는 G3 유형의 인스턴스를 권장합니다.

소프트웨어

  • 우분투 서버 18.04, 20.04 또는 CentOS 7
  • Intel IPP (Integrated Performance Primitives) 2018 (배포본 내에 포함되어 있음)
  • NVIDIA CUDA Toolkit 9.1 이상 (NVIDIA 하드웨어 가속 사용)
  • 각종 연관 라이브러리
  • Python 3.7 이상
FWM CLI 패키져는 지원되는 각각의 리눅스 배포판과 버전에 따라 서로 다른 바이너리로 빌드됩니다. (예: 전달받은 패키져 배포본의 파일명이 pallycon-fwm-cli-packager-v1.0-ubuntu1804 인 경우 Ubuntu 18.04만 지원됨)
PallyCon 팀에 해당 제품을 요청할 때 사용하실 OS와 버전을 알려주셔야 하며, 위에 명시된 지원 OS 이외의 환경에 대해서는 별도 개발이 필요하거나 지원이 불가능할 수 있습니다.

설치 가이드

NVIDIA CUDA 툴킷 설치

FWM CLI 패키져 제품은 NVIDIA 하드웨어 인코딩/디코딩 가속을 지원합니다. 지원되는 GPU 및 코덱은 여기에서 확인할 수 있습니다.

FWM CLI 패키져 제품은 CUDA Toolkit 9.1 이상에서 동작하지만, 다른 프로그램과의 호환성 문제가 없는 경우 CUDA 10.0 이상의 버전을 권장합니다. 아래 스크립트는 CUDA Toolkit 10.0을 설치합니다. 다른 CUDA Toolkit 버전을 설치해야 하는 경우 최신 다운로드 또는 아카이브를 참고하시기 바랍니다.

다음과 같은 스크립트를 실행하여 NVIDIA CUDA 툴킷을 설치합니다.

  • Ubuntu 18.04 버전 설치 스크립트

    $ distribution=$(. /etc/os-release;echo $ID$VERSION_ID|tr -d '.')
    $ wget https://developer.download.nvidia.com/compute/cuda/repos/${distribution}/x86_64/cuda-repo-${distribution}_10.0.130-1_amd64.deb
    $ sudo dpkg -i cuda-repo-${distribution}_10.0.130-1_amd64.deb
    $ sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/${distribution}/x86_64/7fa2af80.pub
    $ sudo apt-get update
    $ sudo apt-get install -y linux-headers-$(uname -r)
    $ sudo apt-get install -y cuda-10-0
    $ rm cuda-repo-${distribution}_10.0.130-1_amd64.deb
    $ sudo reboot
    
  • CentOS 7 버전 설치 스크립트

    $ sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
    $ wget https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-repo-rhel7-10.0.130-1.x86_64.rpm
    $ sudo rpm -i cuda-repo-rhel7-10.0.130-1.x86_64.rpm
    $ sudo yum clean all
    $ sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)
    $ sudo yum install cuda-10-0
    $ rm cuda-repo-rhel7-10.0.130-1.x86_64.rpm
    $ sudo reboot
    
  • AWS Linux2 버전 설치 스크립트

  • 설치 후 확인

    $ nvidia-smi
    
  • 참고 자료

의존성 라이브러리 설치

  • Ubuntu 18.04 버전

    $ sudo apt update
    $ sudo apt install -y \
            libva-drm2 \
            libvdpau1 \
            libmediainfo0v5 \
            libpng16-16
    
  • Ubuntu 20.04 버전

    $ sudo apt update
    $ sudo apt install -y \
            libnuma1 \
            libva-drm2 \
            libvdpau1 \
            libmediainfo0v5 \
            libpng16-16
    
  • CentOS 7 버전

    $ sudo yum update
    $ sudo yum install -y \
            openssl-devel \
            libpng-devel \
            libmediainfo-devel
    

FWM CLI 패키져 사용 방법

압축 파일의 bin 폴더 내 FwmCliPackager.py 파일을 아래와 같은 형식의 명령으로 실행합니다.

$ python3 FwmCliPackager.py -i INPUT_FILE -o OUTPUT_DIR [optional parameters]
FwmPreprocessor에서 공용 라이브러리 경로와 관련된 에러 발생 시, PATH 환경 변수에 LD_LIBRARY_PATH 를 설정해야 합니다. 상세 내용은 압축파일에 포함된 FwmPreprocessor.sh 파일을 참고하시기 바랍니다.

파라미터 목록

파라미터 설명 예시 비고
-i FWM 패키징할 원본 비디오 파일 경로 -i ~/fwm/input.mp4 필수 파라미터. ABR 콘텐츠의 경우 여러 해상도 파일을 모두 입력
-o 최종 결과물이 출력될 경로 -o ~/fwm/output 필수 파라미터. --demo가 입력된 경우는 출력 경로 뒤에 _demo가 추가됨
--fmkey_file 배포본에 포함된 트라이얼용 시드 키(fmkeyDemo.dat) 대신 별도로 전달 받은 상용 시드 키 파일을 설정 --fmkey_file fmkey.dat FWM 트라이얼 중이거나 상용 시드 키 파일(fmkey.dat)을 FwmPreprocessor와 동일 디렉토리에 저장한 경우에는 생략 가능.
--access_key 서비스 인증 용 액세스 키 --access_key QSTO...2zE7 PallyCon 콘솔 사이트의 연동 설정에 표시된 액세스 키 값 입력. FWM 상용 고객 또는 DRM 암호화까지 수행하는 경우에는 필수 입력.
--preprocessing_only FWM 전처리(A/B 버전 영상 생성)만 수행하고 패키징은 처리하지 않음 포함된 CLI Packager가 아닌 별도의 서드파티 패키저를 이용하는 경우에 사용
--demo 데모 모드(FWM 트라이얼) 활성화 포렌식 워터마킹 서비스에 상용 가입 전에는 필수 입력
--keep 전처리 및 패키징 과정의 중간 결과물을 삭제하지 않음
-y 삭제되지 않은 중간 결과물이 있을 경우에 해당 파일들을 사용하지 않고 덮어씀 -y 파라미터 생략 시에는 덮어쓰기 여부를 물어보고 진행
-h, -v 각각 FWMCliPackager의 도움말 또는 버전 정보를 출력
CLI 패키저 파라미터 DASH/HLS 패키징과 DRM 암호화에 관련된 파라미터 --site_id SITE --content_id CID --dash --hls 상세 내용은 아래 설명 참조
FWM CLI 패키져를 이용해 DASH/HLS 패키징과 DRM 암호화를 처리하는 경우, PallyCon 멀티DRM CLI 패키저의 파라미터들을 FwmCliPackager.py 스크립트의 파라미터로 추가 입력합니다. 해당 가이드에 명시된 모든 파라미터를 사용 가능하며, --access_key 파라미터와 값은 FWM 전처리기에서도 공통으로 사용됩니다.

실행 예제

워터마크 전처리 + Non-DRM DASH/HLS 패키징

아래 명령은 데모(트라이얼) 워터마크 전처리가 적용되고 DRM 암호화는 적용되지 않은 DASH, HLS 결과물을 생성합니다.

$ python3 FwmCliPackager.py -i ~/fwm/input.mp4 -o ~/fwm/output --demo --dash --hls --disable_encryption

포렌식 워터마킹 상용 서비스를 이용 중인 경우에는 --demo 파라미터를 제외하고 입력합니다. (상용 시드 키 fmkey.dat 파일을 실행파일과 동일한 디렉토리에 저장한 경우)

워터마크 전처리 + DRM 패키징

아래 명령은 상용 버전 워터마크 전처리와 DRM 패키징이 적용된 DASH, HLS 결과물을 생성합니다. (상용 키 파일 경로 수동 지정 시)

$ python3 FwmCliPackager.py -i ~/fwm/input.mp4 -o ~/fwm/output --fmkey_file ~/fwm/fmkey.dat --access_key YOUR_ACCESS_KEY --dash --hls --site_id YOUR_SITE_ID --content_id UNIQUE_CONTENT_ID

ABR(Adaptive Bitrate) 콘텐츠의 경우에는 아래와 같이 여러 해상도와 비트레이트의 원본 파일들을 -i 파라미터로 입력합니다.

$ python3 FwmCliPackager.py -i ~/fwm/input_hd.mp4 ~/fwm/input_sd.mp4 -o ~/fwm/output-abr --fmkey_file ~/fwm/fmkey.dat --access_key YOUR_ACCESS_KEY --dash --hls --site_id YOUR_SITE_ID --content_id UNIQUE_CONTENT_ID

워터마크 전처리만 수행

상용으로 전처리된 A/B 버전 영상들을 별도의 서드파티 솔루션으로 패키징하기 원하는 경우, 다음과 같은 명령을 실행합니다. 결과물 디렉토리에는 원본 파일명 뒤에 _0_1이 추가된 두 개의 mp4 파일이 생성됩니다.

$ python3 FwmCliPackager.py -i ~/fwm/input.mp4 -o ~/fwm/output --access_key YOUR_ACCESS_KEY --preprocessing_only

외부 키 입력 방식 DRM 패키징

상용 워터마킹 전처리와 외부 키 입력 방식 DRM 패키징을 수행하는 경우, 다음과 같은 명령을 실행합니다.

$ python3 FwmCliPackager.py -i ~/fwm/input.mp4 -o ~/fwm/output --access_key YOUR_ACCESS_KEY --dash --hls --content_id UNIQUE_CONTENT_ID --enable_raw_key_encryption --keys label=:key_id=16BYTE_HEX_STRING:key=16BYTE_HEX_STRING
외부 키 입력 외에도 다양한 PallyCon CLI Packager의 옵션들을 파라미터로 입력해 적용할 수 있습니다. 자세한 사항은 해당 가이드를 참고하시기 바랍니다.

CDN 연동 관련 패키징 옵션

FWM CLI 패키져에 의해 DASH 또는 HLS 형태로 패키징된 워터마크 콘텐츠는 CDN 엣지의 워터마크 삽입 처리를 통해 실시간으로 조합되어 사용자에게 전달됩니다. 기본적으로 FWM CLI 패키져는 A/B 버전의 세그먼트 파일들 중에 B버전 파일명에 별도 레이블을 추가하는 ‘Unlabeled A variant’ 방식의 콘텐츠를 생성하며, 해당 콘텐츠는 Akamai CDN 또는 최신 버전(v2.3 이상) PallyCon FWM Lambda@Edge Embedder가 적용된 Amazon CloudFront CDN과 연동이 가능합니다.

v2.2.2 이전의 Lambda@Edge Embedder가 적용된 CloudFront에 연동하기를 원하는 경우에는 FwmCliPackager.py 스크립트의 FwmCliPackager 클래스에 정의된 cdnpack_option 항목을 아래와 같이 수정한 후에 실행해야 합니다. (0/1 별도 디렉토리로 분리된 두 벌 콘텐츠 생성)

self.cdnpack_option = {"type": "aws"}
다음