FWM Hybrik 전처리기 가이드
개요
PallyCon FWM Hybrik 전처리기는 Dolby Hybrik 서비스를 통한 동영상 트랜스코딩 과정에서 포렌식 워터마킹 전처리를 수행할 수 있는 모듈입니다.
전처리기 모듈이 적용된 Hybrik 인코더를 통해 A/B 버전 (0/1 버전) mp4 영상을 만들어내고 각각의 파일을 DASH 또는 HLS로 패키징할 수 있습니다. 포렌식 워터마크와 DRM을 모두 적용하는 경우, Hybrik DRM 연동 가이드를 참고해 CPIX API를 통한 DRM 패키징도 함께 적용할 수 있습니다.
sequenceDiagram
participant A as 콘텐츠 서비스 사이트<br>(고객사)
participant B as 고객사 S3 스토리지
participant C as 고객사 EC2 인스턴스<br>(Hybrik 실행)
participant D as Dolby Hybrik 콘솔<br> 또는 API
participant E as PallyCon 서비스
A ->> D: AWS Credential 등록 (S3, EC2 권한 부여)
A ->> B: 원본 영상 업로드
A ->> D: 트랜스코딩/패키징 작업 등록
D ->> C: Hybrik 인스턴스 생성
B ->> C: 원본 영상 복사
C -->> C: 인코딩/트랜스코딩
Note right of C: A/B 전처리 (FWM<br> Hybrik 전처리기)
C -->> C: DASH/HLS 패키징
opt 멀티DRM 적용
C ->> E: 암호화 키 요청 (CPIX 연동)
E ->> C: 암호화 키 전달
C -->> C: 콘텐츠 암호화
end
C ->> B: 전처리 및 패키징 결과물
Note right of B: DASH / HLS 콘텐츠<br>(각각 A/B 두 벌)
Dolby Hybrik 미디어 프로세싱 서비스에 대한 자세한 정보와 가이드는 아래 링크들을 참고하시기 바랍니다.
샘플 다운로드
연동 방법
에서 설명된 전체 설정에 대한 예제 JSON 파일을 아래 링크에서 다운로드할 수 있습니다. (우클릭 후 다른 이름으로 저장)
연동 방법
1. 서비스 가입 및 키 획득
PallyCon 서비스 가입 후 wm key file
과 access key
를 획득합니다.
2. FWM 전처리기 인증 정보 설정
FWM 전처리기의 인증 정보를 다음과 같이 설정합니다.
{
"definitions": {
...
"wm_key_file_base64": "yxFNjptzCUNHE5d/gJ5g+fWZHi0XUFuZxHuFD0ycQCZvuVpQUMZO79OqVat5VMp9gZIRTrC63Lf3otykHBL9sVyEDr3jAqDnEBXD9JPiNne9bFf1k1hH1hUiIrj1YeYRtfNVdDstmC2JMBzApHdGjGPSRBE=",
"wm_access_key": "FOR_INKA_FORENSIC_WATERMARK_TEST",
...
},
...
}
데모
모드 예시이며, FWM 상용 플랜에 가입한 후에는 1단계에서 발급되는 값을 사용해야 합니다.
3. 인코딩 및 FWM 전처리기 설정
Hybrik에서 FWM 전처리기를 사용하려면 트랜스코딩 작업의 일부 영상 속성을 다음과 같이 지정해야 합니다.
target/container/kind: "fmp4"
target/container/segment_duration_sec: 2
target/video/codec: "h264"
또는"h265"
target/video/use_scene_detection: false
target/video/use_closed_gop: true
지원 사양에 따라 다음 FPS를 지원하며, FPS별로 target/video/idr_interval/frames
를 다음과 같이 지정해야 합니다.
FPS | target/video/idr_interval/frames |
---|---|
23.976, 24 | 48 |
25 | 50 |
29.97, 30 | 60 |
47.952, 48 | 96 |
50 | 100 |
59.94, 60 | 120 |
세그먼트 랜더링을 사용할 때에도 "duration_sec"
은 IDR 길이에 따라 2초, 혹은 2.002초의 배수로 지정해야 합니다.
각각 0
과 1
에 해당하는 워터마크 심볼이 적용된 A/B 버전 파일을 생성해야 하므로, 동일한 원본 영상에 대하여 트랜스코딩을 두 번 수행해야 합니다. 이 때, Akamai CDN과 호환되도록 반드시 B
버전 (심볼 1) 파일명은 A
버전 (심볼 0) 파일명 앞에 b.
가 추가된 형태, 즉 b.<A 버전 파일명>
이어야만 합니다. (Unlabeled A variant 방식)
다음은 A 버전 파일명이 "{source_basename}{default_extension}"
인 경우의 예시입니다. 해당 파일명은 예시와 다른 값으로 변경 가능하지만, 이 경우 B 버전 파일명도 동일하게 변경 후 맨 앞에 b.
을 추가해야 합니다.
A
버전 (심볼 0) 파일명 -target/file_pattern: "{source_basename}{default_extension}"
B
버전 (심볼 1) 파일명 -target/file_pattern: "b.{source_basename}{default_extension}"
또한 0
또는 1
심볼을 전처리하기 위하여 FWM 전처리 플러그인을 연결한 후 아래 속성들을 지정합니다.
target/video/filters/kind: "plugin_docker"
target/video/filters/payload/docker_image/image_urn: "public.ecr.aws/pallycon/wm_plugin_pub:latest"
target/video/filters/payload/docker_image/registry/kind: "ecr"
target/video/filters/payload/config/wm_key_file_base64: "{{wm_key_file_base64}}"
target/video/filters/payload/config/wm_access_key: "{{wm_access_key}}"
target/video/filters/payload/config/wm_fwm_symbol: 0
또는1
다음은 위 내용을 적용한 FWM 전처리 설정 예시입니다.
{
...,
"payload": {
"elements": [
...,
{
"uid": "transcode_video_wm0_task",
"kind": "transcode",
"payload": {
...,
"targets": [
{
...,
"container": {
"kind": "fmp4",
"segment_duration_sec": "2"
},
"video": {
...,
"use_scene_detection": false,
"use_closed_gop": true,
"frame_rate": "30000/1001",
"idr_interval": {
"frames": 60
},
"filters": [
{
"kind": "plugin_docker",
"payload": {
"docker_image": {
"image_urn": "public.ecr.aws/pallycon/wm_plugin_pub:latest",
"registry": {
"kind": "ecr"
}
},
"config": {
"wm_key_file_base64": "{{wm_key_file_base64}}",
"wm_access_key": "{{wm_access_key}}",
"wm_fwm_symbol": 0
}
}
}
]
},
...
}
]
}
},
{
"uid": "transcode_video_wm1_task",
"kind": "transcode",
"payload": {
...,
"targets": [
{
...,
"container": {
"kind": "fmp4",
"segment_duration_sec": "2"
},
"video": {
...,
"use_scene_detection": false,
"use_closed_gop": true,
"frame_rate": "30000/1001",
"idr_interval": {
"frames": 60
},
"filters": [
{
"kind": "plugin_docker",
"payload": {
"docker_image": {
"image_urn": "public.ecr.aws/pallycon/wm_plugin_pub:latest",
"registry": {
"kind": "ecr"
}
},
"config": {
"wm_key_file_base64": "{{wm_key_file_base64}}",
"wm_access_key": "{{wm_access_key}}",
"wm_fwm_symbol": 1
}
}
}
]
},
...
}
]
}
}
],
...
}
}
4. DASH / HLS 패키징 설정
생성된 A/B 버전 mp4 파일을 각각 DASH 및 HLS로 패키징합니다. 패키징 시 다음 사항에 유의해야 하며 기타 사항은 HLS and DASH Packaging Tutorial을 참고하시기 바랍니다.
- A/B 버전 미디어 세그먼트들은 동일한 디렉토리에 위치해야 합니다.
- 미디어 재생 시 사용자는 A 버전 매니페스트를 재생해야 하며, B 버전 매니페스트를 재생하면 안됩니다. 패키징 시 B 버전 매니페스트가 A 버전 매니페스트를 덮어쓰지 않도록 주의하세요. 이를 위하여 B 버전 매니페스트 파일의 위치와 이름을 A 버전 매니페스트와 상이하게 하고 패키징 후 삭제하는 것이 좋습니다.
- A 버전 매니페스트를 재생할 것이므로, 오디오는 A 버전에만 포함시키면 됩니다.
segmentation_mode
는 반드시segmented_mp4
또는segmented_ts
여야만 합니다.
5. 작업 연결
트랜스코딩 작업과 패키징 작업을 연결합니다. A 버전(0)
의 트랜스코딩 결과물은 A 버전 DASH/HLS 패키징으로, B 버전(1)
의 결과물은 B 버전 패키징으로 각각 연결해야 합니다.
위에서 예시로 든 작업을 연결하면 다음과 같습니다.
{
{
...,
"connections": [
{
"from": [
{
"element": "source"
}
],
"to": {
"success": [
{
"element": "transcode_video_wm0_task"
},
{
"element": "transcode_video_wm1_task"
},
{
"element": "transcode_audio_task"
}
]
}
},
{
"from": [
{
"element": "transcode_video_wm0_task"
},
{
"element": "transcode_audio_task"
}
],
"to": {
"success": [
{
"element": "dash_seg_mp4_wm0"
},
{
"element": "hls_seg_ts_wm0"
}
]
}
},
{
"from": [
{
"element": "transcode_video_wm1_task"
}
],
"to": {
"success": [
{
"element": "dash_seg_mp4_wm1"
},
{
"element": "hls_seg_ts_wm1"
}
]
}
}
]
}
}
6. 작업 시작 및 결과 확인
위 과정을 통해 설정한 트랜스코딩 및 패키징 작업을 Hybrik 콘솔 또는 API를 통해 실행합니다. 해당 작업의 결과물은 출력 스토리지로 지정한 S3 버킷에서 확인할 수 있습니다.
다음 단계
Hybrik 전처리기 연동을 통해 생성된 A/B(0/1) 버전의 DASH 또는 HLS 콘텐츠는 세션 매니저 API와 CDN 연동을 통해 재생 시점에 실시간으로 워터마크를 적용할 수 있습니다. 자세한 사항은 해당 가이드를 참고하시기 바랍니다.