From 71dcd6c0fb380727b7efb9a7db1fdd29812f5f34 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Fri, 17 Jun 2022 12:12:47 +0200 Subject: [PATCH] Performance update for Video --- Readme.md | 7 +- src/com/nuvoled/Main.java | 21 ++++-- src/com/nuvoled/sender/ViedeoSender.java | 81 ++++++++++++++++++++++++ 3 files changed, 102 insertions(+), 7 deletions(-) create mode 100644 src/com/nuvoled/sender/ViedeoSender.java diff --git a/Readme.md b/Readme.md index a312762..7699ba7 100644 --- a/Readme.md +++ b/Readme.md @@ -14,6 +14,11 @@ Nuvoled Application in Java `java -jar nuvoled.jar start [ip] picture` ### Show Screen ### `java -jar nuvoled.jar start [ip] screen [x] [y]` -[x] [y] = pixel +[x] [y] = pixel +_only sending if picture change_ +### Show Video ### +`java -jar nuvoled.jar start [ip] video [x] [y]` +[x] [y] = pixel +_more fps_ *** \ No newline at end of file diff --git a/src/com/nuvoled/Main.java b/src/com/nuvoled/Main.java index 56760fe..bf91e2c 100644 --- a/src/com/nuvoled/Main.java +++ b/src/com/nuvoled/Main.java @@ -1,9 +1,6 @@ package com.nuvoled; -import com.nuvoled.sender.PictureSender; -import com.nuvoled.sender.Reset; -import com.nuvoled.sender.SendColor; -import com.nuvoled.sender.SendSync; +import com.nuvoled.sender.*; import javax.imageio.ImageIO; import java.awt.*; @@ -82,9 +79,21 @@ public static void main(String[] args) throws IOException, AWTException, Interru while (true) { BufferedImage image = robot.createScreenCapture(rectangle); PictureSender.send(image); - } - + } + if(Objects.equals(args[2], "video")){ + System.out.println("Video Modus"); + GraphicsDevice[] screens = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices(); + Robot robot = new Robot(screens[0]); + Rectangle rectangle = new Rectangle(); + int x = Integer.parseInt(args[3]); + int y = Integer.parseInt(args[4]); + rectangle.setLocation(x, y); + rectangle.setSize(pannelGroessex + 1, pannelGroessey + 1); + while (true) { + BufferedImage image = robot.createScreenCapture(rectangle); + ViedeoSender.send(image); + } } } } diff --git a/src/com/nuvoled/sender/ViedeoSender.java b/src/com/nuvoled/sender/ViedeoSender.java new file mode 100644 index 0000000..a7acf1b --- /dev/null +++ b/src/com/nuvoled/sender/ViedeoSender.java @@ -0,0 +1,81 @@ +package com.nuvoled.sender; + +import com.nuvoled.Main; + +import java.awt.image.BufferedImage; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; + +public class ViedeoSender { + public static byte[] rgb = new byte[Main.getPannelGroessex() * Main.getPannelGroessey() * 3];// 128*128*3 + + public static void send(BufferedImage image) { + if (image.getHeight() < Main.getPannelGroessey() || image.getWidth() < Main.getPannelGroessex()) { + System.out.println("Falsches Format"); + System.out.println("Bitte Format von mindestens" + Main.getPannelGroessex() + " * " + Main.getPannelGroessey() + "Pixeln verwenden"); + System.exit(0); + } + int rgbCounterNumber = 0; + for (int y = 0; y <= (Main.getPannelGroessey() - 1); y++) { + for (int x = 0; x <= (Main.getPannelGroessex() - 1); x++) { + int pixel = image.getRGB(x, y); + int red = (pixel >> 16) & 0xff; + int green = (pixel >> 8) & 0xff; + int blue = (pixel) & 0xff; + rgb[rgbCounterNumber] = (byte) blue; + rgbCounterNumber++; + rgb[rgbCounterNumber] = (byte) green; + rgbCounterNumber++; + rgb[rgbCounterNumber] = (byte) red; + rgbCounterNumber++; + //System.out.println("x: " + x + " " + "y: " + y + " | " + "red: " + red + ", green: " + green + ", blue: " + blue + " | " + rgbCounterNumber + " | " + rgbCounterNumber / 3); + } + } + + try { + int pixel = 0; + for (int counter = 0; counter <= ((Main.getPannelGroessex() * Main.getPannelGroessey() * 3) / 1440) + 1; counter++) { //35 = (128 * 128 * 3)/1440 + byte[] message = new byte[1450]; + message[0] = 36; + message[1] = 36; + message[2] = 20; + message[3] = Main.getCourantFrame(); + message[4] = 10; //RGB + message[5] = 0; + message[6] = (byte) counter; //counter + message[7] = 0; + message[8] = (byte) ((byte) ((Main.getPannelGroessex() * Main.getPannelGroessey() * 3) / 1440) + 1); + message[9] = 45; + for (int i = 1; i < 1440; i = i + 3) { + if (pixel >= rgb.length) { + message[9 + i] = 0; + pixel++; + message[9 + 1 + i] = 0; + pixel++; + message[9 + 2 + i] = 0; + pixel++; + } else { + message[9 + i] = rgb[pixel]; + pixel++; + message[9 + 1 + i] = rgb[pixel]; + pixel++; + message[9 + 2 + i] = rgb[pixel]; + pixel++; + } + } + + InetAddress address = InetAddress.getByName(Main.getAddr()); + DatagramSocket datagramSocket = new DatagramSocket(); + datagramSocket.setSendBufferSize(1048576); + DatagramPacket packet = new DatagramPacket(message, message.length, address, Main.getPort()); + datagramSocket.send(packet); + } + Thread.sleep(20); + SendSync.send((byte) (Main.getCourantFrame() - 1)); + System.out.println("Sending Frame: " + Main.getCourantFrame()); + } catch (Exception e) { + System.err.println(e); + } + } +} \ No newline at end of file