コンテンツにスキップ

再開可能な大きなファイル (tus)

200 MBを超える動画がある場合は、tusプロトコルを使用して再開可能なファイルアップロードを行うことをお勧めします。再開可能なアップロードは、アップロードが中断されても、以前のデータを再度アップロードすることなく再開できることを保証します。

要件

  • 再開可能なアップロードには、最小チャンクサイズが5,242,880バイト必要です。ただし、ファイル全体がこのサイズ未満の場合はこの限りではありません。クライアント接続が信頼できると予想される場合は、チャンクサイズを52,428,800バイトに増やすことでパフォーマンスが向上します。
  • 最大チャンクサイズは209,715,200バイトです。
  • チャンクサイズは256 KiB(256x1024バイト)で割り切れる必要があります。チャンクサイズを256 KiBの最も近い倍数に丸めてください。単一のチャンクに収まるアップロードの最終チャンクは、この要件から免除されます。

前提条件

tusを使用して動画をアップロードする前に、tusクライアントをダウンロードする必要があります。

詳細については、pip(Pythonのパッケージマネージャー)を通じて入手可能なtus Pythonクライアントを参照してください。

Pythonクライアントのインストール
pip install -U tus.py

tusを使用して動画をアップロードする

tusを使用してアップロード
tus-upload --chunk-size 52428800 --header \
Authorization "Bearer <API_TOKEN>"
<PATH_TO_VIDEO> https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/stream
tusのレスポンス
INFO Creating file endpoint
INFO Created: https://api.cloudflare.com/client/v4/accounts/d467d4f0fcbcd9791b613bc3a9599cdc/stream/dd5d531a12de0c724bd1275a3b2bc9c6
...

Golangの例

始める前に、go-tusのようなtusクライアントをインポートして、Goアプリケーションからアップロードします。

Golangでのアップロード
package main
import (
"net/http"
"os"
tus "github.com/eventials/go-tus"
)
func main() {
accountID := "<ACCOUNT_ID>"
f, err := os.Open("videofile.mp4")
if err != nil {
panic(err)
}
defer f.Close()
headers := make(http.Header)
headers.Add("Authorization", "Bearer <API_TOKEN>")
config := &tus.Config{
ChunkSize: 50 * 1024 * 1024, // 最小チャンクサイズは5 MBが必要です。ここでは50 MBを使用します。
Resume: false,
OverridePatchMethod: false,
Store: nil,
Header: headers,
HttpClient: nil,
}
client, _ := tus.NewClient("https://api.cloudflare.com/client/v4/accounts/"+ accountID +"/stream", config)
upload, _ := tus.NewUploadFromFile(f)
uploader, _ := client.CreateUpload(upload)
uploader.Upload()
}

アップロードをゴルーチンで実行している場合、アップロードの進行状況を取得することもできます。

アップロードの進行状況を取得
// 進行状況のパーセンテージを返します。
upload.Progress()
// アップロードが完了したかどうかを返します。
upload.Finished()

アップロードの再開などの機能については、go-tusを参照してください。

Node.jsの例

始める前に、tus-js-clientをインストールします。

tus-js-clientのインストール
npm install tus-js-client

index.jsファイルを作成し、次のように設定します。

  • CloudflareアカウントIDを使用したAPIエンドポイント。
  • APIトークンを含むリクエストヘッダー。
index.jsの設定
var fs = require("fs");
var tus = require("tus-js-client");
// アップロードしたいファイルの場所を指定します
var path = __dirname + "/test.mp4";
var file = fs.createReadStream(path);
var size = fs.statSync(path).size;
var mediaId = "";
var options = {
endpoint: "https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/stream",
headers: {
Authorization: "Bearer <API_TOKEN>",
},
chunkSize: 50 * 1024 * 1024, // 最小チャンクサイズは5 MBが必要です。ここでは50 MBを使用します。
retryDelays: [0, 3000, 5000, 10000, 20000], // アップロードが失敗した場合にtus-js-clientが再試行する遅延を示します。
metadata: {
name: "test.mp4",
filetype: "video/mp4",
// ウォーターマークを含めたい場合はオプション
// watermark: '<WATERMARK_UID>',
},
uploadSize: size,
onError: function (error) {
throw error;
},
onProgress: function (bytesUploaded, bytesTotal) {
var percentage = ((bytesUploaded / bytesTotal) * 100).toFixed(2);
console.log(bytesUploaded, bytesTotal, percentage + "%");
},
onSuccess: function () {
console.log("アップロード完了");
},
onAfterResponse: function (req, res) {
return new Promise((resolve) => {
var mediaIdHeader = res.getHeader("stream-media-id");
if (mediaIdHeader) {
mediaId = mediaIdHeader;
}
resolve();
});
},
};
var upload = new tus.Upload(file, options);
upload.start();

アップロードオプションの指定

tusプロトコルでは、Upload-Metadataヘッダーにオプションのパラメータを追加できます。

Upload-Metadataでサポートされているオプション

Upload-Metadataヘッダーに任意のメタデータ値を設定すると、Stream APIのmetaキーに値が設定されます。

  • name

    • このキーを設定すると、APIのmeta.nameが設定され、ダッシュボードに動画の名前として表示されます。
  • requiresignedurls

    • このキーが存在する場合、この動画の再生にはアップロード後に署名付きURLの使用が必要になります。
  • scheduleddeletion

    • 動画が削除される日時を指定します。動画が削除されると、視聴できなくなり、請求のためのストレージにカウントされなくなります。指定された日時は、動画の作成タイムスタンプから30日未満または1,096日を超えてはなりません。
  • allowedorigins

    • 動画を表示することが許可されているオリジンの文字列の配列です。これは、動画の許可されたオリジン設定を設定します。
  • thumbnailtimestamppct

  • watermark

    • ウォーターマークプロファイルのUIDです。

作成者プロパティの設定

Upload-Creatorヘッダーに作成者の値を設定することで、動画コンテンツの作成者を特定し、Streamアカウント内の動画にユーザーや作成者をリンクさせることができます。

作成者IDの設定と変更の例については、動画を作成者に関連付けるを参照してください。

tusを使用して動画IDを取得する

最初のtusリクエストが行われると、StreamはLocationヘッダーにURLで応答します。このURLには動画IDが含まれている場合がありますが、IDを取得するためにこのURLを解析することは推奨されません。

代わりに、レスポンスのstream-media-id HTTPヘッダーを使用して動画IDを取得するべきです。

例えば、tusプロトコルを使用してhttps://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/streamにリクエストを行うと、次のようなHTTPヘッダーが含まれます。

stream-media-id: cab807e0c477d01baq20f66c3d1dfc26cf