← Cloudflare Stream / stream / stream-live
Мгновенная нарезка прямых трансляций
Stream позволяет создавать клипы из прямых трансляций и записей, чтобы авторы и зрители могли выделить короткие яркие моменты из более длинной трансляции или записи. Мгновенные клипы из прямого эфира могут создавать и конечные пользователи, при этом не возникает ни дополнительной платы за хранение, ни новых записей в библиотеке видео.
Предварительные требования
При настройке Источник прямой трансляции, убедитесь, что «Live Playback and Recording» (mode) включён.
Для создания превью или клипа API-ключи не нужны, но они необходимы для создания Live Input.
Мгновенные клипы формируются динамически на основе записи прямой трансляции. При создании манифестов клипов или файлов MP4 всегда указывайте Video ID, а не Live Input ID. Если запись удалена, мгновенный клип станет недоступен.
Предпросмотр манифеста
Чтобы пользователи могли просматривать и перематывать недавний контент, запросите предварительный манифест, добавив duration параметр к URL HLS-манифеста:
https://customer-<CODE>.cloudflarestream.com/<VIDEO_ID||INPUT_ID>/manifest/video.m3u8?duration=5mdurationстрока, длительность превью, максимум 5 минут, указывается в секундах ("30s") или минутах ("3m")
При получении предварительного манифеста проверьте заголовки на наличие двух свойств:
preview-start-secondsfloat, обозначающее, через сколько секунд от начала прямой трансляции или записи начинается предварительный манифест. Это полезно в приложениях, где пользователь может выбрать диапазон из превью, поскольку клипу нужно будет ссылаться на смещение от трансляция время начала, а не предпросмотр время начала.stream-media-idстрока, идентификатор видео прямой трансляции или записи. Полезно в приложениях, которые отображают плеер с помощью вход ID, поскольку URL клипа должен ссылаться на видео ID.
Этот манифест можно воспроизводить и перематывать с помощью любого плеера, совместимого с HLS.
Чтение заголовков
Чтение заголовков при загрузке манифеста требует изменить то, как плееры обрабатывают
ответ. Например, при использовании HLS.js ↗
и чтобы переопределить загрузчик по умолчанию, укажите pLoader (загрузчик плейлиста), класс:
let currentPreviewStart;
let currentPreviewVideoID;
// Override the pLoader (playlist loader) to read the manifest headers:
class pLoader extends Hls.DefaultConfig.loader {
constructor(config) {
super(config);
var load = this.load.bind(this);
this.load = function (context, config, callbacks) {
if (context.type == 'manifest') {
var onSuccess = callbacks.onSuccess;
// copy the existing onSuccess handler to fire it later.
callbacks.onSuccess = function (response, stats, context, networkDetails) {
// The fourth argument here is undocumented in HLS.js but contains
// the response object for the manifest fetch, which gives us headers:
currentPreviewStart =
parseFloat(networkDetails.getResponseHeader('preview-start-seconds'));
// Save the start time of the preview manifest
currentPreviewVideoID =
networkDetails.getResponseHeader('stream-media-id');
// Save the video ID in case the preview was loaded with an input ID
onSuccess(response, stats, context);
// And fire the existing success handler.
};
}
load(context, config, callbacks);
};
}
}
// Specify the new loader class when setting up HLS
const hls = new Hls({
pLoader: pLoader,
});Манифест клипа
Чтобы воспроизвести фрагмент прямой трансляции или записи, запросите манифест фрагмента с указанием длительности и времени начала относительно начала трансляции.
https://customer-<CODE>.cloudflarestream.com/<VIDEO_ID>/manifest/clip.m3u8?time=600s&duration=30stimeстрока, время начала клипа в секундах от начала прямой трансляции или записиdurationстрока, длительность клипа в секундах, максимум 60 секунд
Этот манифест можно воспроизводить и перематывать с помощью любого плеера, совместимого с HLS.
Загрузка MP4-клипа
MP4-файл клипа также можно сформировать динамически, чтобы сохранить его и поделиться им на других платформах.
https://customer-<CODE>.cloudflarestream.com/<VIDEO_ID>/clip.mp4?time=600s&duration=30s&filename=clip.mp4timeстрока, время начала клипа в секундах от начала прямой трансляции или записи (пример: "500s")durationстрока, длительность клипа в секундах, максимум 60 секунд (пример: "60s")filenameстрока (необязательно) имя файла для клипа