WebRTC:是否可以从 RGBA ArrayBuffer 创建 VideoStreamTrack?

Dan*_*och 6 javascript chromium webrtc electron

我有一个来自 Electron 应用程序内的 Redis 回调的 RGBA 流:

redis.on('messageBuffer', function(channel, frame) {
  if (channel.toString() !== REDIS_EVENT) return;

});
Run Code Online (Sandbox Code Playgroud)

为了通过 WebRTC 将其作为视频传送,我创建了一个 Canvas,并使用HTMLCanvasElement.captureStream()将其用作 WebRTC 连接的源流

let canvasCtx = myCanvas.getContext('2d');
let stream = myCanvas.captureStream(10);

redis.on('messageBuffer', function(channel, frame) {
  if (channel.toString() !== REDIS_EVENT) return;

  let imageData = canvasCtx.createImageData(myCanvas.width, myCanvas.height);
  imageData.data.set(frame);
  canvasCtx.putImageData(imageData, 0, 0);
});
Run Code Online (Sandbox Code Playgroud)

stream是一个CanvasCaptureMediaStream对象,这里是我如何使用它作为 WebRTC 流源:

function createWebRTC(stream, clientId) {
  let pc = new RTCPeerConnection();

  // ...

  pc.addStream(stream);
}
Run Code Online (Sandbox Code Playgroud)

这种方法是有效的,但它绝对没有效率,因为我每次都必须在画布中绘制它才能提供MediaStream对象。

是否有更好的方法将 RGBA 流转换为VideoStreamTrack