From c795d1c28858b3300ad43792d58cfe825961f06d Mon Sep 17 00:00:00 2001
From: Dana <Dana_Lee1016@126.com>
Date: 星期日, 30 十一月 2025 11:16:01 +0800
Subject: [PATCH] 1.tcp udp 切换

---
 app/src/main/java/com/anyun/h264/JT1076ProtocolHelper.java |  150 ++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 146 insertions(+), 4 deletions(-)

diff --git a/app/src/main/java/com/anyun/h264/JT1076ProtocolHelper.java b/app/src/main/java/com/anyun/h264/JT1076ProtocolHelper.java
index 0613a1c..1489907 100644
--- a/app/src/main/java/com/anyun/h264/JT1076ProtocolHelper.java
+++ b/app/src/main/java/com/anyun/h264/JT1076ProtocolHelper.java
@@ -10,7 +10,7 @@
 
 /**
  * JT/T 1076-2016 鍗忚宸ュ叿绫�
- * 鎻愪緵UDP鍙戦�併�丼IM鍗″彿BCD杞崲銆丷TP鍖呭垱寤虹瓑鍏叡鍔熻兘
+ * 鎻愪緵UDP/TCP鍙戦�併�丼IM鍗″彿BCD杞崲銆丷TP鍖呭垱寤虹瓑鍏叡鍔熻兘
  */
 public class JT1076ProtocolHelper {
     private static final String TAG = "JT1076ProtocolHelper";
@@ -37,11 +37,23 @@
     public static final int RTP_PAYLOAD_TYPE_VIDEO = 96;  // 瑙嗛璐熻浇绫诲瀷
     public static final int RTP_PAYLOAD_TYPE_AUDIO = 97;  // 闊抽璐熻浇绫诲瀷
     
-    // UDP鍙傛暟
+    // 浼犺緭鍗忚绫诲瀷
+    public static final int PROTOCOL_TYPE_UDP = 0;  // UDP鍗忚
+    public static final int PROTOCOL_TYPE_TCP = 1;  // TCP鍗忚
+    
+    // 鏈嶅姟鍣ㄥ弬鏁�
     private String serverIp;
     private int serverPort;
+    
+    // 鍗忚绫诲瀷锛堥粯璁DP锛�
+    private int protocolType = PROTOCOL_TYPE_UDP;
+    
+    // UDP鍙傛暟
     private DatagramSocket udpSocket;
     private InetAddress serverAddress;
+    
+    // TCP鍙傛暟
+    private JT1076TcpClient tcpClient;
     
     // RTP鍗忚鍙傛暟
     private String simCardNumber = "123456789012"; // 12浣峉IM鍗″彿
@@ -49,11 +61,45 @@
     private short sequenceNumber = 0; // 鍖呭簭鍙凤紙鑷姩閫掑锛�
     
     /**
-     * 璁剧疆UDP鏈嶅姟鍣ㄥ湴鍧�
+     * 璁剧疆鏈嶅姟鍣ㄥ湴鍧�
      */
     public void setServerAddress(String ip, int port) {
         this.serverIp = ip;
         this.serverPort = port;
+        // 濡傛灉TCP瀹㈡埛绔凡瀛樺湪锛屾洿鏂板湴鍧�
+        if (tcpClient != null) {
+            tcpClient.setServerAddress(ip, port);
+        }
+    }
+    
+    /**
+     * 璁剧疆浼犺緭鍗忚绫诲瀷锛圲DP鎴朤CP锛�
+     * @param protocolType PROTOCOL_TYPE_UDP 鎴� PROTOCOL_TYPE_TCP
+     */
+    public void setProtocolType(int protocolType) {
+        if (protocolType != PROTOCOL_TYPE_UDP && protocolType != PROTOCOL_TYPE_TCP) {
+            Log.w(TAG, "Invalid protocol type: " + protocolType + ", using UDP");
+            protocolType = PROTOCOL_TYPE_UDP;
+        }
+        
+        // 濡傛灉鍗忚绫诲瀷鏀瑰彉锛屽厛鍏抽棴鏃х殑杩炴帴
+        if (this.protocolType != protocolType) {
+            if (this.protocolType == PROTOCOL_TYPE_UDP) {
+                closeUdpSocket();
+            } else {
+                closeTcpSocket();
+            }
+        }
+        
+        this.protocolType = protocolType;
+        Log.d(TAG, "Protocol type set to: " + (protocolType == PROTOCOL_TYPE_UDP ? "UDP" : "TCP"));
+    }
+    
+    /**
+     * 鑾峰彇褰撳墠鍗忚绫诲瀷
+     */
+    public int getProtocolType() {
+        return protocolType;
     }
     
     /**
@@ -62,6 +108,17 @@
     public void setProtocolParams(String simCardNumber, byte logicalChannelNumber) {
         this.simCardNumber = simCardNumber;
         this.logicalChannelNumber = logicalChannelNumber;
+    }
+    
+    /**
+     * 鍒濆鍖朣ocket锛堟牴鎹崗璁被鍨嬭嚜鍔ㄩ�夋嫨UDP鎴朤CP锛�
+     */
+    public boolean initializeSocket() {
+        if (protocolType == PROTOCOL_TYPE_UDP) {
+            return initializeUdpSocket();
+        } else {
+            return initializeTcpSocket();
+        }
     }
     
     /**
@@ -85,6 +142,59 @@
     }
     
     /**
+     * 鍒濆鍖朤CP Socket
+     */
+    public boolean initializeTcpSocket() {
+        try {
+            if (serverIp == null || serverIp.isEmpty()) {
+                Log.e(TAG, "Server IP not set");
+                return false;
+            }
+            
+            if (tcpClient == null) {
+                tcpClient = new JT1076TcpClient();
+                tcpClient.setServerAddress(serverIp, serverPort);
+                
+                // 璁剧疆杩炴帴鐘舵�佺洃鍚櫒
+                tcpClient.setConnectionListener(new JT1076TcpClient.ConnectionListener() {
+                    @Override
+                    public void onConnected() {
+                        Log.d(TAG, "TCP connection established");
+                    }
+                    
+                    @Override
+                    public void onDisconnected() {
+                        Log.d(TAG, "TCP connection disconnected");
+                    }
+                    
+                    @Override
+                    public void onError(Throwable cause) {
+                        Log.e(TAG, "TCP connection error", cause);
+                    }
+                });
+            }
+            
+            tcpClient.connect();
+            Log.d(TAG, "TCP socket initializing, target: " + serverIp + ":" + serverPort);
+            return true;
+        } catch (Exception e) {
+            Log.e(TAG, "Initialize TCP socket failed", e);
+            return false;
+        }
+    }
+    
+    /**
+     * 鍏抽棴Socket锛堟牴鎹崗璁被鍨嬭嚜鍔ㄩ�夋嫨锛�
+     */
+    public void closeSocket() {
+        if (protocolType == PROTOCOL_TYPE_UDP) {
+            closeUdpSocket();
+        } else {
+            closeTcpSocket();
+        }
+    }
+    
+    /**
      * 鍏抽棴UDP Socket
      */
     public void closeUdpSocket() {
@@ -100,7 +210,28 @@
     }
     
     /**
-     * 鍙戦�乁DP鍖�
+     * 鍏抽棴TCP Socket
+     */
+    public void closeTcpSocket() {
+        if (tcpClient != null) {
+            tcpClient.disconnect();
+            tcpClient = null;
+        }
+    }
+    
+    /**
+     * 鍙戦�丷TP鍖咃紙鏍规嵁鍗忚绫诲瀷鑷姩閫夋嫨UDP鎴朤CP锛�
+     */
+    public void sendPacket(byte[] packet) {
+        if (protocolType == PROTOCOL_TYPE_UDP) {
+            sendUdpPacket(packet);
+        } else {
+            sendTcpPacket(packet);
+        }
+    }
+    
+    /**
+     * 鍙戦�乁DP鍖咃紙淇濇寔鍚戝悗鍏煎锛�
      */
     public void sendUdpPacket(byte[] packet) {
         try {
@@ -117,6 +248,17 @@
     }
     
     /**
+     * 鍙戦�乀CP鍖�
+     */
+    public void sendTcpPacket(byte[] packet) {
+        if (tcpClient != null && tcpClient.isConnected()) {
+            tcpClient.sendPacket(packet);
+        } else {
+            Log.w(TAG, "TCP socket not connected");
+        }
+    }
+    
+    /**
      * 灏哠IM鍗″彿杞崲涓築CD鏍煎紡锛�6瀛楄妭锛�
      */
     public byte[] convertSimToBCD(String simNumber) {

--
Gitblit v1.8.0