전처리 라이브러리 가이드

PallyCon 워터마킹 전처리 라이브러리는 인코딩/트랜스코딩 솔루션에 포팅될 수 있도록 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 기반의 인코더/트랜스코더에 포팅을 지원하며 기타 상용 솔루션에 적용을 위해서는 해당 솔루션 업체의 작업이 필요합니다. 더 많은 정보가 필요하거나 전처리 라이브러리의 적용을 원하는 업체는 잉카엔트웍스로 문의하시기 바랍니다.

문의하기

지원 환경 및 설정

  • 우분투 16.04, 18.04 또는 CentOS 7
  • FFMPEG 3.4.2 이상
  • Makefile의 ‘YOUR_FFMPEG_PATH’ 항목에 FFMPEG 경로 설정
  • 의존 라이브러리 설치 (Ubuntu 18.04 버전의 경우. 그 외 버전은 해당 ZIP 파일 내 README 파일 참조)
sudo apt-get update
$ sudo apt install -y \
        build-essential \
        libva-drm2 \
        libvdpau1 \
        libmediainfo0v5 \
        libpng16-16

API 목록

- IWatermark* CreatePreprocessor(WatermarkSymbol sym)
  : @return watermark pre-processor instance

- void DestroyWatermark(IWatermark* watermark)
  : destroy watermark instance

- IWatermark::init(const char* fmkeyfile, const char* accesskey)
  : initialize watermark with Keyfile and Access-Key [1]
  : @return FMError

- IWatermark::apply(FrameData* frame)
  : apply watermark
  : @return bool

API 사용 설명

   wm_0 = CreatePreprocessor(WatermarkSymbol_0) [1]
   wm_1 = CreatePreprocessor(WatermarkSymbol_1)
    |
    v
   wm_0->init("./fmkeyDemo.dat", "FOR_INKA_FORENSIC_WATERMARK_TEST") [2]
   wm_1->init("./fmkeyDemo.dat", "FOR_INKA_FORENSIC_WATERMARK_TEST")
    |
    v
 +------------------------------------+
 | FrameData frame0 [3]               |
 | FrameData frame1                   |
 |  |                                 |
 |  v                                 |
 | wm_0->apply(&frame0) [4]           |loop
 | wm_1->apply(&frame1)               |
 |  |                                 |
 |  v                                 |
 | adjust_packet_size(...) [5]        |
 +------------------------------------+
    |
    v
   DestroyWatermark(wm_0)
   DestroyWatermark(wm_1)
    |
    v
   XXXX_0.mp4, XXXX_1.mp4
  
   
   [1] Server Side 0/1 Variant Watermark 방식은 0/1 파일을 조합하여 사용자 정보를 표현합니다. 0/1 파일을 만들기 위해서 인스턴스를 2개 생성합니다.
       - FwmPreprocessSample.cpp::fm_init_watermark()

   [2] Keyfile and Access-Key
       - 라이브러리를 사용하기 위해서는 Keyfile 경로와 Access-Key를 입력해야 합니다.
       - 샘플프로젝트에는 데모용 keyfile이 포함되어 있습니다. 데모용 Key를 사용하면 결과 영상 좌측 상단에 'Pallycon Demo' 문자가 나타나며 다른 기능상의 제약은 없습니다.
       - 상용버전 Keyfile 및 Access-Key를 발급 받으려면 별도 문의해주시기 바랍니다.
       - FwmPreprocessSample.cpp::fm_init_watermark()

   [3] Sample 코드와 같이 FrameData 필드를 세팅합니다.
       - FwmPreprocessSample.cpp::fm_apply(), IWatermark.h

   [4] IWatermark::apply()를 호출하면 워터마크가 삽입됩니다.
       - FwmPreprocessSample.cpp::fm_apply()

   [5] embed 된 0,1 AVPacket의 크기를 일치시킵니다. (선택 사항)
       - FwmPreprocessSample.cpp::fm_adjust_packet_size(), fm_check_filler_data_rbsp()

제약사항

Pallycon Watermark 규격상 다음과 같은 제약사항을 따라야 합니다. 인코더별로 다음 사항을 세팅하는 방법은 상이하며, 본 가이드에서는 libx264를 다루는 경우에 대해서만 설명되어 있습니다.

  1. 인코딩 시 GOP는 60 이어야 합니다.

    • FwmPreprocessSample.cpp::openOutputFile()::enc_ctx->gop_size
    • FwmPreprocessSample.cpp::checkAndUpdateParam()::pCtx->x264_param
  2. 0/1 버전 결과물 파일의 크기가 일치해야 하는 경우, 포함된 모든 AVPacket의 크기가 동일해야 합니다.

    • FwmPreprocessSample.cpp::fm_adjust_packet_size(), fm_check_filler_data_rbsp()
이전
다음