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