Skip to content
On this page

Hướng dẫn tích hợp AWS Elemental MediaConvert sử dụng SPEKE ​

1. Giới thiệu ​

Phần này sẽ giới thiệu về cách thức tích hợp dịch vụ chuyển mã và đóng gói AWS Elemental MediaConvert với hệ thống Sigma DRM theo giao thức SPEKE 2.0 trên nền chuẩn CPIX 2.3. Dưới đây là thông tin của hệ thống Sigma DRM:

Môi trườngĐịa chỉ máy chủ
Staginghttps://api-staging.sigmadrm.com
Productionhttps://api.sigmadrm.com

2. SPEKE Ingest API ​

  • Request:

    • Path: /assets/ingest/speke/{:merchantId}/{:appId}

    • Method: POST

    • Headers:

      • content-type: application/xml
      • X-Speke-Version: 2.0
      • Authorization: Basic {CredentialToken} (hoặc x-access-token)
    • Params:

    Tên trườngKiểuMô tả
    merchantIdStringĐịnh danh của khách hàng
    appIdStringĐịnh danh của ứng dụng
    • Body: CPIX Request
Ví dụ CPIX Request (XML)
xml
<?xml version="1.0" encoding="UTF-8"?>
<cpix:CPIX contentId="mediaconvert_1" version="2.3" xmlns:cpix="urn:dashif:org:cpix" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:enc="http://www.w3.org/2001/04/xmlenc#">
    <cpix:ContentKeyList>
        <cpix:ContentKey kid="4a78feac-0fad-4008-82f5-91c736d74d66" commonEncryptionScheme="cbcs"></cpix:ContentKey>
        <cpix:ContentKey kid="4331b35a-2cdd-4892-ac07-ed17328c5bac" commonEncryptionScheme="cbcs"></cpix:ContentKey>
    </cpix:ContentKeyList>
    <cpix:DRMSystemList>
        <cpix:DRMSystem kid="4a78feac-0fad-4008-82f5-91c736d74d66" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
            <cpix:PSSH />
            <cpix:ContentProtectionData />
            <cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
            <cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
        </cpix:DRMSystem>
        <cpix:DRMSystem kid="4331b35a-2cdd-4892-ac07-ed17328c5bac" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
            <cpix:PSSH />
            <cpix:ContentProtectionData />
            <cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
            <cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
        </cpix:DRMSystem>
    </cpix:DRMSystemList>
    <cpix:ContentKeyPeriodList>
        <cpix:ContentKeyPeriod id="keyPeriod_a2390064-8f91-42db-bc95-3591baf45f9d" index="0"/>
    </cpix:ContentKeyPeriodList>
    <cpix:ContentKeyUsageRuleList>
        <cpix:ContentKeyUsageRule kid="4a78feac-0fad-4008-82f5-91c736d74d66" intendedTrackType="VIDEO">
            <cpix:KeyPeriodFilter periodId="keyPeriod_a2390064-8f91-42db-bc95-3591baf45f9d"/>
            <cpix:VideoFilter />
        </cpix:ContentKeyUsageRule>
        <cpix:ContentKeyUsageRule kid="4331b35a-2cdd-4892-ac07-ed17328c5bac" intendedTrackType="AUDIO">
            <cpix:KeyPeriodFilter periodId="keyPeriod_a2390064-8f91-42db-bc95-3591baf45f9d"/>
            <cpix:AudioFilter />
        </cpix:ContentKeyUsageRule>
    </cpix:ContentKeyUsageRuleList>
</cpix:CPIX>
  • Response: CPIX Response
Ví dụ CPIX Response (XML)
xml
<?xml version="1.0" encoding="UTF-8"?>
<cpix:CPIX xmlns:cpix="urn:dashif:org:cpix" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc" contentId="mediaconvert_1" version="2.3">
    <cpix:ContentKeyList>
        <cpix:ContentKey kid="c798e6ea-0098-462a-830b-dbc21fbd9c5e" commonEncryptionScheme="cbcs" explicitIV="AAAAAAAAAAAAAAAAAAAAAA==">
            <cpix:Data>
                <pskc:Secret>
                    <pskc:PlainValue>hBUYISoDSMh0rOjk56doBw==</pskc:PlainValue>
                </pskc:Secret>
            </cpix:Data>
        </cpix:ContentKey>
        <cpix:ContentKey kid="01e5a62d-a0ef-4bae-8773-7a51b2765109" commonEncryptionScheme="cbcs" explicitIV="AAAAAAAAAAAAAAAAAAAAAA==">
            <cpix:Data>
                <pskc:Secret>
                    <pskc:PlainValue>aqO27gWjE+JawLgodjAIeg==</pskc:PlainValue>
                </pskc:Secret>
            </cpix:Data>
        </cpix:ContentKey>
    </cpix:ContentKeyList>
    <cpix:DRMSystemList>
        <cpix:DRMSystem kid="c798e6ea-0098-462a-830b-dbc21fbd9c5e" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
            <cpix:PSSH>AAAAc3Bzc2gBAAAA...zxombBg==</cpix:PSSH>
            <cpix:ContentProtectionData>PGNlbmM6cHNza...bWJCZz09PC9jZW5jOnBzc2g+</cpix:ContentProtectionData>
            <cpix:HLSSignalingData playlist="media">I0VYVC1YLUtFW...VJTU1PTlM9IjEi</cpix:HLSSignalingData>
            <cpix:HLSSignalingData playlist="master">I0VYVC1YLVNFU...VJTU1PTlM9IjEi</cpix:HLSSignalingData>
        </cpix:DRMSystem>
        <cpix:DRMSystem kid="01e5a62d-a0ef-4bae-8773-7a51b2765109" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
            <cpix:PSSH>AAAAc3Bzc2gBAAAA...zxombBg==</cpix:PSSH>
            <cpix:ContentProtectionData>PGNlbmM6cHNza...bWJCZz09PC9jZW5jOnBzc2g+</cpix:ContentProtectionData>
            <cpix:HLSSignalingData playlist="media">I0VYVC1YLUtFW...VJTU1PTlM9IjEi</cpix:HLSSignalingData>
            <cpix:HLSSignalingData playlist="master">I0VYVC1YLVNFU...VJTU1PTlM9IjEi</cpix:HLSSignalingData>
        </cpix:DRMSystem>
    </cpix:DRMSystemList>
    <cpix:ContentKeyPeriodList>
        <cpix:ContentKeyPeriod id="keyPeriod_a2390064-8f91-42db-bc95-3591baf45f9d" index="0"></cpix:ContentKeyPeriod>
    </cpix:ContentKeyPeriodList>
    <cpix:ContentKeyUsageRuleList>
        <cpix:ContentKeyUsageRule kid="c798e6ea-0098-462a-830b-dbc21fbd9c5e" intendedTrackType="VIDEO">
            <cpix:KeyPeriodFilter periodId="keyPeriod_a2390064-8f91-42db-bc95-3591baf45f9d"></cpix:KeyPeriodFilter>
            <cpix:VideoFilter></cpix:VideoFilter>
        </cpix:ContentKeyUsageRule>
        <cpix:ContentKeyUsageRule kid="01e5a62d-a0ef-4bae-8773-7a51b2765109" intendedTrackType="AUDIO">
            <cpix:KeyPeriodFilter periodId="keyPeriod_a2390064-8f91-42db-bc95-3591baf45f9d"></cpix:KeyPeriodFilter>
            <cpix:AudioFilter></cpix:AudioFilter>
        </cpix:ContentKeyUsageRule>
    </cpix:ContentKeyUsageRuleList>
</cpix:CPIX>

3. Cấu hình AWS MediaConvert ​

Do AMC không hỗ trợ chèn header Authorization, cần sử dụng proxy trung gian để bổ sung header xác thực trước khi gửi request tới Sigma DRM KMS, đề xuất dùng AWS API Gateway

3.1. AWS API Gateway ​

Cấu hình một HTTP API trên AWS API Gateway làm reverse proxy để tự động gán header Authorization.

  • Bước 1: Tạo HTTP API

    • Truy cập vào AWS API Gateway Console.
    • Chọn Create API -> chọn HTTP API -> nhấn Build.
    • Tại mục API name, nhập SigmaDRM-SPEKE-Proxy.
  • Bước 2: Cấu hình Route và Integration

    • Tạo route: POST /speke (hoặc /{proxy+}).
    • Thêm HTTP integration: Method POST, trỏ Endpoint URL tới SPEKE Ingest API ở Mục 2.
  • Bước 3: Cấu hình Parameter Mapping (Gán Authorization Header)

    • Trong giao diện API Gateway, vào mục Integrations -> chọn route POST /speke.
    • Tại phần Parameter mapping, chọn Manage parameter mapping.
    • Thêm mapping cho request header:
    Tên loại mappingTham sốThao tácGiá trị
    Request headerAuthorizationOverwrite'Basic {CredentialToken}'
    text
    https://{api-id}.execute-api.{region}.amazonaws.com/speke

3.2. Cấu hình AWS MediaConvert Job ​

  • Điều kiện tiên quyết: Đảm bảo MediaConvert có IAM Role truy cập S3 (Input & Destination).

  • Cấu hình Job Settings:

    • Tạo Job và chọn IAM role hợp lệ.
    • Tại Output groups (CMAF / HLS / DASH), bật Enable DRM encryption và chọn Key provider là SPEKE.
    • Cấu hình các thông số:
    Thông sốGiá trịMô tả
    Encryption methodSAMPLE_AESPhương thức mã hóa chuẩn cho CMAF/HLS
    Initialization vector in manifestINCLUDEChèn IV vào manifest/playlist để player giải mã
    URLhttps://{api-id}.execute-api.{region}.amazonaws.com/spekeĐịa chỉ Invoke URL của API Gateway ở Mục 3.1
    Resource ID{contentId}Định danh nội dung video cần bảo vệ
    SPEKE version2.0Phiên bản giao thức SPEKE
    HLS / DASH signaled system IDsXem bảng bên dướiUUID của các hệ thống DRM tương ứng
    Encryption contract configurationVideo Preset = PRESET_VIDEO_1
    Audio Preset = PRESET_AUDIO_1
    Tách riêng key cho Audio và Video (hoặc chọn SHARED nếu dùng chung key)
  • Danh sách hệ thống DRM hỗ trợ:

DRMSYSTEM IDSTREAMING FORMAT
Microsoft PlayReady9a04f079-9840-4286-ab92-e65be0885f95 MPEG-DASH, CMAF, Microsoft Smooth Streaming
Google Widevineedef8ba9-79d6-4ace-a3c8-27dcd51d21ed MPEG-DASH, CMAF, HLS-fMP4
Apple FairPlay94ce86fb-07ff-4f43-adb8-93d2fa968ca2 HLS-(sTS/fMP4), CMAF
  • Mẫu cấu hình Job JSON:
Xem chi tiết MediaConvert Job JSON
json
{
  "Queue": "arn:aws:mediaconvert:us-east-1:442831590373:queues/Default",
  "UserMetadata": {},
  "Role": "arn:aws:iam::442831590373:role/MediaConvert_Default_Role",
  "Settings": {
    "TimecodeConfig": {
      "Source": "ZEROBASED"
    },
    "OutputGroups": [
      {
        "CustomName": "test",
        "Name": "CMAF",
        "Outputs": [
          {
            "ContainerSettings": {
              "Container": "CMFC"
            },
            "VideoDescription": {
              "CodecSettings": {
                "Codec": "H_264",
                "H264Settings": {
                  "MaxBitrate": 5000000,
                  "RateControlMode": "QVBR",
                  "SceneChangeDetect": "TRANSITION_DETECTION"
                }
              }
            },
            "NameModifier": "v"
          },
          {
            "ContainerSettings": {
              "Container": "CMFC"
            },
            "AudioDescriptions": [
              {
                "CodecSettings": {
                  "Codec": "AAC",
                  "AacSettings": {
                    "Bitrate": 96000,
                    "CodingMode": "CODING_MODE_2_0",
                    "SampleRate": 48000
                  }
                }
              }
            ],
            "NameModifier": "a"
          }
        ],
        "OutputGroupSettings": {
          "Type": "CMAF_GROUP_SETTINGS",
          "CmafGroupSettings": {
            "SegmentLength": 10,
            "Destination": "s3://drm-speke-test2/",
            "DestinationSettings": {
              "S3Settings": {
                "StorageClass": "STANDARD"
              }
            },
            "Encryption": {
              "EncryptionMethod": "SAMPLE_AES",
              "InitializationVectorInManifest": "INCLUDE",
              "SpekeKeyProvider": {
                "ResourceId": "mediaconvert_1",
                "HlsSignaledSystemIds": [
                  "edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
                ],
                "DashSignaledSystemIds": [
                  "edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
                ],
                "Url": "https://api-dev.sigmadrm.com/assets/ingest/speke/16aa76cb-8aa0-4a19-82b6-436493bc6215/e9fa8110-a795-40e9-9f72-a46c625f4a51",
                "EncryptionContractConfiguration": {
                  "SpekeVideoPreset": "PRESET_VIDEO_1",
                  "SpekeAudioPreset": "PRESET_AUDIO_1"
                }
              },
              "Type": "SPEKE"
            },
            "FragmentLength": 2
          }
        }
      }
    ],
    "FollowSource": 1,
    "Inputs": [
      {
        "AudioSelectors": {
          "Audio Selector 1": {
            "DefaultSelection": "DEFAULT"
          }
        },
        "VideoSelector": {},
        "TimecodeSource": "ZEROBASED",
        "FileInput": "s3://forensic-watermark-test/input.mp4"
      }
    ]
  },
  "BillingTagsSource": "JOB",
  "AccelerationSettings": {
    "Mode": "DISABLED"
  },
  "StatusUpdateInterval": "SECONDS_60",
  "Priority": 0
}

CHANGE LOG ​

  • 02/10/2026: Khởi tạo tài liệu tích hợp AWS Elemental MediaConvert sử dụng SPEKE 2.0 và API Gateway