再開可能な大きなファイル (tus)
200 MBを超える動画がある場合は、tusプロトコル ↗を使用して再開可能なファイルアップロードを行うことをお勧めします。再開可能なアップロードは、アップロードが中断されても、以前のデータを再度アップロードすることなく再開できることを保証します。
- 再開可能なアップロードには、最小チャンクサイズが5,242,880バイト必要です。ただし、ファイル全体がこのサイズ未満の場合はこの限りではありません。クライアント接続が信頼できると予想される場合は、チャンクサイズを52,428,800バイトに増やすことでパフォーマンスが向上します。
- 最大チャンクサイズは209,715,200バイトです。
- チャンクサイズは256 KiB(256x1024バイト)で割り切れる必要があります。チャンクサイズを256 KiBの最も近い倍数に丸めてください。単一のチャンクに収まるアップロードの最終チャンクは、この要件から免除されます。
tusを使用して動画をアップロードする前に、tusクライアントをダウンロードする必要があります。
詳細については、pip(Pythonのパッケージマネージャー)を通じて入手可能なtus Pythonクライアント ↗を参照してください。
pip install -U tus.pytus-upload --chunk-size 52428800 --header \Authorization "Bearer <API_TOKEN>"<PATH_TO_VIDEO> https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/streamINFO Creating file endpointINFO Created: https://api.cloudflare.com/client/v4/accounts/d467d4f0fcbcd9791b613bc3a9599cdc/stream/dd5d531a12de0c724bd1275a3b2bc9c6...始める前に、go-tus ↗のようなtusクライアントをインポートして、Goアプリケーションからアップロードします。
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 ↗を参照してください。
始める前に、tus-js-clientをインストールします。
npm install tus-js-clientindex.jsファイルを作成し、次のように設定します。
- CloudflareアカウントIDを使用したAPIエンドポイント。
- APIトークンを含むリクエストヘッダー。
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ヘッダーに任意のメタデータ値を設定すると、Stream APIのmetaキーに値が設定されます。
-
name- このキーを設定すると、APIの
meta.nameが設定され、ダッシュボードに動画の名前として表示されます。
- このキーを設定すると、APIの
-
requiresignedurls- このキーが存在する場合、この動画の再生にはアップロード後に署名付きURLの使用が必要になります。
-
scheduleddeletion- 動画が削除される日時を指定します。動画が削除されると、視聴できなくなり、請求のためのストレージにカウントされなくなります。指定された日時は、動画の作成タイムスタンプから30日未満または1,096日を超えてはなりません。
-
allowedorigins- 動画を表示することが許可されているオリジンの文字列の配列です。これは、動画の許可されたオリジン設定を設定します。
-
thumbnailtimestamppct- デフォルトのサムネイルタイムスタンプのパーセンテージを指定します。パーセンテージは0.0から1.0の間の浮動小数点値です。
-
watermark- ウォーターマークプロファイルのUIDです。
Upload-Creatorヘッダーに作成者の値を設定することで、動画コンテンツの作成者を特定し、Streamアカウント内の動画にユーザーや作成者をリンクさせることができます。
作成者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