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ủ |
|---|---|
| Staging | https://api-staging.sigmadrm.com |
| Production | https://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ường Kiểu Mô tả merchantId String Định danh của khách hàng appId String Định danh của ứng dụng - Body: CPIX Request
Ví dụ CPIX Request (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 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.
- Tạo route:
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 mapping Tham số Thao tác Giá trị Request header Authorization Overwrite 'Basic {CredentialToken}'- Trong đó:
- Giá trị bắt buộc phải có dấu nháy đơn bao bọc:
'Basic ...' - CredentialToken: Xem hướng dẫn tạo tại mục Hướng dẫn xác thực vào hệ thống Sigma MultiDRM.
- Giá trị bắt buộc phải có dấu nháy đơn bao bọc:
- Triển khai API và sao chép địa chỉ Invoke URL:
texthttps://{api-id}.execute-api.{region}.amazonaws.com/speke- Trong giao diện API Gateway, vào mục Integrations -> chọn route
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 method SAMPLE_AESPhương thức mã hóa chuẩn cho CMAF/HLS Initialization vector in manifest INCLUDEChèn IV vào manifest/playlist để player giải mã URL https://{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 version 2.0Phiên bản giao thức SPEKE HLS / DASH signaled system IDs Xem bảng bên dưới UUID của các hệ thống DRM tương ứng Encryption contract configuration Video Preset = PRESET_VIDEO_1
Audio Preset =PRESET_AUDIO_1Tách riêng key cho Audio và Video (hoặc chọn SHAREDnếu dùng chung key)Danh sách hệ thống DRM hỗ trợ:
| DRM | SYSTEM ID | STREAMING FORMAT |
|---|---|---|
| Microsoft PlayReady | 9a04f079-9840-4286-ab92-e65be0885f95 | MPEG-DASH, CMAF, Microsoft Smooth Streaming |
| Google Widevine | edef8ba9-79d6-4ace-a3c8-27dcd51d21ed | MPEG-DASH, CMAF, HLS-fMP4 |
| Apple FairPlay | 94ce86fb-07ff-4f43-adb8-93d2fa968ca2 | HLS-(sTS/fMP4), CMAF |
- Mẫu cấu hình Job JSON:
Xem chi tiết MediaConvert Job 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