Cloudflare Streamで動画のスケジュールによる自動削除が設定できるようになりました

動画コンテンツに対して設定した日時に自動的に削除するようスケジュール指定できるようになりました。ライブストリームで自動録画される動画に対しても、録画から何日経過後に自動削除といった設定が可能です。ストレージ容量を適切に管理できるようになります。
2023.08.31

はじめに

清水です。本エントリではCloudflareの動画配信プラットフォームサービスStreamのアップデート情報についてお届けします。Cloudflare Streamで動画のスケジュールによる自動削除ができるようになりました。動画コンテンツ個々に自動削除のスケジュールを設定できるほか、Live Inputリソースでは録画した動画の削除期間を設定することもできます。

Scheduled Deletionと称されるこの機能、StreamドキュメントChangelogによると2023/08/08付でアップデートされていたようです。

Changelog · Cloudflare Stream docs

本エントリではこのCloudflare Streamの動画のスケジュールによる自動削除機能について確認してみたのでまとめてみます。

動画コンテンツ個々に自動削除のスケジュールが設定できる

ダッシュボードから自動削除のスケジュールを設定

この動画のスケジュールによる削除機能、アップロードしたVOD動画や既存の動画コンテンツ(ビデオ)に対して設定が可能です。新しくVOD動画をアップロードする手順で確認してみましょう。

VOD動画をアップロード後、その動画コンテンツ(ビデオ)の詳細画面に進みます。「ビデオを自動的に削除」という項目がありますね。

ビデオを自動的に削除」にチェックを入れると日付を選択できるようになります。「2023/09/3019:20より前ではない」と表示されていますが、アップロードをして設定を行っているタイミングが2023/08/31 19:20ごろですので、30日間は自動削除ができないようですね。こちらはドキュメントを確認すると、「ビデオの作成タイムスタンプから30日より前の日付と時刻を指定することはできない」旨の記載がありました。

例として、2023/10/18 17:30を指定してみました。ビデオ名も変更して[保存]します。[保存]ボタンを押下しないと設定が保存されないので注意しましょう。なお後述のAPI経由で確認できますが、このダッシュボードで設定、確認できるのはJST、対して内部的にはUTCで情報を持っているようです。

既存のビデオ(動画コンテンツ)についても、新規アップデートと同様の手順で自動削除スケジュールの設定が可能です。

APIを使って自動削除のスケジュールを設定

ダッシュボードからの自動削除スケジュールの設定を確認してみました。Scheduled DeletionはAPI経由でも設定可能です。まずは先ほど設定したものを確認してみましょう。ハイライトした箇所、scheduledDeletionという項目が確認できますね。

% curl -X GET \
       -H "Authorization: Bearer ${TOKEN}" \
       "https://api.cloudflare.com/client/v4/accounts/${ACCOUNT}/stream/${VIDEOID}"
{
  "result": {
    "uid": "aacdxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "creator": null,
    "thumbnail": "https://customer-0jyoxxxxxxxxxxxx.cloudflarestream.com/aacdxxxxxxxxxxxxxxxxxxxxxxxxxxxx/thumbnails/thumbnail.jpg",
    "thumbnailTimestampPct": 0,
    "readyToStream": true,
    "readyToStreamAt": "2023-08-31T10:23:05.310134Z",
    "status": {
      "state": "ready",
      "pctComplete": "100.000000",
      "errorReasonCode": "",
      "errorReasonText": ""
    },
    "meta": {
      "filename": "IMG_9880.MOV",
      "filetype": "video/quicktime",
      "name": "久我山の桜並木",
      "relativePath": "null",
      "type": "video/quicktime"
    },
    "created": "2023-08-31T10:20:51.074647Z",
    "modified": "2023-08-31T10:24:45.580754Z",
    "scheduledDeletion": "2023-10-18T08:30:00Z",
    "size": 312310042,
    "preview": "https://customer-0jyoxxxxxxxxxxxx.cloudflarestream.com/aacdxxxxxxxxxxxxxxxxxxxxxxxxxxxx/watch",
    "allowedOrigins": [],
    "requireSignedURLs": false,
    "uploaded": "2023-08-31T10:20:51.074643Z",
    "uploadExpiry": "2023-09-01T10:20:51.074636Z",
    "maxSizeBytes": null,
    "maxDurationSeconds": null,
    "duration": 31.5,
    "input": {
      "width": 3840,
      "height": 2160
    },
    "playback": {
      "hls": "https://customer-0jyoxxxxxxxxxxxx.cloudflarestream.com/aacdxxxxxxxxxxxxxxxxxxxxxxxxxxxx/manifest/video.m3u8",
      "dash": "https://customer-0jyoxxxxxxxxxxxx.cloudflarestream.com/aacdxxxxxxxxxxxxxxxxxxxxxxxxxxxx/manifest/video.mpd"
    },
    "watermark": null,
    "clippedFrom": null,
    "publicDetails": {
      "title": "",
      "share_link": "",
      "channel_link": "",
      "logo": ""
    }
  },
  "success": true,
  "errors": [],
  "messages": []
}

scheduledDeletionのデータをPOSTすることで設定変更が可能です。(Cloudflare API Documentation

% curl -X POST \
       -H "Authorization: Bearer ${TOKEN}" \
       -H "Content-Type: application/json" \
       --data '{"scheduledDeletion": "2023-10-18T10:00:00Z"}' \
       "https://api.cloudflare.com/client/v4/accounts/${ACCOUNT}/stream/${VIDEOID}"
{
  "result": {
    "uid": "aacdxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "creator": null,
    "thumbnail": "https://customer-0jyoxxxxxxxxxxxx.cloudflarestream.com/aacdxxxxxxxxxxxxxxxxxxxxxxxxxxxx/thumbnails/thumbnail.jpg",
    "thumbnailTimestampPct": 0,
    "readyToStream": true,
    "readyToStreamAt": "2023-08-31T10:23:05.310134Z",
    "status": {
      "state": "ready",
      "pctComplete": "100.000000",
      "errorReasonCode": "",
      "errorReasonText": ""
    },
    "meta": {
      "filename": "IMG_9880.MOV",
      "filetype": "video/quicktime",
      "name": "久我山の桜並木",
      "relativePath": "null",
      "type": "video/quicktime"
    },
    "created": "2023-08-31T10:20:51.074647Z",
    "modified": "2023-08-31T10:57:17.354664Z",
    "scheduledDeletion": "2023-10-18T10:00:00Z",
    "size": 312310042,
    "preview": "https://customer-0jyoxxxxxxxxxxxx.cloudflarestream.com/aacdxxxxxxxxxxxxxxxxxxxxxxxxxxxx/watch",
    "allowedOrigins": [],
    "requireSignedURLs": false,
    "uploaded": "2023-08-31T10:20:51.074643Z",
    "uploadExpiry": "2023-09-01T10:20:51.074636Z",
    "maxSizeBytes": null,
    "maxDurationSeconds": null,
    "duration": 31.5,
    "input": {
      "width": 3840,
      "height": 2160
    },
    "playback": {
      "hls": "https://customer-0jyoxxxxxxxxxxxx.cloudflarestream.com/aacdxxxxxxxxxxxxxxxxxxxxxxxxxxxx/manifest/video.m3u8",
      "dash": "https://customer-0jyoxxxxxxxxxxxx.cloudflarestream.com/aacdxxxxxxxxxxxxxxxxxxxxxxxxxxxx/manifest/video.mpd"
    },
    "watermark": null,
    "clippedFrom": null,
    "publicDetails": {
      "title": "",
      "share_link": "",
      "channel_link": "",
      "logo": ""
    }
  },
  "success": true,
  "errors": [],
  "messages": []
}

API経由でアップロード時にScheduled Deletionを設定

APIでビデオアップロード時に自動削除スケジュールを指定することも可能です。リンクを使ったアップロードで試してみましょう。

以下のJSONを送信データとします。

{
  "url": "https://example.com/IMG_0567.MOV",
  "meta": {
    "name": "三鷹台の鯉のぼり"
  },
  "scheduledDeletion": "2024-05-05T10:00:00Z"
}

以下が実行結果です。scheduledDeletionが設定されていますね。

% curl -X POST \
       -H "Authorization: Bearer ${TOKEN}" \
       --data '{"url": "https://example.com/IMG_0567.MOV","meta": {"name": "三鷹台の鯉のぼり"},"scheduledDeletion": "2024-05-05T10:00:00Z"}' \
      "https://api.cloudflare.com/client/v4/accounts/${ACCOUNT}/stream/copy"

{
  "result": {
    "uid": "47bdxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "creator": null,
    "thumbnail": "https://customer-0jyoxxxxxxxxxxxx.cloudflarestream.com/47bdxxxxxxxxxxxxxxxxxxxxxxxxxxxx/thumbnails/thumbnail.jpg",
    "thumbnailTimestampPct": 0,
    "readyToStream": false,
    "readyToStreamAt": null,
    "status": {
      "state": "downloading",
      "errorReasonCode": "",
      "errorReasonText": ""
    },
    "meta": {
      "downloaded-from": "https://example.com/IMG_0567.MOV",
      "name": "三鷹台の鯉のぼり"
    },
    "created": "2023-08-31T11:04:57.479361Z",
    "modified": "2023-08-31T11:04:57.479361Z",
    "scheduledDeletion": "2024-05-05T10:00:00Z",
    "size": 209778249,
    "preview": "https://customer-0jyoxxxxxxxxxxxx.cloudflarestream.com/47bdxxxxxxxxxxxxxxxxxxxxxxxxxxxx/watch",
    "allowedOrigins": [],
    "requireSignedURLs": false,
    "uploaded": "2023-08-31T11:04:57.479283Z",
    "uploadExpiry": null,
    "maxSizeBytes": null,
    "maxDurationSeconds": null,
    "duration": -1,
    "input": {
      "width": -1,
      "height": -1
    },
    "playback": {
      "hls": "https://customer-0jyoxxxxxxxxxxxx.cloudflarestream.com/47bdxxxxxxxxxxxxxxxxxxxxxxxxxxxx/manifest/video.m3u8",
      "dash": "https://customer-0jyoxxxxxxxxxxxx.cloudflarestream.com/47bdxxxxxxxxxxxxxxxxxxxxxxxxxxxx/manifest/video.mpd"
    },
    "watermark": null,
    "clippedFrom": null,
    "publicDetails": null
  },
  "success": true,
  "errors": [],
  "messages": []
}

ライブストリームでは録画した動画の削除期間を設定できる

Live inputで録画の自動削除を設定

ライブストリームでもScheduled Deletion機能が使用できます。具体的にはLive Input(ライブ入力)の「ライブ再生と録音」機能を有効にする際、「録画の自動削除」設定が可能です。ダッシュボードから確認してみましょう。

設定することで、ストリーム終了の際、削除期間の値をもとに自動でscheduledDeletionが設定されるとのことです。

作成したLive inputです。「録画の自動削除」が有効になっていますね。既存のLive inputについてもこの項目から設定変更が可能です。

API経由でも設定が可能です。deleteRecordingAfterDaysを設定します。

Live input作成時に以下のJSON形式でデータをPOSTしました。

{
  "meta": {
    "name": "scheduled-deletion-api-live-input"
  },
  "recording": {
    "mode": "automatic",
    "requireSignedURLs": false
  },
  "deleteRecordingAfterDays": 60
}

以下が実行結果です。

% curl -X POST \
       -H "Authorization: Bearer ${TOKEN}" \
      "https://api.cloudflare.com/client/v4/accounts/${ACCOUNT}/stream/live_inputs" \
      --data '{"meta": {"name": "scheduled-deletion-api-live-input"},"recording": {"mode": "automatic","requireSignedURLs": false},"deleteRecordingAfterDays": 60}'

{
  "result": {
    "uid": "0464adc5d8c80972ed5bc3f6c0844b8f",
    "rtmps": {
      "url": "rtmps://live.cloudflare.com:443/live/",
      "streamKey": "9681xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    "rtmpsPlayback": {
      "url": "rtmps://live.cloudflare.com:443/live/",
      "streamKey": "3c77xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    "srt": {
      "url": "srt://live.cloudflare.com:778",
      "streamId": "0464xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "passphrase": "c6f4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    "srtPlayback": {
      "url": "srt://live.cloudflare.com:778",
      "streamId": "play04xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "passphrase": "81eaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    "webRTC": {
      "url": "https://customer-0jyoxxxxxxxxxxxx.cloudflarestream.com/a0fbxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/webRTC/publish"
    },
    "webRTCPlayback": {
      "url": "https://customer-0jyoxxxxxxxxxxxx.cloudflarestream.com/0464xxxxxxxxxxxxxxxxxxxxxxxxxxxx/webRTC/play"
    },
    "created": "2023-08-31T11:34:58.055253Z",
    "modified": "2023-08-31T11:34:58.055253Z",
    "meta": {
      "name": "scheduled-deletion-api-live-input"
    },
    "status": null,
    "recording": {
      "mode": "automatic",
      "requireSignedURLs": false,
      "allowedOrigins": null
    },
    "deleteRecordingAfterDays": 60
  },
  "success": true,
  "errors": [],
  "messages": []
}

録画された動画コンテンツのスケジュール設定

「録画の自動削除」を有効にしたLive Inputで録画されたビデオ(動画コンテンツ)では、設定しなくても「ビデオを自動的に削除」が有効化されている、という状況となります。

ビデオに対する自動削除設定を無効にすることもできるので、あらかじめ設定だけしておき必要な録画ビデオのみ自動設定を無効にして長期保存する、ということもできそうですね。以下、例としてAPI経由で録画されたビデオの自動削除設定を無効にしてみました。無効にする場合はnullを指定します。(Cloudflare API Documentation

% curl -X POST \
       -H "Authorization: Bearer ${TOKEN}" \
       -H "Content-Type: application/json" \
       --data '{"scheduledDeletion": null}' \
       "https://api.cloudflare.com/client/v4/accounts/${ACCOUNT}/stream/${VIDEOID}"
{
  "result": {
    "uid": "17faxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "creator": null,
    "thumbnail": "https://customer-0jyoxxxxxxxxxxxx.cloudflarestream.com/17faxxxxxxxxxxxxxxxxxxxxxxxxxxxx/thumbnails/thumbnail.jpg",
    "thumbnailTimestampPct": 0,
    "readyToStream": true,
    "readyToStreamAt": "2023-08-31T10:53:29.791945Z",
    "status": {
      "state": "ready",
      "pctComplete": "100.000000",
      "errorReasonCode": "",
      "errorReasonText": ""
    },
    "meta": {
      "name": "scheduled-deletion-test-live-input 31 Aug 23 10:46 UTC"
    },
    "created": "2023-08-31T10:46:29.715556Z",
    "modified": "2023-08-31T11:09:47.476175Z",
    "scheduledDeletion": null,
    "size": 0,
    "preview": "https://customer-0jyoxxxxxxxxxxxx.cloudflarestream.com/17faxxxxxxxxxxxxxxxxxxxxxxxxxxxx/watch",
    "allowedOrigins": [],
    "requireSignedURLs": false,
    "uploaded": "2023-08-31T10:46:29.71555Z",
    "uploadExpiry": null,
    "maxSizeBytes": null,
    "maxDurationSeconds": null,
    "duration": 403.57,
    "input": {
      "width": 1280,
      "height": 720
    },
    "playback": {
      "hls": "https://customer-0jyoxxxxxxxxxxxx.cloudflarestream.com/17faxxxxxxxxxxxxxxxxxxxxxxxxxxxx/manifest/video.m3u8",
      "dash": "https://customer-0jyoxxxxxxxxxxxx.cloudflarestream.com/17faxxxxxxxxxxxxxxxxxxxxxxxxxxxx/manifest/video.mpd"
    },
    "watermark": null,
    "liveInput": "82b6xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "clippedFrom": null,
    "publicDetails": null
  },
  "success": true,
  "errors": [],
  "messages": []
}

まとめ

Cloudflare Streamの新機能、Scheduled Deletionについて確認してみました。アップロードもしくはライブストリームから作成された動画コンテツ(ビデオ)に対して、自動で削除するスケジュールを指定することができます。またライブ入力(Live input)に対して、そのライブ入力から録画で作成されるビデオに対して、自動削除スケジュールを設定するかが指定できます。

Cloudflare Streamではストレージ容量によっても料金プランが変わってきます。必要な動画コンテンツであればストレージ容量の使用はやむを得ないのですが、例えばライブストリームの検証などで録画ビデオがたまってストレージ容量を圧迫してしまっている、なんて場合もあるかと思います。(私がこの状況です。)自動削除スケジュールを設定しておくことで、ストレージ容量を適切に管理できるかと思います。上手に活用していきたいですね!