FWM 전처리 SDK 가이드

개요

PallyCon FWM 전처리 SDK는 인코딩/트랜스코딩 솔루션에 포팅될 수 있도록 C/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/C++
  • 샘플 애플리케이션 빌드를 위해서는 FFmpeg 개발용 라이브러리 3.4.2 이상 필요

전처리 API

- iwatermark_t fm_preprocessor_create(FMWatermarkSymbol sym)
  : @return 'sym'을 삽입하는 워터마크 전처리 인스턴스

- void fm_preprocessor_destroy(iwatermark_t wm)
  : 워터마크 인스턴스를 해제합니다.

- FMError fm_preprocessor_init(iwatermark_t wm, const char *fmkeyfile, const char *accesskey)
  : Keyfile, Access-Key를 사용하여 워터마크 인스턴스를 초기화합니다.
  : @return FMError (inkawm.h 파일에 정의)

- int fm_preprocessor_apply(iwatermark_t wm, FMFrameData *frame)
  : 워터마크를 적용합니다.
  : @return 성공 시 0, 실패 시 음수

- int fm_set_fps(iwatermark_t wm, int framerate_num, int framerate_den, int *target_gop)
  : 출력 비디오의 FPS 정보를 설정하고, FPS에 따른 GOP길이를 target_gop에 저장합니다.
  : @return 성공 시 0, 실패 시 음수

API 사용 설명

  iwatermark_t wm_0, wm_1

  wm_0 = fm_preprocessor_create(FMWatermarkSymbol_0)
  wm_1 = fm_preprocessor_create(FMWatermarkSymbol_1) [1]
   |
   v
  fm_preprocessor_init(wm_0, "./fwmkeyfile.dat", "FOR_INKA_FORENSIC_WATERMARK_TEST")
  fm_preprocessor_init(wm_1, "./fwmkeyfile.dat", "FOR_INKA_FORENSIC_WATERMARK_TEST") [2]
  or
  fm_preprocessor_init(wm_0, base64(Keyfile), "FOR_INKA_FORENSIC_WATERMARK_TEST")
  fm_preprocessor_init(wm_1, base64(Keyfile), "FOR_INKA_FORENSIC_WATERMARK_TEST")
   |
   v
  fm_set_fps(wm_0, fps_num, fps_den, &target_gop)
  fm_set_fps(wm_1, fps_num, fps_den, &target_gop) [3]
   |
   v
+-------------- loop [4] --------------+
| FrameData frame0                     |
| FrameData frame1                     |
|  |                                   |
|  v                                   |
| fm_preprocessor_apply(wm_0, &frame0) |
| fm_preprocessor_apply(wm_1, &frame1) |
+--------------------------------------+
   |
   v
  fm_preprocessor_destroy(wm_0)
  fm_preprocessor_destroy(wm_1) [5]
  1. 워터마크 인스턴스 생성
  • 0/1 파일을 전처리하기 위해 워터마크 인스턴스를 생성합니다.
  • 참고: FwmPreprocessSample.cpp::fm_init_watermark()
  1. 인스턴스 초기화 및 권한 부여
  • SDK를 사용하려면 키 파일과 액세스키를 사용하여 인스턴스를 초기화하고 권한을 부여해야 합니다.
  • 배포 패키지에는 데모용 키 파일이 포함되어 있습니다. 데모 키 파일과 액세스키를 사용하면 결과 영상 왼쪽 상단에 Pallycon Demo 문자열이 표시됩니다. 정식 서비스를 위한 상용 키를 받으려면 헬프데스크로 문의하시기 바랍니다.
  • 참고: FwmPreprocessSample.cpp::fm_init_watermark()
  1. FPS 정보 설정 및 GOP 길이 획득
  • 인스턴스에 출력 비디오의 FPS를 설정하고 이에 맞는 GOP 길이를 반환받습니다.
  • 인스턴스 초기화 직후 한 번 호출해야 합니다. 미디어의 FPS를 바꾸거나 영향을 미치지 않습니다.
  • 반환된 GOP길이를 인코더에 설정하여, 출력 비디오가 반드시 이 GOP로 고정되도록 해야합니다.
  • 참고: FwmPreprocessSample.cpp::fmPreprocess()
  1. 워터마크 적용
  • SDK는 자체 데이터 구조인 FrameData를 사용하여 비디오 프레임 데이터를 처리합니다. FrameData 변수를 채우고 이를 사용하여 워터마크를 적용합니다.
  • 참고: FwmPreprocessSample.cpp::fm_apply(), inkawm.h
  1. 인스턴스 인스턴스 해제
  • 워터마크 작업이 완료된 후에는 인스턴스를 해제해야 합니다.
  • 참고: FwmPreprocessSample.cpp::finalize()

제약사항

Pallycon FWM는 다음 제약사항을 반드시 준수해야 합니다. 세부 설정 방법은 인코더에 따라 다르며, 샘플 애플리케이션에는 FFmpeg와 libx264를 이용합니다. libx265/nvenc를 사용하는 경우는 샘플 내의 주석문을 참고하세요.

  1. 다음 FPS만 사용 가능합니다.
  • 23.976, 24, 25, 29.97, 30
  • 47.952, 48, 50, 59.94, 60
  1. GOP는 반드시 fm_set_fps()에서 반환한 값(target_gop)이어야 합니다.
  • AVCodecContext.gop_size = target_gop
    • 참고: FwmPreprocessSample.cpp::openOutputFile()
  • x264-params = "keyint=%d:min-keyint=%d", target_gop, target_gop
    • 참고: FwmPreprocessSample.cpp::checkAndUpdateParam()
  1. GOP는 반드시 closed여야 합니다.
  • x264-params = open-gop=0
    • 참고: FwmPreprocessSample.cpp::checkAndUpdateParam()
  1. FPS는 반드시 고정이어야 합니다.

샘플 애플리케이션

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

주의 사항

아래 명령어는 시스템에 C/C++ 개발 도구 및 FFmpeg 종속성 라이브러리를 설치합니다. 이는 시스템에 영향을 미치므로, 실제 운영 환경에서 설치할 경우에는 주의해야 합니다.

아래 명령어는 Docker Ununtu 20.04 container에서 확인되었습니다. 이는 환경에 따라 정상 실행되지 않을 수도 있습니다. 실행에 문제가 있을 경우 install_dependencies.sh, Makefile을 참고하여 직접 문제를 해결해야 하거나 잉카엔트웍스로 문의하시기 바랍니다.

샘플 빌드

제공받은 SDK 배포파일을 압축해제한 후, 압축해제된 디렉토리 안에서 다음 명령어를 실행합니다.

$ cd sample/
$ ./install_dependencies.sh
$ make

샘플 실행

빌드된 샘플 실행 파일을 이용해 다음 명령을 실행합니다. 데모 키 파일의 이름은 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
이전
다음