我有一个来自电子应用程序内Redis回调的RGBA流:
redis.on('messageBuffer', function(channel, frame) {
if (channel.toString() !== REDIS_EVENT) return;
});
为了通过WebRTC将其作为视频传送,我使用HTMLCanvasElement.captureStream()创建了一个Canvas并将其用作我的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);
});
stream
是CanvasCaptureMediaStream对象,以下是我如何将其用作WebRTC流源:
function createWebRTC(stream, clientId) {
let pc = new RTCPeerConnection();
// ...
pc.addStream(stream);
}
这种方法很有效,但它绝对没有效率,因为我每次都必须在画布上绘制它以提供MediaStream对象。
有没有更好的方法将RGBA流转换为VideoStreamTrack
?