PallyCon Distributor Watermarking 가이드

개요

PallyCon Distributor Watermarking 제품(이하 DWM)은 여러 채널로 배포된 비디오 콘텐츠가 불법 유출된 경우에 해당 유출 채널을 추적하기 위한 워터마크 솔루션입니다.

PallyCon DWM은 원본 영상에 배포할 채널의 정보를 눈에 보이지 않는 워터마크의 형태로 임베딩하고, 유출된 영상 또는 단일 프레임 캡쳐본으로부터 해당 워터마크 정보를 검출할 수 있습니다. 또한 보이지 않는 워터마크 정보 외에 눈에 보이는 워터마크도 영상에 추가할 수 있습니다.

PallyCon DWM의 워터마크 임베딩에 사용되는 CLI(Command Line Interface) 도구는 다음과 같습니다.

  • DWM PreEmbedder: 메자닌(Mezzanine) 또는 MP4 형식 파일에 배포 채널 워터마크를 적용할 때 사용됩니다.

이는 프리 릴리즈 워크플로우에서의 안전한 콘텐츠 배포를 위해 쉽게 통합될 수 있습니다.

본 문서는 DWM PreEmbedder 3.4.0 버전을 기준으로 작성되었습니다.

동영상 튜토리얼

콘텐츠에 PallyCon Distributor Watermarking을 적용하는 방법을 설명하는 영상입니다.

DWM 워크플로우

PallyCon DWM PreEmbedder는 아래와 같은 워크플로우를 통해 적용할 수 있습니다.

PallyCon DWM Workflow
PallyCon DWM Workflow
  1. 원본 영상을 배포될 채널의 정보와 함께 DWM PreEmbedder에 입력합니다.
  2. PallyCon DWM 서버는 DWM PreEmbedder와의 연동을 통해 각 채널마다 고유의 DWM ID를 발급합니다.
  3. DWM PreEmbedder는 배포될 채널의 갯수만큼 각각 고유의 DWM ID가 임베딩된 영상을 생성합니다.
  4. 배포 채널마다 해당 DWM 영상을 전달합니다.
  5. 콘텐츠 유출 발생 시, 유출본을 PallyCon 서비스에 전달해 워터마크 검출을 요청합니다.
  6. PallyCon 서비스는 유출본에서 워터마크(DWM ID)를 검출해 해당 채널 정보를 고객사에 전달합니다.

DWM 지원 사양

PallyCon DWM 솔루션은 아래와 같은 사양을 지원합니다.

항목 내용 비고
콘텐츠 유형 비디오 콘텐츠 지원
영상 컨테이너 및 코덱 MP4(H.264, H.265, VP9), MOV(ProRes, XDCAM), MXF(XDCAM)
지원 해상도 최대 4K/UHD 해상도 지원
Dynamic Range SDR (Standard Dynamic Range), HDR (High Dynamic Range) 지원
DWM ID 크기 PallyCon DWM 서비스 Plan에 따라 상이
최소 영상 길이 워터마크 검출을 위해서는 최소 30초 이상의 연속된 녹화 영상이 필요 원본 영상 길이가 30초 미만인 경우에는 적용 불가
검출 영상 화질 검출을 위해서는 최소 480p 1Mbps 이상 화질 필요 720p 이상의 화질 권장
단일 프레임 검출 단일 프레임 캡쳐본에서의 워터마크 검출 지원 검출 작업에 원본 프레임 필요 (Non-blind detection)

수신 대상 등록

DWM 임베딩과 검출을 위해서는 워터마크 적용된 콘텐츠를 수신할 대상을 미리 등록해야 합니다. 수신 대상은 PallyCon DWM 서비스 Plan에 따라 상이하며, 최소 요금제에서는 최대 1000개, 그 이상의 요금제에서는 1000개 이상의 수신 대상을 등록할 수 있습니다. 등록 순으로 각 수신자에 대한 일련번호가 DWM ID로 부여됩니다.

DWM 수신자를 등록하려면 PallyCon 콘솔의 Distributor Watermarking 메뉴에서 DWM 수신자 항목을 선택합니다. 등록 버튼을 눌러 전환된 화면에서 수신자 명과 설명을 입력해 수신 대상을 등록할 수 있습니다. (여러 항목 등록 시 + 버튼 클릭)

DWM PreEmbedder를 통한 워터마크 임베딩 시, 작업 정보에 수신 대상의 이름을 입력하면 해당 수신자의 ID(일련 번호)가 출력 영상에 워터마크 정보로 임베딩됩니다.

DWM 임베딩

PallyCon DWM PreEmbedder는 리눅스 CLI(Command Line Interface) 기반의 DWM 임베딩 툴로, 원본 영상과 DWM ID 정보를 입력받아 해당 ID가 임베딩된 DWM 영상을 출력합니다.

DwmEmbedder 실행 파일을 단독으로 사용 시에는 PallyCon 서버와의 연동 없이 DWM ID와 배포 채널 정보에 대한 관리를 고객사에서 직접 처리해야 합니다. 서버 연동을 위해서는 해당 실행 파일과 함께 배포되는 Python 스크립트를 통해 DWM 임베딩을 수행합니다.

모듈 구성

PallyCon DWM PreEmbedder는 PallyCon 서비스 가입 후 별도 요청을 통해 받을 수 있으며, 다음과 같이 구성되어 있습니다.

  • DwmEmbedder: 아래 Python 스크립트가 실행하는 코어 모듈 실행 파일입니다. 원본 영상에 배포 대상 채널 별로 고유의 워터마크(DWM ID)를 임베딩합니다. 이 파일을 직접 실행하여 생성된 영상은 유출 시 검출이 불가능합니다.

  • DwmPreEmbedder.py: DwmEmbedder와 PallyCon 서버 사이의 통신 연동을 담당하는 Python 스크립트입니다. DWM 임베딩 작업은 위 코어 모듈을 직접 실행하는 대신 이 스크립트를 통해 수행해야 합니다.

  • dwm_info.json: DWM ID를 임베딩할 원본 영상과 출력 파일, 수신 대상 등의 작업 정보를 입력하는 파일입니다.

  • 각종 라이브러리 파일: ‘lib’ 폴더 내에는 DWM Embedder에서 사용되는 각종 라이브러리가 있습니다.

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

DWM PreEmbedder 사용 권한을 포함한 DWM 상용 플랜 가입 후에는 데모버전 키 대신 헬프데스크를 통한 별도 요청으로 전달받은 상용 키(dwmkey.dat) 파일을 사용합니다.

실행 환경

DWM PreEmbedder를 실행하려면 다음과 같은 환경이 필요합니다.

하드웨어

소프트웨어

  • 우분투 서버 18.04, 20.04 또는 CentOS 7
  • Intel IPP (Integrated Performance Primitives) 2021 (배포본 내에 포함되어 있음)
  • NVIDIA CUDA Toolkit 11.1 이상 (NVIDIA 하드웨어 가속 사용)
  • 각종 연관 라이브러리

설치 가이드

NVIDIA CUDA 툴킷 설치

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

DWM Embedder 제품은 CUDA Toolkit 11.1 이상에서 동작합니다. 아래 스크립트는 CUDA Toolkit 11.1을 설치합니다. 다른 CUDA Toolkit 버전을 설치해야 하는 경우 최신 다운로드 또는 아카이브를 참고하시기 바랍니다.

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

  • Ubuntu 18.04 및 20.04용 설치 스크립트

    $ distribution=$(. /etc/os-release;echo $ID$VERSION_ID|tr -d '.')
    $ wget https://developer.download.nvidia.com/compute/cuda/repos/${distribution}/x86_64/cuda-${distribution}.pin
    $ sudo mv cuda-${distribution}.pin /etc/apt/preferences.d/cuda-repository-pin-600
    $ wget https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda-repo-${distribution}-11-1-local_11.1.1-455.32.00-1_amd64.deb
    $ sudo dpkg -i cuda-repo-${distribution}-11-1-local_11.1.1-455.32.00-1_amd64.deb
    $ sudo apt-key add /var/cuda-repo-${distribution}-11-1-local/7fa2af80.pub
    $ sudo apt-get update
    $ sudo apt-get -y install cuda
    $ rm cuda-repo-${distribution}-11-1-local_11.1.1-455.32.00-1_amd64.deb
    $ sudo reboot
    
  • CentOS 7용 설치 스크립트

    $ wget https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda-repo-rhel7-11-1-local-11.1.1_455.32.00-1.x86_64.rpm
    $ sudo rpm -i cuda-repo-rhel7-11-1-local-11.1.1_455.32.00-1.x86_64.rpm
    $ sudo yum clean all
    $ sudo yum -y install nvidia-driver-latest-dkms cuda
    $ sudo yum -y install cuda-drivers
    $ rm cuda-repo-rhel7-11-1-local-11.1.1_455.32.00-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
    $ sudo apt install -y python3 python3-pip
    $ python3 -m pip install requests
    
  • Ubuntu 20.04

    $ sudo apt update
    $ sudo apt install -y \
          libnuma1 \
          libva-drm2 \
          libvdpau1 \
          libmediainfo0v5 \
          libpng16-16
    $ sudo apt install -y python3 python3-pip
    $ python3 -m pip install requests
    
  • CentOS 7

    $ sudo yum update
    $ sudo yum install -y \
          openssl-devel \
          libpng-devel \
          libmediainfo-devel
    $ sudo yum install -y python3 python3-pip
    $ python3 -m pip install requests
    

DWM PreEmbedder 사용 방법

위 설치 과정을 통해 준비된 실행 환경에서 DWM PreEmbedder 배포본의 압축을 해제한 후, bin 폴더에 관련 파일들(코어 모듈, Python 스크립트, dwm_info.json, 키 파일 등)이 있는지 확인 합니다. 그 후 다음과 같은 과정으로 DWM PreEmbedder를 실행해 원본 영상에 DWM ID를 임베딩할 수 있습니다.

credentials 파일 생성

DWM 서버와 통신하려면 PallyCon 회원 가입 시 발급되는 사이트 ID, 사이트 키, 액세스 키 정보가 필요합니다. 이 값들을 다음의 형식으로 ~/.pallycon/credentials 파일로 저장합니다.

site_id=YOUR_SITE_ID
site_key=YOUR_SITE_KEY
access_key=YOUR_ACCESS_KEY

credentials 파일에 입력할 실제 값들은 PallyCon 콘솔 로그인 후 Distributor Watermarking > DWM 세팅 화면에서 확인할 수 있습니다.

작업 파일 생성

아래 예시와 설명을 참고로 DWM 작업 정보 파일인 dwm_info.json 파일을 업데이트합니다.

{
  "account_id": "your_account_id",
  "content_id":"contentid_test",
  "input": "input.mp4",
  "output": "output.mp4",
  "visible_watermark": {
    "type": "none",
    "image": {
      "filename": "watermark.png"
    },
    "alpha": 0.3,
    "position": [
      { "x": 200, "y": 100},
      { "x": 300, "y": 200}
    ],
    "timing": {
      "interval": "00:05:00",
      "disappear": "00:01:00"
    }
  },
  "recipients": [
      "수신자 1",
      "수신자 2",
      "수신자 3"
  ]
}
  • account_id: PallyCon 콘솔의 계정 ID를 입력합니다.
  • content_id: 원본 콘텐츠에 대한 고유 ID를 입력합니다.
  • input: DWM을 임베딩할 원본 파일명을 입력합니다.
  • output: DWM이 임베딩된 결과 파일명을 입력합니다.
    • 실제 생성되는 결과 파일명에는 지정한 파일명 뒤에 배포 정보(recipient name, DWM ID)가 추가됩니다.
  • visible_watermark: 결과 영상에 눈에 보이는 워터마크를 추가합니다. (선택 사항)
    • 보이지 않는 DWM ID 정보 외에 눈에 보이는 이미지 워터마크를 영상에 표시할 수 있습니다.
    • Visible Watermark 기능을 적용하지 않는 경우에는 해당 키워드와 하위 항목들을 입력하지 않습니다.
    • 입력 가능한 상세 옵션은 아래 별도로 설명된 내용을 참고하시기 바랍니다.
  • recipients: 수신자 목록을 입력합니다.
    • DWM 적용된 영상을 수신할 수신 대상을 입력합니다.
    • 사전에 PallyCon 콘솔에서 등록한 수신자 이름만 입력 가능합니다.

위 작업 정보는 Python 스크립트를 통해 DWM 서버 API에 전송되며, 서버로부터 회신된 DWM ID는 DWM Embedder 코어 모듈을 통해 보이지 않는 워터마크의 형태로 결과 영상에 임베딩됩니다.

DWM PreEmbedder Python 스크립트 실행

DWM 트라이얼 중에는 상용 버전 키 파일 대신 배포본에 포함된 데모용 키 파일(demokey.dat)이 사용됩니다. 이 경우 다음과 같이 dwm_info.json 파일명과 함께 --demo 파라미터를 추가해 실행합니다.

$ python3 DwmPreEmbedder.py dwm_info.json --demo

DWM 상용 플랜에 가입한 후에는 헬프데스크 요청을 통해 상용 키 파일(dwmkey.dat)을 전달 받아 bin 디렉토리, 즉 DwmEmbedderWithServer.py와 동일한 위치로 복사합니다. 상용 버전은 다음과 같이 --demo 파라미터를 제외하고 실행합니다.

$ python3 DwmPreEmbedder.py dwm_info.json

Visible Watermark 설정 (선택 사항)

DWM PreEmbedder는 기본적으로 배포 채널 별로 고유한 DWM ID를 눈에 보이지 않게 영상에 임베딩합니다. 영상에 추가로 눈에 보이는 워터마크를 입력하기 원하는 경우, dwm_info.json 파일의 visible_watermark 항목에 다음과 같은 옵션을 설정할 수 있습니다. Visible Watermark는 하나만 지정할 수 있습니다. 두 개 이상의 이미지를 사용하거나, 워터마크를 동시에 두 곳 이상에 표시되도록 할 수 없습니다.

키워드 타입 필수 여부 설명 예시
type String Y Visible Watermark의 유형. “image” 지정 시 아래 설정에 따라 이미지 삽입. “none” 지정 시 Visible Watermark를 삽입하지 않음 “type”: “image”
image Object Y 이미지 워터마크 관련 설정
filename String Y 워터마크로 표시될 이미지 경로 “filename”: “watermark.png”
alpha Float N 워터마크의 투명도. 1.0(불투명) ~ 0.01(투명) 사이 값 입력 (기본값: 1.0) “alpha”: 0.5
position Object 배열 N 워터마크 표시 위치 설정. 배열로 여러 값을 입력 시, Interval에 의해 화면에 표시될 때마다 새로운 위치로 설정됨
x, y Integer N 화면 상에서 워터마크가 표시될 위치를 X, Y 좌표로 지정 (기본값: 0.0) [{“x”: 200, “y”: 100}]
timing Object N Visible Watermark 표시 및 숨기기 주기
interval String N ‘HH:MM:SS’의 포맷으로 워터마크가 새로 표시될 주기를 설정 (기본값: 무한, 즉 반복 없음) “interval”: “00:05:00” 입력 시, 5분마다 워터마크가 새로 표시되고 disappear 값 이후 사라짐
disappear String N ‘HH:MM:SS’의 포맷으로 워터마크 표시 후 사라질 때까지의 시간 (기본값: 사라지지 않음) “disappear”: “00:01:00” 입력 시, 워터마크 표시된 후 1분 뒤에 사라짐

이미지 최대 넓이는 화면 넓이의 5%입니다. 이미지 크기가 5%를 초과하는 경우, 자동으로 조절되지 않고 삽입에 실패합니다. 만약 영상이 1920x1080 px인 경우, 300x300 px (4.34%), 500x200 px (4.82%) 이미지는 삽입가능하지만 400x300 px (5.79%), 1000x110 px (5.3%) 이미지는 삽입할 수 없습니다.

이미지는 잘린 부분 없이 모두 화면 안에 위치해야합니다. 설정으로 인하여 이미지 일부가 잘리게 될 경우, 화면 끝에 맞추어 강제로 안쪽으로 이동됩니다.

예시와 같이 "interval": "00:05:00", "disappear": "00:01:00"로 설정할 경우, 워터마크 표시 후 1분 후 사라지는 과정이 5분마다 반복됩니다. 즉, 1분간 표시 후 4분간 표시되지 않는 것을 반복하여 5분짜리 주기로 동작합니다.

"interval" 없이 "disappear"만 설정할 경우, 워터마크는 한번 표시 후 사라지고 다시 표시되지 않습니다. 즉, 초기 1회에 일정 시간동안만 표시하도록 할 수 있습니다. 또한 Visible Watermark는 동시에 두 곳에 표시될 수 없으므로, "interval"보다 "disappear"가 길 경우 "disappear"에 의해 워터마크가 사라지기 전에 "interval"에 의해 워터마크가 기존 위치에서 사라지고 새 위치에서 표시됩니다. 따라서 이 경우 "disappear"는 무시됩니다. "disappear"가 0인 경우에도 무시됩니다.

애플 ProRes 코덱의 제약으로 인해, 현재 ProRes 코덱이 사용된 비디오 파일에는 DWM의 Visible watermark 기능을 적용할 수 없습니다. 해당 기능에 대한 지원이 필요한 경우에는 헬프데스크로 별도 문의해 주시기 바랍니다.

DWM 작업 이력 조회

Python 스크립트를 통한 연동으로 서버에 전송된 DWM 임베딩 정보는 PallyCon 콘솔에서 조회 가능합니다.

Distributor Watermarking > 패키징 이력 조회 화면에서 dwm_info.json 작업 파일에 입력한 수신 대상 정보를 조회할 수 있습니다.

DWM 임베딩 작업 에러 코드

에러 코드 상태
0 성공
1 확인 안된 오류
2 메모리 부족
10 사용자에 의한 정지
30 액세스 키 검증 실패
31 키 파일이 존재하지 않음
40 입력 파일명 오류
41 입력 파일이 존재하지 않음
42 출력 파일명 오류
43 출력 디렉토리가 존재하지 않음
50 영상 입력 스트림 열기 실패
51 영상 출력 스트림 열기 실패
52 출력 트랙 쓰기 실패
53 비디오 출력 트랙 쓰기 실패
54 비디오 트랙이 없는 영상이 입력됨
100 설정 오류
150 임베더 초기화 실패
151 정상적이지 않은 심벌이 입력됨
200 인코더 라이브러리 찾기 실패
201 디코더 라이브러리 찾기 실패
210 디코더 디바이스 초기화 실패
220 지원되지 않는 코덱
230 Visible Watermark가 설정되었으나 설정값이 입력되지 않음
231 Visible Watermark 설정이 올바르지 않음
232 Visible Watermark 이미지가 존재하지 않음
233 Visible Watermark 이미지가 올바르지 않음
234 Visible Watermark 이미지가 너무 크거나 작음
301 설정파일이 올바르지 않음
302 credentials 파일이 존재하지 않음
303 credentials 파일이 올바르지 않음
304 credentials 내 일부 데이터가 올바르지 않음
305 DWM 작업 정보 파일이 존재하지 않음
306 DWM 작업 정보 파일이 올바르지 않음
307 Account ID가 설정되지 않음
308 Content ID가 설정되지 않음
309 입력 파일 이름이 설정되지 않음
310 출력 파일 이름이 설정되지 않음
311 recipients 목록이 설정되지 않음
312 입력 파일이 존재하지 않음
313 입출력 파일명 형식이 올바르지 않음
314 입출력 파일의 확장자가 상이함
315 출력 파일 경로가 올바르지 않음
316 코어 실행 파일(DwmEmbedder)이 존재하지 않음
321 서버 통신이 초기화 되지 않음
322 서버 통신 파라미터가 올바르지 않음
323 서버 요청 형식이 올바르지 않음
324 서버 응답 형식이 올바르지 않음
325 서버가 응답하지 않음
326 서버 응답 정보가 올바르지 않음
331 DWM PreEmbedder 내부 상태가 올바르지 않음
401 확인 안된 오류

DWM 검출

DWM이 적용된 영상이 유출되어 불법 배포되는 경우, 유출이 의심되는 영상에 대한 워터마크 검출을 PallyCon 서비스에 요청할 수 있습니다. DWM 검출을 요청하려면 PallyCon 콘솔의 DWM 검출 요청 페이지에서 해당 영상의 제목과 다운로드 링크를 입력해 요청을 등록합니다.

워터마크 검출은 영상의 각 프레임을 분석하여 원본 워터마크 패턴을 감지하고, 임베딩 시 사용한 비밀 키로 데이터를 해독합니다. 검출 과정을 통해 영상에서 DWM ID를 찾아내면, 데이터베이스에서 해당 ID를 키 값으로 하는 배포 채널(수신자) 정보를 찾아 검출 결과로 리포트합니다.

DWM이 적용된 영상의 단일 프레임이 불법 유포되는 경우 당사의 검출 서비스를 이용하여 워터마크를 검출할 수 있지만, 이 경우 논블라인드 기반 검출을 위해 워터마크 적용 전의 원본 영상이 필요합니다.

워터마크 검출을 위해서는 최소 30초 이상의 연속된 녹화 영상이 필요합니다. PallyCon DWM 제품은 리사이징을 비롯한 각종 공격에 대한 강인성을 가지고 있지만, 실제 워터마크의 검출율은 검출에 사용되는 영상의 화질(해상도, 비트레이트, 흔들림 등)에 따라 달라질 수 있습니다. 검출에 필요한 최소 사양은 480p 1Mbps 이상이며, 일반적으로 720p 이상의 영상에 대해서는 대부분 검출이 가능합니다.

DWM 검출 워크플로우

sequenceDiagram
    participant A as 서비스 사이트
    participant B as PallyCon 서비스
    A ->> B: 유출 의심 영상
    Note right of B: DWM ID 검출
    B -->> B: 영상 프레임 분석
    opt DWM ID 검출 시
    Note right of B: DWM 데이터베이스
    B -->> B: 해당 배포 채널(수신자) 검색
    end
    B ->> A: 검출 결과 리포트

DWM 검출 관련 상세 안내는 별도로 문의해 주시기 바랍니다.

문의하기

이전
다음