RTCRtpScriptTransformer: sendKeyFrameRequest()
Ограниченная доступность
Эта функция не относится к Baseline, поскольку она не работает в некоторых из наиболее широко используемых браузеров.
Метод sendKeyFrameRequest() интерфейса RTCRtpScriptTransformer может вызываться WebRTC Encoded Transform, обрабатывающим входящие закодированные видеокадры, для запроса ключевого кадра от отправителя.
Метод может вызываться только при получении видео (а не аудио) кадров и если по какой-либо причине получатель не сможет декодировать видео без нового ключевого кадра. Обратите внимание, что пользовательский агент может решить, что запрос на ключевой кадр не требуется, в этом случае возвращаемое обещание выполнится, даже если запрос фактически не был отправлен.
Примечание: Его можно вызвать, например, при присоединении нового пользователя к конференции WebRTC, чтобы сократить время, необходимое для получения ключевого кадра и начала отображения видео. Дополнительную информацию см. в Разделе "Инициирование ключевого кадра" в разделе "Использование WebRTC Encoded Transforms".
Синтаксис
sendKeyFrameRequest()
Параметры
Нет.
Возвращаемое значение
Обещание Promise, которое выполняется со значением undefined, после отправки запроса или если пользовательский агент решит, что это не нужно.
Исключения
InvalidStateError-
Депакетизатор не обрабатывает видеопакеты или находится в
undefinedсостоянии.
Примеры
В приведенном ниже примере показано, как основной поток веб-приложения WebRTC, получающего закодированное видео, может передать ключ дешифрования трансформеру получателя и запросить отправку ключевого кадра.
Обратите внимание, что основной поток не имеет прямого доступа к объекту RTCRtpScriptTransformer, поэтому ему нужно передать ключ в рабочий процесс. Здесь это делается с помощью MessageChannel, передавая второй порт коду трансформера, выполняемому в рабочем потоке. Код предполагает, что уже есть подключение к собеседнику, и videoReceiver - это RTCRtpReceiver.
const worker = new Worker("worker.js");
const channel = new MessageChannel();
videoReceiver.transform = new RTCRtpScriptTransform(
worker,
{ name: "receiverTransform", port: channel.port2 },
[channel.port2],
);
// Post new key to the receiver
channel.port1.start();
channel.port1.postMessage({
key: "93ae0927a4f8e527f1gce6d10bc6ab6c",
});
Обработчик события rtctransform в рабочем потоке получает порт как event.transformer.options.port. Приведенный ниже фрагмент кода демонстрирует, как он используется для прослушивания событий message на канале. При получении события обработчик получает key, а затем вызывает sendKeyFrameRequest() на трансформере.
event.transformer.options.port.onmessage = (event) => {
const { key } = event.data;
// key is used by the transformer to decrypt frames (not shown)
// Request sender to emit a key frame.
// Here 'rcEvent' is the rtctransform event.
rcEvent.transformer.sendKeyFrameRequest();
};
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
sendKeyFrameRequest |
Нет | Нет | 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/sendKeyFrameRequest