RTCRtpScriptTransformer: generateKeyFrame()
Ограниченная доступность
Эта функция не относится к Baseline, так как не работает в некоторых из наиболее широко используемых браузеров.
Метод generateKeyFrame() интерфейса RTCRtpScriptTransformer заставляет кодер видео генерировать ключевой кадр.
Синтаксис
generateKeyFrame() generateKeyFrame(rid)
Параметры
ridНеобязательно-
Строка, содержащая «идентификатор ограничения» («RID») потока/кодера, который должен сгенерировать новый ключевой кадр.
Значение должно содержать от 1 до 255 символов (включительно) и содержать только алфавитно-цифровые символы, знак подчеркивания и дефис (
A-Z,a-z,0-9,-,_). RID чувствительны к регистру и должны быть уникальными для канала peer-связи.Используется первый кодер, соответствующий указанному
rid. Если ни один кодер не соответствуетrid, используется первый кодер, иridустанавливается в ограничения кодера.
Возвращаемое значение
Обещание Promise, которое выполняется с отметкой времени кадра или отклоняется со значением исключения.
Исключения
InvalidStateError-
Кодер не обрабатывает кадры видео или находится в
undefinedсостоянии. TypeError-
Предоставленный
ridне соответствует грамматическим требованиям. NotFoundError-
Нет видеокодеров. Это может быть вызвано, если соответствующий
RTCRtpSenderнеактивен или его дорожка завершена.
Описание
Этот метод может быть вызван преобразователем, обрабатывающим исходящие закодированные кадры видео, чтобы принудительно отправить новый полный (ключевой) кадр. Это может потребоваться преобразователю WebRTC закодированных кадров, который шифрует кадры, для обеспечения того, что при добавлении нового ключа шифрования, кадр с этим ключом будет отправлен как можно быстрее.
Отправитель может указать RID (также называемый «идентификатором ограничения» или «ID потока RTP») для управления кодеком, который генерирует новый ключевой кадр. Поток может содержать (мультиплексирование) несколько версий одного источника, каждая с разными свойствами, такими как разрешение и частота кадров. RID используется для указания определенного потока RTP и, следовательно, кодера, который должен сгенерировать новый кадр. Обратите внимание, что доступные значения RID устанавливаются при создании трансивера, используемого подключением. Значения RID можно запросить, вызвав RTCRtpSender.getParameters() и просмотрев свойство encodings возвращаемого значения.
Обещание, возвращаемое методом, выполняется непосредственно перед добавлением соответствующего ключевого кадра в RTCRtpScriptTransformer для чтения.
Примечание: Отправка нескольких потоков (RID) одновременно называется «мультиплексированием». Эта функция предоставляет промежуточному узлу один и тот же поток с различными уровнями качества видео, позволяя ему управлять пропускной способностью, выборочно передавая подходящие уровни участникам и быстро переключать разрешение в режиме реального времени (например, переключаться на передачу низкокачественного видео всем, кроме активного говорящего). Получатель всегда получает только один поток, поэтому сопоставимый метод получателя RTCRtpScriptTransformer.sendKeyFrameRequest() не требует указания RID.
Примеры
Отправка ключевого кадра
В примере ниже показано, как главный поток может передать ключ шифрования преобразователю отправителя и запустить кодер для генерации ключевого кадра.
Обратите внимание, что главный поток не имеет прямого доступа к объекту RTCRtpScriptTransformer, поэтому ему необходимо передать ключ и RID в рабочий процесс. Здесь мы делаем это с MessageChannel, передавая второй порт коду преобразователя, выполняемому в рабочем процессе. Код предполагает, что уже существует соединение peer, и videoSender является RTCRtpSender.
const worker = new Worker("worker.js");
const channel = new MessageChannel();
videoSender.transform = new RTCRtpScriptTransform(
worker,
{ name: "senderTransform", port: channel.port2 },
[channel.port2],
);
// Post RID and new key to the sender
channel.port1.start();
channel.port1.postMessage({
rid: "1",
key: "93ae0927a4f8e527f1gce6d10bc6ab6c",
});
Обработчик событий rtctransform в рабочем процессе получает порт и использует его для прослушивания событий message. Если событие получено, оно получает rid и key, а затем вызывает generateKeyFrame().
event.transformer.options.port.onmessage = (event) => {
const { rid, key } = event.data;
// key is used by the transformer to encrypt frames (not shown)
// Get codec to generate a new key frame using the rid
// Here 'rcEvent' is the rtctransform event.
rcEvent.transformer.generateKeyFrame(rid);
};
Спецификации
| Спецификация |
|---|
| Преобразование закодированных кадров WebRTC # dom-rtcrtpscripttransformer-generatekeyframe |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
generateKeyFrame |
Нет | Нет | 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/generateKeyFrame