RTCRtpScriptTransformer: sendKeyFrameRequest() 方法
RTCRtpScriptTransformer 接口的 sendKeyFrameRequest() 方法可以由处理传入的编码视频帧的 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 Encoded Transform # dom-rtcrtpscripttransformer-sendkeyframerequest |
浏览器兼容性
加载中…