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. Hybrik 전처리기 모듈 요청

PallyCon 서비스 가입 후 헬프데스크를 통해 Hybrik 전처리 연동을 위한 도커 이미지 정보를 요청합니다.

2. 전처리기 도커 이미지 연결 설정

1단계에서 획득한 Hybrik 전처리기 모듈의 도커 이미지 URL을 Hybrik 트랜스코딩 작업에 적용합니다.

Hybrik에서 도커 이미지를 사용하는 자세한 방법은 Hybrik 도커 튜토리얼 페이지를 참고하시기 바랍니다. 다음은 Amazon Elastic Container Registry(이하 Amazon ECR)을 사용한 경우의 전역 변수 설정 예시입니다.

  • Amazon ECR
    {
      "definitions": {
        ...
        "awsecr_image_urn": "<your_aws_iam_id>.dkr.ecr.<your_region>.amazonaws.com/<your_image_name:tag>",
        ...
      },
      ...
    }
    

3. FWM 전처리기 인증 정보 설정

FWM 전처리기의 인증 정보를 다음과 같이 설정합니다.

{
  "definitions": {
    ...
    "wm_key_file_base64": "yxFNjptzCUNHE5d/gJ5g+fWZHi0XUFuZxHuFD0ycQCZvuVpQUMZO79OqVat5VMp9gZIRTrC63Lf3otykHBL9sVyEDr3jAqDnEBXD9JPiNne9bFf1k1hH1hUiIrj1YeYRtfNVdDstmC2JMBzApHdGjGPSRBE=",
    "wm_access_key": "FOR_INKA_FORENSIC_WATERMARK_TEST",
    ...
  },
  ...
}
위 예시는 트라이얼을 위한 데모 모드 예시이며, FWM 상용 플랜에 가입한 후에는 PallyCon 계정 별로 별도 발급되는 값을 사용해야 합니다.

4. 도커 이미지 연결 및 FWM 전처리기 설정

Hybrik에서 FWM 전처리기를 사용하려면 트랜스코딩 작업의 일부 영상 속성을 다음과 같이 지정해야 합니다.

  • target/container/kind: "fmp4"
  • target/container/segment_duration_sec: 1
  • target/video/use_scene_detection: false
  • target/video/use_closed_gop: true
  • target/video/idr_interval/frames: 60

각각 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: "{{awsecr_image_urn}}"
  • 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

다음은 Amazon ECR을 사용한 경우의 도커 이미지 연결 및 FWM 전처리기 설정 예시입니다.

  • Amazon ECR
    {
      ...,
      "payload": {
        "elements": [
          ...,
          {
            "uid": "transcode_video_0_task",
            "kind": "transcode",
            "payload": {
              ...,
              "targets": [
                {
                  ...,
                  "container": {
                    "kind": "fmp4",
                    "segment_duration_sec": "1"
                  },
                  "video": {
                    ...,
                    "use_scene_detection": false,
                    "use_closed_gop": true,
                    "idr_interval": {
                      "frames": 60
                    },
                    "filters": [
                      {
                        "kind": "plugin_docker",
                        "payload": {
                          "docker_image": {
                            "image_urn": "{{awsecr_image_urn}}",
                            "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_1_task",
            "kind": "transcode",
            "payload": {
              ...,
              "targets": [
                {
                  ...,
                  "container": {
                    "kind": "fmp4",
                    "segment_duration_sec": "1"
                  },
                  "video": {
                    ...,
                    "use_scene_detection": false,
                    "use_closed_gop": true,
                    "idr_interval": {
                      "frames": 60
                    },
                    "filters": [
                      {
                        "kind": "plugin_docker",
                        "payload": {
                          "docker_image": {
                            "image_urn": "{{awsecr_image_urn}}",
                            "registry": {
                              "kind": "ecr"
                            }
                          },
                          "config": {
                            "wm_key_file_base64": "{{wm_key_file_base64}}",
                            "wm_access_key": "{{wm_access_key}}",
                            "wm_fwm_symbol": 1
                          }
                        }
                      }
                    ]
                  },
                  ...
                }
              ]
            }
          }
        ],
        ...
      }
    }
    

Docker Hub를 사용할 경우, 도커 이미지 연결 관련 부분만 다음과 같이 변경합니다.

  • Docker Hub
    {
                          ...,
                          "docker_image": {
                            "image_urn": "{{dockerhub_image_urn}}",
                            "registry": {
                              "kind": "dockerhub",
                              "access": {
                                "username": "{{dockerhub_id}}",
                                "password": "{{dockerhub_passwd}}"
                              }
                            }
                          },
                          ...
    }
    

5. DASH / HLS 패키징 설정

생성된 A/B 버전 mp4 파일을 각각 DASH 및 HLS로 패키징합니다. 패키징 시 다음 사항에 유의해야 하며 기타 사항은 HLS and DASH Packaging Tutorial을 참고하시기 바랍니다.

  • A/B 버전 미디어 세그먼트들은 동일한 디렉토리에 위치해야 합니다.
  • 사용자가 미디어 재생 시에는 A 버전 매니페스트로 재생해야 하며, B 버전 매니페스트를 재생하면 안됩니다. 이를 위하여 B 버전 매니페스트 파일의 위치만 미디어 세그먼트와 동일하도록 지정합니다.
  • segmentation_mode는 반드시 segmented_mp4 또는 segmented_ts여야만 합니다.

다음은 DASH / HLS 패키징 설정 예시입니다. (우클릭 후 다른 이름으로 저장)

패키징 설정 예제 JSON 파일

6. 작업 연결

트랜스코딩 작업과 패키징 작업을 연결합니다. A 버전(0)의 트랜스코딩 결과물은 A 버전 DASH/HLS 패키징으로, B 버전(1)의 결과물은 B 버전 패키징으로 각각 연결해야 합니다.

위에서 예시로 든 작업을 연결하면 다음과 같습니다.

{
  {
    ...,
    "connections": [
      {
        "from": [
          {
            "element": "source"
          }
        ],
        "to": {
          "success": [
            {
              "element": "transcode_video_0_task"
            },
            {
              "element": "transcode_video_1_task"
            }
          ]
        }
      },
      {
        "from": [
          {
            "element": "transcode_video_0_task"
          }
        ],
        "to": {
          "success": [
            {
              "element": "dash_seg_mp4_0"
            },
            {
              "element": "hls_seg_ts_0"
            }
          ]
        }
      },
      {
        "from": [
          {
            "element": "transcode_video_1_task"
          }
        ],
        "to": {
          "success": [
            {
              "element": "dash_seg_mp4_1"
            },
            {
              "element": "hls_seg_ts_1"
            }
          ]
        }
      }
    ]
  }
}

상기 내용을 종합한 전체 설정에 대한 예제 JSON 파일은 다음 링크를 통해 다운로드할 수 있습니다. (우클릭 후 다른 이름으로 저장)

전체 예제 JSON 파일

7. 작업 시작 및 결과 확인

위 과정을 통해 설정한 트랜스코딩 및 패키징 작업을 Hybrik 콘솔 또는 API를 통해 실행합니다. 해당 작업의 결과물은 출력 스토리지로 지정한 S3 버킷에서 확인할 수 있습니다.

다음 단계

Hybrik 전처리기 연동을 통해 생성된 A/B(0/1) 버전의 DASH 또는 HLS 콘텐츠는 세션 매니저 APICDN 연동을 통해 재생 시점에 실시간으로 워터마크를 적용할 수 있습니다. 자세한 사항은 해당 가이드를 참고하시기 바랍니다.

이전