FWM 전처리 SDK 가이드
개요
PallyCon FWM 전처리 SDK는 인코딩/트랜스코딩 솔루션에 포팅될 수 있도록 C++ 라이브러리 형태로 구현된 워터마크 전처리기입니다. 영상 인코딩 과정에서 직접 워터마크 전처리를 수행하는 방식으로, CLI 전처리기를 이용할 때 필요한 재인코딩 과정을 생략할 수 있습니다.
graph LR;
subgraph 인코더  
A[원본 영상  ] -->|인코딩 대상 프레임  | B(전처리 라이브러리  )
B -->|0, 1 마크된  <br>두 벌 프레임  | C["인코딩 결과물  <br>(0, 1 두 벌 MP4)  "]
end
C --> D(DASH 또는  <br>HLS 패키징  )
subgraph 패키저  
D --> E["패키징 결과물  <br>(0, 1 두 벌)  "]
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
-
워터마크 인스턴스 생성
- 0/1 파일을 전처리하기 위해 워터마크 인스턴스를 생성합니다.
- 참고:
FwmPreprocessSample.cpp::fm_init_watermark()
-
인스턴스 초기화 및 권한 부여
- SDK를 사용하려면 키 파일과 액세스키를 사용하여 인스턴스를 초기화하고 권한을 부여해야 합니다.
- 배포 패키지에는 데모용 키 파일이 포함되어 있습니다. 데모 키 파일과 액세스키를 사용하면 결과 영상 왼쪽 상단에
Pallycon Demo
문자열이 표시됩니다. 정식 서비스를 위한 상용 키를 받으려면 헬프데스크로 문의하시기 바랍니다. - 참고:
FwmPreprocessSample.cpp::fm_init_watermark()
-
워터마크 적용
- SDK는 자체 데이터 구조인
FrameData
를 사용하여 비디오 프레임 데이터를 처리합니다.FrameData
변수를 채우고 이를 사용하여 워터마크를 적용합니다. - 참고:
FwmPreprocessSample.cpp::fm_apply()
,PallyConWatermark.h
- SDK는 자체 데이터 구조인
-
인스턴스 해제
- 워터마크 작업이 완료된 후에는 인스턴스를 해제해야 합니다.
- 참고:
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의 경우 다음과 같이 샘플 애플리케이션을 빌드할 수 있습니다.
- FFmpeg 라이브러리를 설치합니다. 이미 FFmpeg이 설치된 환경에서는 이 단계를 생략할 수 있습니다.
$ sudo apt install -y \
build-essential \
libavformat-dev libavcodec-dev libavutil-dev
- 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