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 파일을 아래 링크에서 다운로드할 수 있습니다. (우클릭 후 다른 이름으로 저장)

전체 예제 JSON 파일

연동 방법

1. 서비스 가입 및 키 획득

PallyCon 서비스 가입 후 wm key fileaccess 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초의 배수로 지정해야 합니다.

각각 01에 해당하는 워터마크 심볼이 적용된 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 콘텐츠는 세션 매니저 APICDN 연동을 통해 재생 시점에 실시간으로 워터마크를 적용할 수 있습니다. 자세한 사항은 해당 가이드를 참고하시기 바랍니다.

이전