FWM 전처리 SDK 가이드

개요

PallyCon FWM 전처리 SDK는 인코딩/트랜스코딩 솔루션에 포팅될 수 있도록 C++ 라이브러리 형태로 구현된 워터마크 전처리기입니다. 영상 인코딩 과정에서 직접 워터마크 전처리를 수행하는 방식으로, CLI 전처리기를 이용할 때 필요한 재인코딩 과정을 생략할 수 있습니다.

graph LR;
    subgraph 인코더 &nbsp
    A[원본 영상 &nbsp] -->|인코딩 대상 프레임 &nbsp| B(전처리 라이브러리 &nbsp)
    B -->|0, 1 마크된 &nbsp<br>두 벌 프레임 &nbsp| C["인코딩 결과물 &nbsp<br>(0, 1 두 벌 MP4) &nbsp"]
    end
    C --> D(DASH 또는 &nbsp<br>HLS 패키징 &nbsp)
    subgraph 패키저 &nbsp
    D --> E["패키징 결과물 &nbsp<br>(0, 1 두 벌) &nbsp"]
    end

기본적으로 FFMPEG 기반의 인코더/트랜스코더에 포팅을 지원하며 기타 상용 솔루션에 적용을 위해서는 해당 솔루션 업체의 작업이 필요합니다. 더 많은 정보가 필요하거나 전처리 SDK의 적용을 원하는 업체는 잉카엔트웍스로 문의하시기 바랍니다.

문의하기

지원 환경

  • OS: Ubuntu 18.04, 20.04 또는 CentOS 7
  • 개발언어: C++11
  • 샘플 애플리케이션 빌드를 위해서는 FFMPEG 3.4.2 이상 필요

전처리 API

- PallyConForensicWatermark* CreatePallyConForensicWatermark()
  : @return watermark pre-processor instance

- void DestroyPallyConWatermark(PallyConForensicWatermark* watermark)
  : destroy watermark instance

- FMError PallyConForensicWatermark::Init(const char* fwmkeyfile, const char* accesskey)
  : initialize watermark with Keyfile and Access-Key
  : @return FMError defined in FMError.h

- bool PallyConForensicWatermark::Apply(FrameData* frame0, FrameData* frame1)
  : apply watermark
  : @return bool

API 사용 설명

  wm = CreatePallyConForensicWatermark() [1]
   |
   v
  wm->Init("./fwmkeyfile.dat", "FOR_INKA_FORENSIC_WATERMARK_TEST") [2]
  or
  wm->Init(base64(Keyfile), "FOR_INKA_FORENSIC_WATERMARK_TEST")
   |
   v
+----------- loop [3] -----------+
| FrameData frame0               |
| FrameData frame1               |
|  |                             |
|  v                             |
| wm->Apply(&frame0, &frame1)    |
+--------------------------------+
   |
   v
  DestroyPallyConWatermark(wm) [4]
   |
   v
  XXXX_0.mp4, XXXX_1.mp4
  1. 워터마크 인스턴스 생성

    • 0/1 파일을 전처리하기 위해 워터마크 인스턴스를 생성합니다.
    • 참고: FwmPreprocessSample.cpp::fm_init_watermark()
  2. 인스턴스 초기화 및 권한 부여

    • SDK를 사용하려면 키 파일과 액세스키를 사용하여 인스턴스를 초기화하고 권한을 부여해야 합니다.
    • 배포 패키지에는 데모용 키 파일이 포함되어 있습니다. 데모 키 파일과 액세스키를 사용하면 결과 영상 왼쪽 상단에 Pallycon Demo 문자열이 표시됩니다. 정식 서비스를 위한 상용 키를 받으려면 헬프데스크로 문의하시기 바랍니다.
    • 참고: FwmPreprocessSample.cpp::fm_init_watermark()
  3. 워터마크 적용

    • SDK는 자체 데이터 구조인 FrameData를 사용하여 비디오 프레임 데이터를 처리합니다. FrameData 변수를 채우고 이를 사용하여 워터마크를 적용합니다.
    • 참고: FwmPreprocessSample.cpp::fm_apply(), PallyConWatermark.h
  4. 인스턴스 해제

    • 워터마크 작업이 완료된 후에는 인스턴스를 해제해야 합니다.
    • 참고: FwmPreprocessSample.cpp::finalize()

제약사항

Pallycon Watermark 규격상 인코딩 시 GOP는 60이어야 합니다. GOP를 설정하는 방법은 인코더 별로 상이하며, 아래 내용은 FFMPEG의 libx264를 이용하는 경우에 해당됩니다.

  • FwmPreprocessSample.cpp::openOutputFile(), enc_ctx->gop_size
  • FwmPreprocessSample.cpp::checkAndUpdateParam(), pCtx->x264_param

libx265/nvenc 코덱에 대한 안내는 샘플 소스의 주석을 참고하시기 바랍니다.

샘플 애플리케이션

FFmpeg 라이브러리를 사용하여 SDK를 테스트할 수 있는 간단한 데모 소스 코드, 키 파일 및 액세스키를 제공합니다.

샘플 빌드

Ubuntu 18.04의 경우 다음과 같이 샘플 애플리케이션을 빌드할 수 있습니다.

  1. FFmpeg 라이브러리를 설치합니다. 이미 FFmpeg이 설치된 환경에서는 이 단계를 생략할 수 있습니다.
$ sudo apt install -y \
       build-essential \
       libavformat-dev libavcodec-dev libavutil-dev
  1. Makefile의 5행에서 YOUR_FFMPEG_PATH를 FFmpeg 라이브러리 경로로 설정합니다. 대부분의 경우 /usr/lib/x86_64-linux-gnu입니다.
  • Ubuntu 18.04, 20.04
    YOUR_FFMPEG_PATH = /usr/lib/x86_64-linux-gnu
    
  • CentOS 7
    //Makefile 5번 줄 수정
    YOUR_FFMPEG_PATH = /usr
    
    //19번 줄 수정
    CXXFLAGS += -I$(YOUR_FFMPEG_PATH)/include/ffmpeg/
    

샘플 실행

빌드된 샘플 실행 파일을 이용해 다음 명령을 실행합니다. 데모 키 파일의 이름은 demokey.dat이며 SDK와 함께 배포됩니다. 데모 액세스 키는 고정 문자열 FOR_INKA_FORENSIC_WATERMARK_TEST입니다.

$ LD_LIBRARY_PATH=./lib ./FwmPreprocessSample your_own_input.mp4 your_own_output.mp4 demokey.dat FOR_INKA_FORENSIC_WATERMARK_TEST
이전
다음