Javascript 画布到ffmpeg-无效数据错误

Javascript 画布到ffmpeg-无效数据错误,javascript,canvas,ffmpeg,pipe,rgb,Javascript,Canvas,Ffmpeg,Pipe,Rgb,我现在正在尝试将一些原始数据直接导入ffmpeg。数据来自画布。我所做的是: var imageData = ctx.getImageData(0,0,600,600); var dataArray = imageData.data; var rgbArray = []; for (var i = 0; i < dataArray.length; i+=4) { rgbArray.push([dataArray[i], dataArray[i+1], dataArray[i+2]]

我现在正在尝试将一些原始数据直接导入ffmpeg。数据来自画布。我所做的是:

var imageData = ctx.getImageData(0,0,600,600);
var dataArray = imageData.data;
var rgbArray = [];
for (var i = 0; i < dataArray.length; i+=4) {
    rgbArray.push([dataArray[i], dataArray[i+1], dataArray[i+2]])
}

var rgb24Array = rgbArray.map(function(rgbList){
    return (rgbList[0] << 16) | (rgbList[1] << 8) | (rgbList[2])
});
基本上,我从画布上获得的图像数据每个像素有4个元素(rgba),我首先过滤掉rgb值,然后将它们打包发送到ffmpeg,我直接将它们像
ffmpeg.stdin.write(rgb24Array)
一样导入

但是我得到了一个
类型错误:无效数据
,我不知道为什么。。。我还试图保持数据原样,并使用
rgba
作为
pix_fmt
,但错误相同

错误的堆栈跟踪是:

TypeError: invalid data
   at Socket.write (net.js:617:11)
   at null._repeat (....line with ffmpeg.stdin.write() in it)
   at wrapper [as_onTimeout] (timers.js:275:11)
   at Timer.listonTimeout (timers.js:92:15)
有人知道问题出在哪里吗

编辑: 更改了一些内容,首先,我现在使用Uint8Array:

var imageData = ctx.getImageData(0,0,600,600);
            var srcArray = imageData.data;
            var dstArray = new Uint8Array(imageData.width * imageData.height * 3);
            for(var i = 0, p = 0; i < srcArray.length; i++) { // i++ skips alpha
              dstArray[p++] = srcArray[i++];                   // red comp. and incr.
              dstArray[p++] = srcArray[i++];                   // green comp. and incr.
              dstArray[p++] = srcArray[i++];                   // blue comp. and incr.
            }

            ffmpeg.stdin.write(dstArray);
var-imageData=ctx.getImageData(0,0600600);
var srcArray=imageData.data;
var dstArray=新的Uint8Array(imageData.width*imageData.height*3);
对于(var i=0,p=0;i

还向ffmpegArgs添加了
-video\u size
参数。但它仍然不起作用,我也会犯同样的错误。

我正在退出(暂时删除答案)。如果可以的话,我今天晚些时候再去看看。同时,可能还有其他人熟悉与套接字/协议等相关的问题@K3N好的,谢谢你。你解决过这个问题吗?
var imageData = ctx.getImageData(0,0,600,600);
            var srcArray = imageData.data;
            var dstArray = new Uint8Array(imageData.width * imageData.height * 3);
            for(var i = 0, p = 0; i < srcArray.length; i++) { // i++ skips alpha
              dstArray[p++] = srcArray[i++];                   // red comp. and incr.
              dstArray[p++] = srcArray[i++];                   // green comp. and incr.
              dstArray[p++] = srcArray[i++];                   // blue comp. and incr.
            }

            ffmpeg.stdin.write(dstArray);