FWM Hybrik 전처리기 가이드

개요

도브러너 FWM Hybrik 전처리기는 Dolby Hybrik 서비스를 통한 동영상 트랜스코딩 과정에서 포렌식 워터마킹 전처리를 수행할 수 있는 모듈입니다.

전처리기 모듈이 적용된 Hybrik 인코더를 통해 A/B 버전 (0/1 버전) mp4 영상을 만들어내고 각각의 파일을 DASH 또는 HLS로 패키징할 수 있습니다. 포렌식 워터마크와 DRM을 모두 적용하는 경우, Hybrik DRM 연동 가이드를 참고해 CPIX API를 통한 DRM 패키징도 함께 적용할 수 있습니다.

콘텐츠 서비스 사이트(고객사)고객사 S3 스토리지고객사 EC2 인스턴스(Hybrik 실행)Dolby Hybrik 콘솔 또는 API 도브러너 서비스AWS Credential 등록 (S3, EC2 권한 부여)원본 영상 업로드트랜스코딩/패키징 작업 등록Hybrik 인스턴스 생성원본 영상 복사인코딩/트랜스코딩A/B 전처리 (FWM Hybrik 전처리기)DASH/HLS 패키징암호화 키 요청 (CPIX 연동)암호화 키 전달콘텐츠 암호화opt[ 멀티DRM 적용 ]전처리 및 패키징 결과물DASH / HLS 콘텐츠(각각 A/B 두 벌)콘텐츠 서비스 사이트(고객사)고객사 S3 스토리지고객사 EC2 인스턴스(Hybrik 실행)Dolby Hybrik 콘솔 또는 API 도브러너 서비스

Dolby Hybrik 미디어 프로세싱 서비스에 대한 자세한 정보와 가이드는 아래 링크들을 참고하시기 바랍니다.

샘플 다운로드

연동 방법에서 설명된 전체 설정에 대한 예제 JSON 파일을 아래 링크에서 다운로드할 수 있습니다. (우클릭 후 다른 이름으로 저장)

전체 예제 JSON 파일

연동 방법

1. 서비스 가입 및 키 획득

도브러너 서비스 가입 후 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 연동을 통해 재생 시점에 실시간으로 워터마크를 적용할 수 있습니다. 자세한 사항은 해당 가이드를 참고하시기 바랍니다.

이전