Spec-Zone.ru › Web APIs

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 Нет Нет

См. также

  • Использование преобразований 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/generateKeyFrame

Spec-Zone.ru

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