RTCRtpScriptTransformer:sendKeyFrameRequest()
sendKeyFrameRequest()
是 RTCRtpScriptTransformer
接口的方法,可以由正在处理传入编码视频帧的 WebRTC 编码转换 调用,以便向发送方请求关键帧。
该方法仅可在接收视频(而非音频)帧时调用,并且如果出于任何原因,接收方在没有新的关键帧的情况下无法解码视频。请注意,用户代理可以决定不需要请求关键帧,在这种情况下,即使实际上没有发送请求,返回的 Promise 也会 fulfilled。
注意:例如,如果新用户加入 WebRTC 会议,则可能会调用它,以减少他们在收到关键帧并因此开始显示视频之前的时间。有关更多信息,请参阅 触发关键帧(在使用 WebRTC 编码转换中)。
语法
sendKeyFrameRequest()
参数
无
返回值
一个 Promise
,一旦发送请求或用户代理决定不需要请求,则以 undefined
fulfilled。
异常
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();
};
规范
规范 |
---|
WebRTC 编码转换 # dom-rtcrtpscripttransformer-sendkeyframerequest |
浏览器兼容性
BCD 表仅在启用 JavaScript 的浏览器中加载。