バックエンド言語別サンプル
DRM-X 6.0 バックエンドの統合パターン PHP, ASP.NET Core, Node.js, Python, Java, Go, Ruby は 1 つのセキュアな Playback セッションを使用して、 API.
言語に依存しないリクエスト#
POST /api/v1/playback/environments/{siteId}/sessions
X-DRMX-Client-Id: {siteKey}
X-DRMX-Client-Secret: {accessKey}
{
"contentId": "trusted-content-id",
"contentType": "vod",
"drmSystem": "widevine",
"subject": "authenticated-user-id",
"sessionId": "new-id-for-this-attempt",
"licensePolicyTemplate": "multi-tier-standard",
"useEnvironmentDefaults": true
}バックエンドを選択#
PHP 8.2+
cURL は、JSON 例外、HTTPS- のみのプロトコル、12 秒のタイムアウト、および明示的な応答ステータス処理を使用します。完全な PHP アプリケーションには、ログイン、エンタイトル、直接トークン、トークンプロキシ、診断、リリースが含まれます。
PHP サンプルを実行しますASP.NET Core
指定したオプションのバリデーション、タイプされたHttpClient、キャンセル、JsonContent、エンドポイントヘルパーを使用してください。コンフィギュレーション値は、シークレットマネージャーの代替品との最初の実行のためのコードで明確です。
Node.js / TypeScript
AbortSignal.timeout、サーバーのみの設定、応答スキーマの検証、Cache-Control: no-store で fetch を使用します。
Python 3.11 +
明示的なタイムアウト、JSON シリアライズ、ステータスチェック、およびプロダクションランタイムからのシークレットインジェクションで HTTPS クライアントを使用します。
Java 21 以降
HttpClient をリクエストタイムアウト、正確なクレデンシャルヘッダ、検証済み JSON で使用し、信頼できないオリジンへのリダイレクトは使用しません。
Ruby または Ruby を囲む
コンテキストリクエスト/タイムアウト、正確な JSON フィールド、厳格なステータスチェックを使用し、クレデンシャルまたは成功した再生レスポンスボディを印刷しません。
地図ビジネス値安全#
| リクエストフィールド | ソース |
|---|---|
contentId | カタログから公開された保護されたファイルにサーバーのマッピング。 |
subject | 認証されたユーザー ID; ブラウザが認証された ID は決してありません。 |
licensePolicyTemplate | 信頼できるプラン、レンタル、コース、またはコンテンツティアからサーバーマッピング。 |
drmSystem | 統合サポートのDRMシステムに限られる検証済みクライアント機能。 |
sessionId | この再生の試みのために、あなたのバックエンドによって作成された新鮮な予測不可能な識別子。 |
最初の run# のみの直接コード値を使用する
意図的にサンプルは、設定の小さなセットを簡単に見つけることができます。 生産のために、文書化された環境/秘密管理の代替案を解約し、ハードコードされた秘密を削除し、クライアントを回転させ、license-tokens:createだけを付与します。
一般的なバックエンド言語#から同じエンドポイントを呼び出します。
すべての例では、ビューアを認証し、この呼び出しの前にエン資格情報を確認してください。 PHP と ASP.NET は、最初の実行の直接コード値を表示します。 Access Key を、プロダクション用のシークレットマネージャーに移動し、リクエストヘッダーや成功したレスポンスボディをログに記録しません。
PHP 8.2+
$drmx = [
'platformApi' => 'https://api6.drm-x.com',
'siteId' => 'your-development-environment-uuid',
'siteKey' => 'drmx_your_environment_scoped_client_id',
'accessKey' => 'paste-your-one-time-access-key',
];
$payload = [
'contentId' => $trustedContentId,
'contentType' => 'vod',
'drmSystem' => $drmSystem,
'subject' => $authenticatedUserId,
'playbackMode' => 'streaming',
'licensePolicyTemplate' => 'multi-tier-standard',
'useEnvironmentDefaults' => true,
'maximumQualityTier' => 'auto',
];
$curl = curl_init($drmx['platformApi'] . '/api/v1/playback/environments/' .
rawurlencode($drmx['siteId']) . '/sessions');
curl_setopt_array($curl, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($payload, JSON_THROW_ON_ERROR),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 12,
CURLOPT_PROTOCOLS => CURLPROTO_HTTPS,
CURLOPT_HTTPHEADER => [
'Accept: application/json',
'Content-Type: application/json',
'X-DRMX-Client-Id: ' . $drmx['siteKey'],
'X-DRMX-Client-Secret: ' . $drmx['accessKey'],
],
]);
$body = curl_exec($curl);
完全な実行可能なサンプルから始めて下さい;それはログイン、資格、直接トークン モード、トークン プロキシ モード、境界された診断および解放の処理を含んでいます。
Node.js / TypeScript
const response = await fetch(
`${process.env.DRMX_PLATFORM_API}/api/v1/playback/environments/${
encodeURIComponent(process.env.DRMX_PLAYBACK_SITE_ID!)
}/sessions`,
{
method: "POST",
headers: {
"Accept": "application/json",
"Content-Type": "application/json",
"X-DRMX-Client-Id": process.env.DRMX_PLAYBACK_SITE_KEY!,
"X-DRMX-Client-Secret": process.env.DRMX_PLAYBACK_ACCESS_KEY!,
},
body: JSON.stringify({
contentId: trustedContentId,
contentType: "vod",
drmSystem,
subject: authenticatedUser.id,
playbackMode: "streaming",
licensePolicyTemplate: "multi-tier-standard",
useEnvironmentDefaults: true,
maximumQualityTier: "auto",
}),
signal: AbortSignal.timeout(12_000),
},
);
const playback = await response.json();
Python 3.11 +
import json, os, urllib.request
payload = json.dumps({
"contentId": trusted_content_id,
"contentType": "vod",
"drmSystem": drm_system,
"subject": authenticated_user_id,
"playbackMode": "streaming",
"licensePolicyTemplate": "multi-tier-standard",
"useEnvironmentDefaults": True,
"maximumQualityTier": "auto",
}).encode("utf-8")
url = (
os.environ["DRMX_PLATFORM_API"] +
"/api/v1/playback/environments/" +
os.environ["DRMX_PLAYBACK_SITE_ID"] + "/sessions"
)
request = urllib.request.Request(url, data=payload, method="POST", headers={
"Accept": "application/json",
"Content-Type": "application/json",
"X-DRMX-Client-Id": os.environ["DRMX_PLAYBACK_SITE_KEY"],
"X-DRMX-Client-Secret": os.environ["DRMX_PLAYBACK_ACCESS_KEY"],
})
with urllib.request.urlopen(request, timeout=12) as response:
playback = json.load(response)
ASP.NET Core ・C#
builder.Services.AddDrmXPlayback(options =>
{
options.PlatformApi = "https://api6.drm-x.com";
options.SiteId = "your-development-environment-uuid";
options.SiteKey = "drmx_your_environment_scoped_client_id";
options.AccessKey = "paste-your-one-time-access-key";
options.ApplicationId = "customer-aspnet-website";
options.LicensePolicyTemplate = "multi-tier-standard";
});
var payload = new {
contentId = trustedContentId,
contentType = "vod",
drmSystem,
subject = authenticatedUserId,
playbackMode = "streaming",
licensePolicyTemplate = "multi-tier-standard",
useEnvironmentDefaults = true,
maximumQualityTier = "auto"
};
using var request = new HttpRequestMessage(HttpMethod.Post,
$"{platformApi}/api/v1/playback/environments/{Uri.EscapeDataString(siteId)}/sessions") {
Content = JsonContent.Create(payload)
};
request.Headers.Add("X-DRMX-Client-Id", siteKey);
request.Headers.Add("X-DRMX-Client-Secret", accessKey);
using var response = await httpClient.SendAsync(request, cancellationToken);
Java 21/スプリングサービス
String payload = objectMapper.writeValueAsString(Map.of(
"contentId", trustedContentId,
"contentType", "vod",
"drmSystem", drmSystem,
"subject", authenticatedUserId,
"playbackMode", "streaming",
"licensePolicyTemplate", "multi-tier-standard",
"useEnvironmentDefaults", true,
"maximumQualityTier", "auto"
));
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(platformApi + "/api/v1/playback/environments/" +
URLEncoder.encode(siteId, StandardCharsets.UTF_8) + "/sessions"))
.timeout(Duration.ofSeconds(12))
.header("Accept", "application/json")
.header("Content-Type", "application/json")
.header("X-DRMX-Client-Id", siteKey)
.header("X-DRMX-Client-Secret", accessKey)
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
ゴー 1.23+
payload, _ := json.Marshal(map[string]any{
"contentId": trustedContentID,
"contentType": "vod",
"drmSystem": drmSystem,
"subject": authenticatedUserID,
"playbackMode": "streaming",
"licensePolicyTemplate": "multi-tier-standard",
"useEnvironmentDefaults": true,
"maximumQualityTier": "auto",
})
url := platformAPI + "/api/v1/playback/environments/" +
url.PathEscape(siteID) + "/sessions"
req, _ := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewReader(payload))
req.Header.Set("Accept", "application/json")
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-DRMX-Client-Id", siteKey)
req.Header.Set("X-DRMX-Client-Secret", accessKey)
response, err := httpClient.Do(req)
Ruby 3.3+
uri = URI("#{ENV.fetch('DRMX_PLATFORM_API')}/api/v1/playback/environments/" \
"#{ERB::Util.url_encode(ENV.fetch('DRMX_PLAYBACK_SITE_ID'))}/sessions")
request = Net::HTTP::Post.new(uri)
request['Accept'] = 'application/json'
request['Content-Type'] = 'application/json'
request['X-DRMX-Client-Id'] = ENV.fetch('DRMX_PLAYBACK_SITE_KEY')
request['X-DRMX-Client-Secret'] = ENV.fetch('DRMX_PLAYBACK_ACCESS_KEY')
request.body = JSON.generate(
contentId: trusted_content_id,
contentType: 'vod',
drmSystem: drm_system,
subject: authenticated_user_id,
playbackMode: 'streaming',
licensePolicyTemplate: 'multi-tier-standard',
useEnvironmentDefaults: true,
maximumQualityTier: 'auto'
)
response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(request) }
DRM-X 6.0