如何使用 javaFx 应用程序对 IPTV 进行红外遥控?

How to IR remote control to IPTV with javaFx application?

我正在尝试开发一个 JavaFx 应用程序来测试 IPTV。我的任务是检查频道更改是否成功。目前没有任何组件或设备。但是我正在搜索这个任务,之后我会购买

我的应用程序将通过红外设备发送一些远程控制命令。

Here 是红外设备,但它没有 Java API。

有解决办法吗?

我搜索并找到了一个名为 RedRat 的设备。我们可以使用它linux和windows OS.

是usb-infrared设备

有一个 utility 用于将它与编程语言一起使用。 这是一个示例 java 代码,可能对某些人有用。但是你应该有一个redrat设备。

第一步,您必须下载this redRatHub 并粘贴一个方向 其次,运行 main class 与 redrathub 文件夹具有相同的路径。

public class MyDemo {

    private static Client client;
    private static String DEVICE_NAME = "";
    private static String DATA_SET = "";

    public static void main(String[] args) {

        try {

            startRedRat();

            client = new Client();
            client.openSocket("localhost", 40000);

            DEVICE_NAME = client.readData("hubquery=\"list redrats\"").split("]")[1].split("\n")[0].trim();
            DATA_SET = client.readData("hubquery=\"list datasets\"").split("\n")[1];

            sendCommand("power");
            TimeUnit.SECONDS.sleep(5);

            sendCommand("btn1", "btn1", "btn1", "btn1");
            sendCommand("btnOK");
            TimeUnit.SECONDS.sleep(30);
            sendCommand("btnBACK");
            sendCommand("channel+");
            sendCommand("btn6", "btn1");
            sendCommand("channel+");
            sendCommand("channel-");
            sendCommand("volume+");
            sendCommand("volume-");
            sendCommand("power");

            client.closeSocket();

            p.destroy();

        } catch (Exception ex) {
            System.err.println(ex.getMessage());
        } finally {
            System.out.println("Finished. Hit <RETURN> to exit...");
        }
    }


    private static void sendCommand(String... command) {

        try {
            for (String cmd : command) {
                client.sendMessage("name=\"" + DEVICE_NAME + "\" dataset=\"" + DATA_SET + "\" signal=\"" + cmd + "\"");
                TimeUnit.MILLISECONDS.sleep(500);
                System.out.println(cmd + " signal send");
            }
            TimeUnit.SECONDS.sleep(3);

        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void startRedRat() {
        try {
            SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
                @Override
                protected Void doInBackground() throws Exception {
                    p = Runtime.getRuntime().exec("cmd /C C:\RedRatHub\RedRatHubCmd.exe C:\RedRatHub\TivibuDB.xml");
                    return null;
                }
            };
            worker.run();
            TimeUnit.SECONDS.sleep(5);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这个class正在通过串口与redrat设备通信。

public class Client {

        private Socket socket;
        private DataOutputStream out;
        private DataInputStream in;

        /*
         * Opens the socket to RedRatHubCmd.
         */
        public void openSocket(String host, int port) throws UnknownHostException, IOException {
            if (socket != null && socket.isConnected()) return;

            socket = new Socket(host, port);
            out = new DataOutputStream(socket.getOutputStream());
            in = new DataInputStream(socket.getInputStream());
        }

        /*
         * Closes the RedRatHubCmd socket.
         */
        public void closeSocket() throws IOException {
            socket.close();
        }

        /*
         * Sends a message to the readData() method. Use when returned data from RedRatHub is not needed.
         */
        public void sendMessage(String message) throws Exception {
            String res = readData(message);
            if (!res.trim().equals("OK")) {
                throw new Exception("Error sending message: " + res);
            }
        }

        /*
         * Reads data back from RedRatHub. Use when returned data is needed to be output.
         */
        public String readData(String message) throws IOException {
            if (socket == null || !socket.isConnected()) {
                System.out.println("\tSocket has not been opened. Call 'openSocket()' first.");
                return null;
            }

            // Send message
            out.write((message + "\n").getBytes("UTF-8"));

            // Check response. This is either a single line, e.g. "OK\n", or a multi-line response with
            // '{' and '}' start/end delimiters.
            String received = "";
            byte[] inBuf = new byte[256];
            while (true) {
                // Read data...
                int inLength = in.read(inBuf);
                //byte[] thisMSg = new byte[inLength];
                String msg = new String(Arrays.copyOfRange(inBuf, 0, inLength), "UTF-8");
                received += msg;
                if (checkEom(received)) return received;
            }
        }

        /*
         * Checks for the end of a message
         */
        public boolean checkEom(String message) {
            // Multi-line message
            if (message.trim().endsWith("}")) {
                return message.startsWith("{");
            }

            // Single line message
            return message.endsWith("\n");
            //return true;
        }
    }