123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- var canvasSource;
- var camera1Ctx;
- var camera2Ctx;
- var isCopying = false;
- var timer;
- const mergedViewSize = [1920, 1080];
- const camera1Size = [640, 480];
- const camera1CilpStartPoint = [1280, 600];
- const camera2Size = [640, 480];
- const camera2PartSize = [640, 160];
- const camera2CilpStartPoint = [0, 200];
- var camera1Width;
- var camera1Height;
- var camera1CilpX;
- var camera1CilpY;
- var camera2Width;
- var camera2Height;
- var camera2PartWidth;
- var camera2PartHeight;
- var camera2CilpX;
- var camera2CilpY;
- /// 拷贝视频流
- function copyVideoStream() {
- let gl = canvasSource.getContext("webgl", { preserveDrawingBuffer: true });
- let camera1Pixels = new Uint8Array(camera1Width * camera1Height * 4);
- let camera2PartPixels = new Uint8Array(
- camera2PartWidth * camera2PartHeight * 4 * 3
- );
-
- gl.readPixels(
- camera1CilpX,
- camera1CilpY,
- camera1Width,
- camera1Height,
- gl.RGBA,
- gl.UNSIGNED_BYTE,
- camera1Pixels
- );
- camera1Ctx.canvas.width = camera1Width;
- camera1Ctx.canvas.height = camera1Height;
- let camera1ImageData = camera1Ctx.createImageData(
- camera1Width,
- camera1Height
- );
- camera2Ctx.canvas.width = camera2Width;
- camera2Ctx.canvas.height = camera2Height;
- let camera2PartImageData = camera2Ctx.createImageData(
- camera2PartWidth * 3,
- camera2PartHeight
- );
- // 绘制摄像头1画面
- camera1ImageData.data.set(camera1Pixels);
- camera1Ctx.putImageData(camera1ImageData, 0, 0);
- // 绘制摄像头2画面
- // 分三次填充数据
- gl.readPixels(
- camera2CilpX,
- camera2CilpY,
- camera2PartWidth * 3,
- camera2PartHeight,
- gl.RGBA,
- gl.UNSIGNED_BYTE,
- camera2PartPixels
- );
- camera2PartImageData.data.set(camera2PartPixels);
- camera2Ctx.putImageData(camera2PartImageData, 0, camera2PartHeight * 2);
- camera2Ctx.putImageData(
- camera2PartImageData,
- -camera2PartWidth,
- camera2PartHeight
- );
- camera2Ctx.putImageData(camera2PartImageData, -camera2PartWidth * 2, 0);
- /// 清理变量
- camera1Pixels = null;
- camera2PartPixels = null;
- camera1ImageData = null;
- camera2PartImageData = null;
- }
- // Start copying the video stream
- function startCopying() {
- if (!isCopying) {
- isCopying = true;
- console.log("开始拷贝视频流");
- const video1 = document.getElementById("video1");
- canvasSource = video1;
- const camera1 = document.getElementById("camera1");
- const camera2 = document.getElementById("camera2");
- camera1Ctx = camera1.getContext("2d");
- camera2Ctx = camera2.getContext("2d");
- initSize();
- }
- }
- // Stop copying the video stream
- function stopCopying() {
- isCopying = false;
- timer = null;
- }
- function initSize() {
- const gl = canvasSource.getContext("webgl");
- const scale = gl.drawingBufferWidth / mergedViewSize[0];
- console.log("Scale", scale);
- camera1Width = parseInt(camera1Size[0] * scale);
- camera1Height = parseInt(camera1Size[1] * scale);
- camera1CilpX = parseInt(camera1CilpStartPoint[0] * scale);
- camera1CilpY = parseInt(camera1CilpStartPoint[1] * scale);
- camera2Width = parseInt(camera2Size[0] * scale);
- camera2Height = parseInt(camera2Size[1] * scale);
- camera2PartWidth = parseInt(camera2PartSize[0] * scale);
- camera2PartHeight = parseInt(camera2PartSize[1] * scale);
- camera2CilpX = parseInt(camera2CilpStartPoint[0] * scale);
- camera2CilpY = parseInt(camera2CilpStartPoint[1] * scale);
- }
|