RTCRtpScriptTransformer: phương thức sendKeyFrameRequest()

Baseline 2025
Newly available

Since October 2025, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

Phương thức sendKeyFrameRequest() của giao diện RTCRtpScriptTransformer có thể được gọi bởi một WebRTC Encoded Transform đang xử lý các khung video được mã hóa đến, để yêu cầu khung chính từ người gửi.

Phương thức chỉ có thể được gọi khi nhận các khung video (không phải audio) và nếu, vì bất kỳ lý do gì, người nhận sẽ không thể giải mã video mà không có khung chính mới. Lưu ý rằng user agent có thể quyết định rằng yêu cầu khung chính là không cần thiết, trong trường hợp đó promise được trả về sẽ được giải quyết ngay cả khi yêu cầu thực sự không được gửi.

Note: Ví dụ, nó có thể được gọi khi một người dùng mới tham gia cuộc gọi WebRTC, để giảm thời gian trước khi họ nhận được khung chính và do đó có thể bắt đầu hiển thị video. Để biết thêm thông tin, xem Triggering a key frame trong Using WebRTC Encoded Transforms.

Cú pháp

js
sendKeyFrameRequest()

Tham số

Không có.

Giá trị trả về

Một Promise được giải quyết với undefined sau khi yêu cầu được gửi, hoặc user agent quyết định rằng không cần thiết.

Ngoại lệ

InvalidStateError

De-packetizer không xử lý các gói video, hoặc là undefined.

Ví dụ

Ví dụ bên dưới cho thấy cách luồng chính của ứng dụng WebRTC đang nhận video được mã hóa có thể truyền khóa giải mã đến transform nhận, và yêu cầu người gửi phát ra khung chính.

Lưu ý rằng luồng chính không có quyền truy cập trực tiếp vào đối tượng RTCRtpScriptTransformer, vì vậy nó cần truyền khóa đến worker. Ở đây chúng ta thực hiện điều đó với một MessageChannel, transfer cổng thứ hai đến mã transformer chạy trong worker. Mã giả định đã có một peer connection, và videoReceiver là một RTCRtpReceiver.

js
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",
});

Trình xử lý sự kiện rtctransform trong worker lấy cổng là event.transformer.options.port. Đoạn mã bên dưới cho thấy cách nó được sử dụng để lắng nghe các sự kiện message trên kênh. Nếu nhận được sự kiện, hàm xử lý lấy key, sau đó gọi sendKeyFrameRequest() trên transformer.

js
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();
};

Thông số kỹ thuật

Specification
WebRTC Encoded Transform
# dom-rtcrtpscripttransformer-sendkeyframerequest

Tương thích trình duyệt

Xem thêm