Cloudflare Streamでアカウント固有のサブドメインを利用するようになりました

Stream PlayerのiframeのURLやマニフェストURLなどで「customer-{CODE}」という形式のサブドメインが利用可能になりました。アカウントごとに割り当てられます。また従来形式のリクエストも引き続き利用可能です。
2022.08.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

清水です。Cloudflareの動画配信プラットフォームのサービスCloudflare Streamについてアップデートをお届けします。2022年8月15日以降、Cloudflare Streamでは配信時のドメインにcustomer-{CODE}.​cloudflarestream.com形式のアカウント固有のサブドメインを使用するようになりました。

このアップデートについてはStreamダッシュボード冒頭に表示されています。

コミュニティフォーラムでも8月頭から、サブドメイン利用ならびに個別の対応が必要かどうかといった案内がなされていました。

ドキュメントでもChangelogに案内があります。

本エントリでは具体的な変更内容や変更にいたった背景、配信時のドメイン変更にあたり個別の対応が必要なケースなどを確認してみたいと思います。

アカウント固有のサブドメインの使用について

これまでの配信時のドメイン

Cloudflare Streamでは動画コンテンツに対して、Stream Playerというiframeでの埋め込みPlayerやマニフェストURLを用いた独自Playerでの再生サポートしています。詳細については以下エントリやCloudflare StreamのDocument、Exampleの項目を参照ください。

上記エントリをまとめたのが2022年6月末のタイミングだったのですが、これ以前は基本的にvideodelivery.netというドメインを利用してPlayerやマニフェストURLが提供されていました。以下のぐあいです。(ライブストリーミングの場合は$VIDEOID$LIVEINPUTID変わります。)

  • Stream Player(のiframeのURL)
    • https://iframe.videodelivery.net/$VIDEOID
  • マニフェストURL
    • HLS
      • https://videodelivery.net/$VIDEOID/manifest/video.m3u8
    • DASH
      • https://videodelivery.net/$VIDEOID/manifest/video.mpd

2022年6月末ごろのタイミングで、このvideodelivery.netについて特定のローカルIPSからアクセスできない事象が発生しており、バックアップドメインとしてcloudflarestream.comが提供されていることがアナウンスされていました。先のエントリにも留意事項として記載しています。このcloudflarestream.comドメインを使用した場合は以下のURLとなります。

  • Stream Player(のiframeのURL)
    • https://iframe.cloudflarestream.com/$VIDEOID
  • マニフェストURL
    • HLS
      • https://cloudflarestream.com/$VIDEOID/manifest/video.m3u8
    • DASH
      • https://cloudflarestream.com/$VIDEOID/manifest/video.mpd

なおこの段階ではPalyer/マニフェストURL自体にアカウント情報は含まれておらず、$VIDEOIDのみがコンテンツを区別する手段でした。

アカウント固有のサブドメインの使用

今回のアップデートではそれぞれのURLが以下の形式となります。cloudflarestream.comのサブドメインとしてアカウントごと、customer-{CODE}.​​cloudflarestream.comが割り当てられます。{CODE}はアカウント固有の値でランダムな英数字が入るようです。またStream Playerの(iframeの)URLについては、これまでのサブドメイン部分iframeがなくなり、代わりに$VIDEOIDのあとに/iframeが入るかたちになる点に注意しましょう。

  • Stream Player(のiframeのURL)
    • https://customer-{CODE}.​cloudflarestream.com/$VIDEOID/iframe
  • マニフェストURL
    • HLS
      • https://customer-{CODE}.​cloudflarestream.com/$VIDEOID/manifest/video.m3u8
    • DASH
      • https://customer-{CODE}.​cloudflarestream.com/$VIDEOID/manifest/video.mpd

これらStream PlayerやマニフェストURLの他、サムネイル画像やダウンロードURLなどのドメインにもこのアカウント固有のサブドメインが適用されます。

なお、既存のすべてのStream Playerの埋め込みコード、ならびにvideodelivery.netcloudflarestream.comへのリクエストは引き続き動作するとのことです。そのため、この固有サブドメイン導入にあたり特別な対応が必要なケースは、Content Security Policy (CSP)を使用して特定のドメインのコンテンツ表示等に限定している場合のみ、と案内されています。それ以外の場合(CSPを利用していない場合)には特に対応の必要はありません。(CSP利用における注意事項はドキュメントのFAQに説明があります。)

このアカウント固有のサブドメイン導入のメリットについては、Content Security Policyを使用している場合にCloudflare Streamの特定のアカウントのコンテンツのみをWebサイトで再生する、といことが可能になります。(これまでの、アカウントによらず共通のドメインを利用していた場合には、Cloudflare StreamすべてのアカウントのコンテンツをWebサイトで再生する、といった制限しかできませんでした。)またアクセス許可対象のドメインをホワイトリストで登録している、といったネットワーク環境下でのアクセス制限がより厳密にできるようになりました。(これも、以前はCloudfare Streamすべてのアカウントに対して許可するかたちだったのが、特定のアカウント(=アカウント固有のサブドメイン)のみに許可を行える、ということになります。)またvideodelivery.netのローカルISPに対する問題についても、このアカウント固有のサブドメインを利用することで回避ができるとのことです。

アカウント固有のサブドメインを実際に確認してみた

実際にこのアカウント固有のサブドメインについて確認してみます。冒頭で示したStreamダッシュボードに表示されるインフォメーションのほか、Streamダッシュボードで案内される各URLについて確認してみましょう。こちらのエントリで扱っていたものと同じ動画コンテンツで確認してみます。(VIDEOIDc409ではじまるものです)

コンテンツ詳細画面に進むと表示される「設定」タブ、マニフェストURLがやダウンロードURLでアカウント固有のサブドメインが表示されています。

「埋め込み」タグで表示されるStream PlayerのiframeのURLについても、アカウント固有のサブドメインのものになっています。

APIで取得できる動画コンテンツの情報についても確認してみましょう。(ダッシュボードの「JSON」タブでも確認できるものですね。実際にターミナルからAPIを叩いて返ってきた結果を確認してみました。)それぞれアカウント固有のサブドメインになっていることがわかります。同じコンテンツに対するAPIでの情報取得をこちらのエントリでも行っています。2022年4月末のようすで、このころはまだvideodelivery.netドメインがAPIのレスポンスとして返ってきていました。

% curl -X GET \
     -H "Authorization: Bearer ${TOKEN}" \
     "https://api.cloudflare.com/client/v4/accounts/${ACCOUNT}/stream/${VIDEOID}"
{
  "result": {
    "uid": "c409xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "creator": "user-odawara",
    "thumbnail": "https://customer-0jxxxxxxxxxxxxpw.cloudflarestream.com/c409xxxxxxxxxxxxxxxxxxxxxxxxxxxx/thumbnails/thumbnail.jpg",
    "thumbnailTimestampPct": 0,
    "readyToStream": true,
    "status": {
      "state": "ready",
      "pctComplete": "100.000000",
      "errorReasonCode": "",
      "errorReasonText": ""
    },
    "meta": {
      "filename": "IMG_5908.MOV",
      "filetype": "video/quicktime",
      "name": "小田原の海",
      "relativePath": "null",
      "type": "video/quicktime"
    },
    "created": "2022-04-30T09:57:30.832975Z",
    "modified": "2022-06-30T11:33:48.983712Z",
    "size": 382466674,
    "preview": "https://customer-0jxxxxxxxxxxxxpw.cloudflarestream.com/c409xxxxxxxxxxxxxxxxxxxxxxxxxxxx/watch",
    "allowedOrigins": [],
    "requireSignedURLs": false,
    "uploaded": "2022-04-30T09:57:30.832929Z",
    "uploadExpiry": "2022-05-01T09:57:30.832922Z",
    "maxSizeBytes": null,
    "maxDurationSeconds": null,
    "duration": 60.9,
    "input": {
      "width": 3840,
      "height": 2160
    },
    "playback": {
      "hls": "https://customer-0jxxxxxxxxxxxxpw.cloudflarestream.com/c409xxxxxxxxxxxxxxxxxxxxxxxxxxxx/manifest/video.m3u8",
      "dash": "https://customer-0jxxxxxxxxxxxxpw.cloudflarestream.com/c409xxxxxxxxxxxxxxxxxxxxxxxxxxxx/manifest/video.mpd"
    },
    "watermark": null,
    "clippedFrom": null,
    "publicDetails": {
      "title": "",
      "share_link": "",
      "channel_link": "",
      "logo": ""
    }
  },
  "success": true,
  "errors": [],
  "messages": []
}

まとめ

Cloudflare Streamのアップデート、配信時のアカウント固有のサブドメインの利用についてまとめてみました。Content Security Policyを使用していない場合はこれまでと同様のドメインでも引き続き再生が可能ですが、今後扱う場合にはこのアカウント固有のサブドメインを導入しておきましょう。ドメイン許可などの際に利用しているアカウントの固有ドメインのみを許可することができる、というようにより柔軟な対応ができるようになるかと思います。