INTEGRITY Документация

Мгновенная нарезка прямых трансляций

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=5m

При получении предварительного манифеста проверьте заголовки на наличие двух свойств:

Этот манифест можно воспроизводить и перематывать с помощью любого плеера, совместимого с 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=30s

Этот манифест можно воспроизводить и перематывать с помощью любого плеера, совместимого с HLS.

Загрузка MP4-клипа

MP4-файл клипа также можно сформировать динамически, чтобы сохранить его и поделиться им на других платформах.

Загрузка MP4-клипа
https://customer-<CODE>.cloudflarestream.com/<VIDEO_ID>/clip.mp4?time=600s&duration=30s&filename=clip.mp4