Spec-Zone.ru › Web APIs

RTCRtpScriptTransformer

Ограниченная доступность

Эта функция не относится к Baseline, так как она не работает в некоторых из наиболее широко используемых браузеров.

  • Узнать больше
  • Полная совместимость
  • Отправить отзыв

Интерфейс RTCRtpScriptTransformer API WebRTC предоставляет интерфейс Stream API для стороны обработчика, который WebRTC кодированное преобразование может использовать для изменения закодированных кадров медиа в входящих и исходящих потоках WebRTC.

Примечание: Эта функция доступна в специализированных Web Workers.

Свойства экземпляра

RTCRtpScriptTransformer.readable Только для чтения

Поток ReadableStream, на который могут помещаться закодированные кадры из потоков отправителя или получателя WebRTC.

RTCRtpScriptTransformer.writable Только для чтения

Поток WritableStream, в который должны поступать закодированные кадры.

RTCRtpScriptTransformer.options Только для чтения

Параметры, переданные из RTCRtpScriptTransform конструктора, которые используются для настройки кода преобразования на основе того, обрабатываются ли входящие или исходящие кадры.

Методы экземпляра

RTCRtpScriptTransformer.generateKeyFrame()

Запрашивает у кодера видео генерацию ключевого кадра. Может вызываться преобразователем в потоке отправителя при обработке исходящих кадров.

RTCRtpScriptTransformer.sendKeyFrameRequest()

Запрашивает отправителя отправить ключевой кадр. Может вызываться преобразователем в потоке получателя при обработке входящих закодированных видеокадров.

Описание

Экземпляр RTCRtpScriptTransformer создается как часть создания связанного RTCRtpScriptTransform, который определяет обработчик, в котором создается преобразователь, и параметры, которые будут ему переданы.

Преобразователь становится доступным для обработчика через событие rtctransform transformer свойство. Это событие срабатывает при создании связанного RTCRtpScriptTransform и при помещении закодированного кадра в очередь на RTCRtpScriptTransformer.readable от кодека (исходящий) или от пакетизатора (входящий).

Преобразователь предоставляет поток readable и writable в обработчик, а также объект options, предоставленный RTCRtpScriptTransform при создании. Когда связанный RTCRtpScriptTransform присваивается RTCRtpSender или RTCRtpReceiver, закодированные кадры медиа из потоков WebRTC отправителя или получателя помещаются в очередь в поток readable.

WebRTC кодированное преобразование должно считывать закодированные кадры из transformer.readable, изменять их по мере необходимости и записывать в transformer.writable в том же порядке и без дублирования. transformer.options позволяют использовать соответствующую функцию преобразования, в зависимости от того, являются ли закодированные кадры медиа входящими или исходящими. Преобразование обычно реализуется путем передачи кадров из readable через один или несколько экземпляров TransformStream в writable, преобразуя их по мере необходимости.

Интерфейс также предоставляет методы для генерации ключевого кадра отправителем, чтобы заставить кодер видео сгенерировать новый ключевой кадр, или для получателя запросить новый ключевой кадр у кодера отправителя (кодеры видео обычно отправляют ключевой кадр, содержащий всю необходимую информацию для построения изображения, а затем отправляют кадры с изменениями, содержащие только информацию, которая изменилась с момента предыдущего кадра).

Эти методы необходимы в случаях, когда получатель не сможет декодировать входящие кадры до тех пор, пока не получит новый ключевой кадр. Например, новый получатель, присоединяющийся к конференц-звонку, не сможет увидеть видео, пока не получит новый ключевой кадр, поскольку кадры с изменениями могут быть декодированы только при наличии последнего ключевого кадра и всех последующих кадров с изменениями. Аналогично, если кадры зашифрованы для получателя, они смогут декодировать кадры только после получения своего первого зашифрованного ключевого кадра.

Примеры

В этом примере показан код WebRTC кодированного преобразования, работающего в обработчике.

Код использует addEventListener() для регистрации обработчика функций для события rtctransform, что делает RTCRtpScriptTransformer доступным как event.transformer.

Обработчик создает TransformStream и передает кадры из event.transformer.readable через него в event.transformer.writable. Реализация потока преобразования transform() вызывается для каждого закодированного кадра, помещенного в очередь в потоке: она может считывать данные из кадра и в этом случае инвертирует байты, а затем помещает изменяемый кадр в очередь в потоке.

addEventListener("rtctransform", (event) => {
  const transform = new TransformStream({
    start() {}, // Called on startup.
    flush() {}, // Called when the stream is about to be closed.
    async transform(encodedFrame, controller) {
      // Reconstruct the original frame.
      const view = new DataView(encodedFrame.data);

      // Construct a new buffer
      const newData = new ArrayBuffer(encodedFrame.data.byteLength);
      const newView = new DataView(newData);

      // Negate all bits in the incoming frame
      for (let i = 0; i < encodedFrame.data.byteLength; ++i) {
        newView.setInt8(i, ~view.getInt8(i));
      }

      encodedFrame.data = newData;
      controller.enqueue(encodedFrame);
    },
  });
  event.transformer.readable
    .pipeThrough(transform)
    .pipeTo(event.transformer.writable);
});

Единственное, что следует отметить в отношении TransformStream выше, это то, что он помещает в очередь закодированные кадры медиа (RTCEncodedVideoFrame или RTCEncodedAudioFrame), а не произвольные «куски», и что свойства writableStrategy и readableStrategy не определены (потому что стратегия очереди полностью управляется пользовательским агентом).

Преобразование может выполняться как входящих, так и исходящих потоках WebRTC. Это не имеет значения в приведенном выше коде, потому что тот же алгоритм может использоваться для отправки для инвертирования кадров и в получении для их отмены. Если для потоков отправителя и получателя требуются разные алгоритмы преобразования, информация о текущем потоке должна передаваться из основного потока. Это делается путем установки аргумента options в соответствующем RTCRtpScriptTransform конструкторе, который затем становится доступным обработчику в RTCRtpScriptTransformer.options.

Ниже мы используем transformer.options для выбора преобразования отправителя или получателя. Обратите внимание, что свойства объекта произвольные (при условии, что значения могут быть сериализованы), и также можно передать MessageChannel и использовать его для общения с преобразованием во время выполнения, например, для обмена ключами шифрования.

// Code to instantiate transform and attach them to sender/receiver pipelines.
onrtctransform = (event) => {
  let transform;
  if (event.transformer.options.name == "senderTransform")
    transform = createSenderTransform();
  // returns a TransformStream (not shown)
  else if (event.transformer.options.name == "receiverTransform")
    transform = createReceiverTransform();
  // returns a TransformStream (not shown)
  else return;
  event.transformer.readable
    .pipeThrough(transform)
    .pipeTo(event.transformer.writable);
};

Обратите внимание, что приведенный выше код является частью более полных примеров, предоставленных в Использование WebRTC закодированных преобразований.

Спецификации

Спецификация
WebRTC Кодированное преобразование
# rtcrtpscripttransformer

Совместимость браузеров

Рабочий стол Мобильный
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на IOS Samsung Internet WebView Android
RTCRtpScriptTransformer Нет Нет 117 Нет 15.4 Нет 117 Нет 15.4 Нет Нет
generateKeyFrame Нет Нет 117 Нет 15.4 Нет 117 Нет 15.4 Нет Нет
options Нет Нет 117 Нет 15.4 Нет 117 Нет 15.4 Нет Нет
readable Нет Нет 117 Нет 15.4 Нет 117 Нет 15.4 Нет Нет
sendKeyFrameRequest Нет Нет 117 Нет 15.4 Нет 117 Нет 15.4 Нет Нет
writable Нет Нет 117 Нет 15.4 Нет 117 Нет 15.4 Нет Нет

См. также

  • Использование WebRTC кодированных преобразований
  • TransformStream

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpScriptTransformer

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API