我制作了多个运行在HTML5画布上的视频。成功。 我在浏览器上创建了node.js websocket及其客户端。成功。 现在我正在尝试将这些项目结合起来。 这个想法是通过nodejs websocket(服务器)发送到canvas(admin.html)上的视频到浏览器客户端(spectactor.html)。我失败了。将画布上播放的视频发送到websocket
请帮忙。这是脚本。当管理员在建立ws连接后点击播放列表中的一行时调用runVid。 runVid然后调用draw()和sendImage。 sendImage根本没有被触发。怎么了?我也把sendImage()放在draw()函数中,但是这也失败了。
var port = 8080;
var ws = new WebSocket('ws://127.0.0.1:' + port,['soap', 'xmpp']);
ws.binaryType = 'arraybuffer';
function runVid(){
var video = document.getElementById('video');
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
var cw = Math.floor(canvas.clientWidth);
var ch = Math.floor(canvas.clientHeight);
canvas.width = cw;
canvas.height = ch;
video.addEventListener('play', function(){
draw(this, context, cw, ch);
sendImage(context, cw, ch);
}, false);
}
function draw(video,canvas,width,height) {
if(video.paused || video.ended) return false;
canvas.drawImage(video,0,0,width,height);
setTimeout(draw,20,video,canvas,width,height);
}
function sendImage(context, width,height){
var imageData = context.getImageData(0, 0, width, height);
var canvasPixelArray = imageData.data;
var canvasPixelLen = canvasPixelArray.length;
for(var j = 0; j<canvasPixelLen;j++){
byteArray[j] = canvasPixelArray[j];
}
ws.send(byteArray.buffer);
console.log("byteArray sent");
}
这就是我正在做的,我通过socketIO发送blob到我的服务器,但是如何从我的服务器发送视频并正确地在客户端上播放它?谢谢 – Antoine
@Antoine我为此使用HTTP上的WebM,但你可以使用任何你想要的。您可能会发现使用FFmpeg首先处理任何需要的代码转换并发送到现有的视频流服务器会更加轻松。 – Brad
你可以扩展一下吗?基本上,我可以将WebM文件发送到客户端,但是如何将它们加载到视频源?我正在尝试使用媒体扩展程序API,但这对我来说非常困难,感谢您的帮助 – Antoine