我正在使用PNaCl ffmpeg打開,讀取和解碼RTSP流。我現在有原始視頻幀,我需要將其轉移到WebGl以在畫布上呈現。如何使用WebGl在畫布上呈現二進制數據?
如何在畫布上渲染二進制數據?
我正在運行下面的代碼:我認爲我應該在運行此代碼後得到一個灰色的畫布,因爲我將RGBA值(120,120,120,1)傳遞給合成數據。
var canvas = document.getElementById('canvas');
var gl = initWebGL(canvas); //function initializes webgl
initViewport(gl, canvas); //initializes view port
console.log('viewport initialized');
var data = [];
for (var i = 0 ; i < 256; i++){
data.push(120,120,120,1.0);
}
console.log(data);
var pixels = new Uint8Array(data); // 16x16 RGBA image
var texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(
gl.TEXTURE_2D, // target
0, // mip level
gl.RGBA, // internal format
16, 16, // width and height
0, // border
gl.RGBA, //format
gl.UNSIGNED_BYTE, // type
pixels // texture data
);
console.log('pixels');
console.log(pixels);
<canvas id="canvas"></canvas>
我應該得到一個灰色的16×16盒被代表在畫布上,但我沒有得到這一點。我需要採取哪些額外步驟才能在畫布上正確呈現2D位圖?
PS。我從this article獲得幫助。
的可能是一些幫助:https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Tutorial/Animating_textures_in_WebGL – Kaiido
謝謝你,但由於我使用的是RTSP流,它不能在視頻標籤中播放,我使用PNaCl ffmpeg獲取流,因此從視頻元素獲取數據將不起作用。 –
你不應該做「gl.bufferData(gl.ARRAY_BUFFER,像素);」爲紋理數據。紋理數據通過teximage2d傳遞。同時發佈完整的代碼和瀏覽器的控制檯輸出。 – prabindh