HLS暗号化機能を使うことで、お客様のWebサイト・アプリケーション・サービス(以下、Webサイト)の特定の会員に限定した配信をできます。たとえば有料会員のみが視聴でき、ログアウトした会員と退会した会員と未登録ユーザーは視聴できない、といった機能を実現できます。
会員限定配信を実現するには、暗号化した動画データを復号する「鍵」と呼ばれる16バイトのデータを中継するためのAPIがお客様のWebサイト上に必要です。APIはお客様のWebサイトで使用している開発言語やフレームワークによりさまざまです。Node.jsでのサンプルをこちらに公開しています。処理の概要を説明します。
視聴権限については、お客様のWebサイトの方針で決めてください。
例1) ログイン中の会員は視聴可能。ログアウト済み会員と未登録ユーザーは視聴不可。
例2) 有料会員は視聴可能。無料会員は視聴不可。ログアウト会員は視聴不可。
例3) 有料会員は視聴可能。無料会員はサンプルのみ視聴可能。未登録ユーザーは視聴不可。
16進数をバイナリに変換する処理は各開発言語によります。 Node.jsでは下記のように記述することでバイナリデータになります。
const encrypt_key_hex = JSON.parse(json).encrypt_key;
const encrypt_key_bin = Buffer.from(encrypt_key_hex, "hex");
会員認証APIからImageFlux API Endpointに対して、GetEncryptKey APIを呼び出すと、該当するチャンネルの鍵が16進数32文字の形式でJSONを返します。
{
"kid": "<kid>"
}
kid
{
"encrypt_key": "0123456789abcdef0123456789abcdef"
}
Responseに含まれる項目は、今後増える可能性があります。
curlコマンドを使ってリクエストする場合は次のようになります。
curl -H "Content-Type: application/json" \
-H "X-Sora-Target: ImageFlux_20200707.GetEncryptKey" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-d '{"kid":"<kid>"}' \
https://live-api.imageflux.jp/
$ACCESS_TOKEN
はAPIトークン管理画面で確認できます。また、同画面で新規にLive Streaming権限を持つアクセストークンも発行可能です。
なお、トークンはエンコード済みのものをご利用ください。
CreateMultistreamChannelWithHLS APIに会員認証APIのURLを指定します。
{
"hls": [
{
"durationSeconds": 2,
"startTimeOffset": -2,
"video": {"width": 640,"height": 480},
"audio": {"bps": 64000}
}
],
"encrypt_key_uri": "<encrypt_key_uri>",
"auth_webhook_url": "https://example.com/api/auth_webhook_url",
"event_webhook_url": "https://example.com/api/event_webhook_url"
}
encrypt_key_uri以外のオプションおよびレスポンスについてはこちらのページをご参照ください。encrypt_key_uriの指定の有無によるレスポンスの変更はありません。
encrypt_key_uri
auth_Webhook_url, event_Webhook_urlと少し似ていますが、encrypt_key_uriの末尾はURI(ユー・アール・アイ)です。
HLSのマニフェストファイルの先頭付近に下記のように出力され、HLSの視聴開始時に使用されます。encrypt_key_uriの値の末尾に鍵を識別するためのIDとして &kid=<kid>
または?kid=<kid>
が付与されます。
#EXT-X-KEY:METHOD=AES-128,URI="<encrypt_key_uri>&kid=<kid>"
本機能を使用した会員認証は厳密なDRMではありません。暗号化処理と会員認証を行ったとしても、視聴権限のあるユーザーが、ブラウザのキャッシュから動画に関連するファイル一式をコピーした場合、お客様のWebサイトを退会しても見ることができます。