← Cloudflare Stream / stream / uploading-videos
Возобновляемая загрузка больших файлов (tus)
Если нужно загрузить видео размером более 200 МБ, используйте протокол tus ↗. Даже если видео меньше 200 МБ, но соединение может быть нестабильным, Cloudflare рекомендует использовать протокол tus, поскольку он поддерживает возобновление. Возобновляемая загрузка позволяет прервать её и продолжить позже без повторной передачи уже загруженных данных.
Чтобы использовать протокол tus для видео конечных пользователей, см. Direct Creator Uploads через tus.
Если ваше видео меньше 200 МБ, а соединение стабильно, можно использовать простой POST запрос вместо этого. Для прямой загрузки через API с использованием вашего API-токена см. Загрузка по ссылке. Для загрузок от конечных пользователей см. Простой POST-запрос для Direct Creator Uploads.
Требования
- Для возобновляемых загрузок требуется минимальный размер блока 5,242,880 байт, если только весь файл не меньше этого объёма. Для более высокой производительности при стабильном соединении с клиентом увеличьте размер блока до 52,428,800 байт.
- Максимальный размер фрагмента данных составляет 209,715,200 байт.
- Размер блока должен быть кратен 256 КиБ (256x1024 байт). Округлите размер блока до ближайшего кратного 256 КиБ. Обратите внимание: это требование не распространяется на последний блок загрузки, если она укладывается в один блок.
Предварительные требования
Прежде чем загружать видео с помощью tus, скачайте клиент tus.
Дополнительные сведения см. в Python-клиент tus ↗ который доступен через pip, менеджер пакетов Python.
pip install -U tus.pyЗагрузка видео с помощью tus
tus-upload --chunk-size 52428800 --header \
Authorization "Bearer <API_TOKEN>"
<PATH_TO_VIDEO> https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/streamINFO Creating file endpoint
INFO Created: https://api.cloudflare.com/client/v4/accounts/d467d4f0fcbcd9791b613bc3a9599cdc/stream/dd5d531a12de0c724bd1275a3b2bc9c6
...Пример на Golang
Перед началом работы подключите клиент tus, например go-tus ↗ для загрузки из приложений на Go.
go-tus библиотека не возвращает заголовки ответа вызывающей функции, из-за чего сложно получить ID видео из stream-media-id заголовок. В качестве обходного решения создайте Direct Creator Upload ссылку. Этот ответ API будет включать конечную точку TUS, а также ID видео. Задавать Creator ID не обязательно.
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, // Required a minimum chunk size of 5 MB, here we use 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()
}Вы также можете отслеживать прогресс загрузки, если она выполняется в горутине.
// returns the progress percentage.
upload.Progress()
// returns whether or not the upload is complete.
upload.Finished()См. go-tus ↗ для таких функций, как возобновление загрузки.
Пример на Node.js
Перед началом работы установите tus-js-client.
npm i tus-js-clientСоздайте index.js файл и настройте:
- Конечная точка API с Account ID вашего аккаунта Cloudflare.
- Заголовки запроса, включающие API-токен.
var fs = require("fs");
var tus = require("tus-js-client");
// Specify location of file you would like to upload below
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, // Required a minimum chunk size of 5 MB. Here we use 50 MB.
retryDelays: [0, 3000, 5000, 10000, 20000], // Indicates to tus-js-client the delays after which it will retry if the upload fails.
metadata: {
name: "test.mp4",
filetype: "video/mp4",
// Optional if you want to include a watermark
// 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("Upload finished");
},
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 заголовок задает значения в ключ meta в Stream API.
-
name- Если задать этот ключ, будет установлено
meta.nameв API и отображает это значение как имя видео на панели управления.
- Если задать этот ключ, будет установлено
-
requiresignedurls- Если этот ключ присутствует, после загрузки для воспроизведения этого видео потребуются подписанные URL-адреса.
-
scheduleddeletion- Задаёт дату и время удаления видео. После удаления видео становится недоступным для просмотра и больше не учитывается в объёме хранилища при выставлении счетов. Указанные дата и время не могут быть раньше 30 дней или позже 1,096 дней от времени создания видео.
-
allowedorigins- Массив строк с перечнем источников, которым разрешено показывать видео. Это задаёт настройка разрешённых источников для видео.
-
thumbnailtimestamppct- Укажите миниатюру по умолчанию процентное значение временной метки. Обратите внимание, что параметр percentage принимает значение с плавающей точкой от 0.0 до 1.0.
-
watermark- UID профиля водяного знака.
Настройка свойства creator
Установка значения creator в Upload-Creator заголовок можно использовать для указания автора видеоконтента, связывая способ идентификации ваших пользователей или авторов с видео в вашей учетной записи Stream.
Примеры того, как задать и изменить Creator ID, см. в Привязка видео к авторам.
Получение идентификатора видео при использовании tus
При выполнении первоначального запроса tus Stream возвращает URL-адрес в Location заголовок. Хотя этот URL-адрес может содержать ID видео, не рекомендуется извлекать ID путем разбора этого URL-адреса.
Вместо этого используйте stream-media-id HTTP-заголовок в ответе, чтобы получить ID видео.
Например, запрос к https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/stream по протоколу tus будет содержать HTTP заголовок, подобный следующему:
stream-media-id: cab807e0c477d01baq20f66c3d1dfc26cf