HTML5キャンバスで複数の動画を再生しました。成功。 node.js websocketとそのクライアントをブラウザで作成しました。成功。 私はこれらのプロジェクトを組み合わせようとしています。 アイデアは、キャンバス(admin.html)で再生されたビデオをnodejs websocket(サーバー)からブラウザクライアント(spectactor.html)に送信することです。私は失敗です。ビデオをキャンバスでwebsocketに再生する
助けてください。ここにスクリプトがあります。 runVidは、ws接続を確立した後、管理者がプレイリスト内の行をクリックしたときに呼び出されます。 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経由でブロブを送信していますが、サーバーからビデオを送ってクライアントで正しく再生するにはどうすればいいですか?ありがとう – Antoine
@Antoine私はこのためにHTTP上でWebMを使用しますが、あなたは何でも好きなものを使用できます。 FFmpegを使用して必要なトランスコードを最初に処理し、既存のビデオストリーミングサーバーに送信するほうが簡単かもしれません。 – Brad
これを少し拡張できますか?基本的に、私はWebMファイルをクライアントに送ることができますが、ビデオソースにそれらをロードする方法はありますか?私はMedia Extension APIを使用しようとしていますが、あなたの助けを借りて感謝します。 – Antoine