Spec-Zone.ru › Web APIs

RTCRtpScriptTransformer: свойство options

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

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

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

Свойство options только для чтения интерфейса RTCRtpScriptTransformer возвращает объект, который (необязательно) был передан в качестве второго аргумента во время создания соответствующего RTCRtpScriptTransform.

Значение

Объект.

Описание

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

Options также могут быть использованы для отправки/передачи второго порта канала сообщений в рабочую трансформацию. Этот канал затем может использоваться для отправки динамической информации в поток преобразования, например, при изменении или добавлении ключей шифрования. Обратите внимание, что вы также можете отправлять сообщения в трансформу с помощью Worker.postMessage(), но вам нужно будет соответствующим образом перенаправлять сообщения, если рабочий поток используется в разных контекстах (при этом опция порта сообщений обеспечивает прямой канал для конкретного преобразования).

Примеры

Как указать текущий конвейер WebRTC

RTCRtpScriptTransform создаётся с определённым Worker и параметрами, а затем вставляется в конвейер исходящего или входящего WebRTC, назначив его соответственно RTCRtpSender.transform или RTCRtpReceiver.transform. Если один и тот же рабочий поток используется в преобразованиях для входящего и исходящего конвейеров, то вам необходимо указать опции в конструкторе, чтобы указать, являются ли обрабатываемые закодированные кадры входящими или исходящими.

В примере ниже показано, как это можно сделать для RTCRtpScriptTransform, добавленного в конвейер отправителя после добавления трека к соединению peer (RTCPeerConnection), а затем добавления другой трансформации в конвейер получателя при получении трека.

// videoSender is an RTCRtpSender.
const videoSender = peerConnection.addTrack(track, mediaStream);
videoSender.transform = new RTCRtpScriptTransform(worker, {
  name: "senderTransform",
});
peerConnection.ontrack = (event) => {
  // event.receiver is an RTCRtpReceiver
  event.receiver.transform = new RTCRtpScriptTransform(worker, {
    someOption: "receiverTransform",
  });
};

В каждом из вышеприведённых случаев мы передаём объект с другим значением для свойства name объекта опций, которое указывает конвейер, к которому была добавлена трансформация. Обратите внимание, что имена и значения свойств в options произвольны: важно, чтобы главный поток и рабочий поток оба понимали используемые свойства и значения.

Следующий код демонстрирует, как используемые опции применяются в рабочем потоке. Сначала мы реализуем обработчик для события rtctransform, которое срабатывает в глобальном объекте рабочего потока при создании соответствующего RTCRtpScriptTransform и при добавлении новых кадров для обработки. event.transformer - это RTCRtpScriptTransformer, который имеет свойства readable, writable, и options.

addEventListener("rtctransform", (event) => {
  let transform;
  // Select a transform based on passed options
  if (event.transformer.options.name == "senderTransform")
    transform = createSenderTransform(); // A TransformStream
  else if (event.transformer.options.name == "receiverTransform")
    transform = createReceiverTransform(); // A TransformStream
  else return;

  // Pipe frames from the readable to writeable through TransformStream
  event.transformer.readable
    .pipeThrough(transform)
    .pipeTo(event.transformer.writable);
});

Код создаёт разные TransformStream для обработки входящих и исходящих кадров, используя createSenderTransform() или createReceiverTransform(), в зависимости от переданных параметров (затем он направляет кадры из readable, через выбранный TransformStream, в writable).

Передача порта сообщений в трансформу

Этот пример демонстрирует, как создать канал сообщений и передать один из его портов в рабочую трансформу WebRTC, обрабатывающую закодированные данные. Этот поток главного потока затем может отправлять и передавать объекты и сообщения в трансформу, работающую в рабочем потоке, и наоборот.

Код ниже сначала создаёт MessageChannel, а затем создаёт RTCRtpScriptTransform, передавая значение port2 как свойство в аргументе options. Порт также включён в массив, переданный в качестве третьего аргумента конструктора, для передачи в контекст рабочего потока.

const channel = new MessageChannel();

const transform = new RTCRtpScriptTransform(
  worker,
  { purpose: "encrypter", port: channel.port2 },
  [channel.port2],
);

Рабочий поток затем может получить порт из события rtctransform, сгенерированного в глобальном объекте рабочего потока.

let messagePort;
addEventListener("rtctransform", (event) => {
  messagePort = event.transformer.options.port;
  // ... other transformer code
});

Код на каждой стороне канала может отправлять и передавать объекты на другую сторону с помощью MessagePort.postMessage() и прослушивать входящие сообщения с помощью своего события message.

Например, предположим, что у нас есть ключ шифрования в массиве типа Uint8Array с именем encryptionKey, мы можем передать его из главного потока в рабочий поток, как показано:

const encryptionKeyBuffer = encryptionKey.buffer;
channel.port1.postMessage(encryptionKeyBuffer, [encryptionKeyBuffer]);

Рабочий поток прослушает событие message для получения ключа:

  messagePort.addEventListener("message", (event) => {
    const encryptionKeyBuffer = event.data;
    // ... Use the encryptionKeyBuffer for encryption or any other purpose
  };

См. канал сообщений для получения дополнительной информации и примеров.

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

Спецификация
WebRTC Encoded Transform
# dom-rtcrtpscripttransformer-options

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

Рабочий стол Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
options Нет Нет 117 Нет 15.4 Нет 117 Нет 15.4 Нет Нет

См. также

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

© 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/options

Spec-Zone.ru

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