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
};
См. канал сообщений для получения дополнительной информации и примеров.
Спецификации
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
options |
Нет | Нет | 117 | Нет | 15.4 | Нет | 117 | Нет | 15.4 | Нет | Нет |
См. также
© 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