From 23041aaa47f97c167306d997cb9515740359d6aa Mon Sep 17 00:00:00 2001
From: Dana <Dana_Lee1016@126.com>
Date: 星期日, 30 十一月 2025 13:52:11 +0800
Subject: [PATCH] 1.加两个类

---
 app/src/main/java/com/anyun/h264/service/H264EncodeServiceClient.java |  206 +++++++++++++++++++++++++++++
 app/src/main/java/com/anyun/h264/model/ResourceInfo.java              |  157 ++++++++++++++++++++++
 2 files changed, 363 insertions(+), 0 deletions(-)

diff --git a/app/src/main/java/com/anyun/h264/model/ResourceInfo.java b/app/src/main/java/com/anyun/h264/model/ResourceInfo.java
new file mode 100644
index 0000000..d324be8
--- /dev/null
+++ b/app/src/main/java/com/anyun/h264/model/ResourceInfo.java
@@ -0,0 +1,157 @@
+package com.anyun.h264.model;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * 闊宠棰戣祫婧愪俊鎭紙鏍规嵁JT/T 1076-2016琛�23瀹氫箟锛�
+ * 缁堢涓婁紶闊宠棰戣祫婧愬垪琛ㄦ牸寮�
+ */
+public class ResourceInfo implements Parcelable {
+    /** 閫昏緫閫氶亾鍙凤紙鏍规嵁JT/T 1076鈥�2016琛�2锛� */
+    private byte logicalChannelNumber;
+    
+    /** 寮�濮嬫椂闂达紙BCD[6]鏍煎紡锛歒Y-MM-DD-HH-MM-SS锛� */
+    private String startTime; // BCD缂栫爜鐨�6瀛楄妭锛屾牸寮忥細YYMMDDHHmmss
+    
+    /** 缁撴潫鏃堕棿锛圔CD[6]鏍煎紡锛歒Y-MM-DD-HH-MM-SS锛� */
+    private String endTime; // BCD缂栫爜鐨�6瀛楄妭锛屾牸寮忥細YYMMDDHHmmss
+    
+    /** 鎶ヨ鏍囧織锛�64浣嶏級 */
+    private long alarmFlag;
+    
+    /** 闊宠棰戣祫婧愮被鍨嬶細0-闊宠棰戯紝1-闊抽锛�2-瑙嗛 */
+    private byte resourceType;
+    
+    /** 鐮佹祦绫诲瀷锛�1-涓荤爜娴侊紝2-瀛愮爜娴� */
+    private byte streamType;
+    
+    /** 瀛樺偍鍣ㄧ被鍨嬶細1-涓诲瓨鍌ㄥ櫒锛�2-鐏惧瀛樺偍鍣� */
+    private byte storageType;
+    
+    /** 鏂囦欢澶у皬锛堝崟浣嶏細瀛楄妭锛� */
+    private long fileSize;
+
+    public ResourceInfo() {
+    }
+
+    protected ResourceInfo(Parcel in) {
+        logicalChannelNumber = in.readByte();
+        startTime = in.readString();
+        endTime = in.readString();
+        alarmFlag = in.readLong();
+        resourceType = in.readByte();
+        streamType = in.readByte();
+        storageType = in.readByte();
+        fileSize = in.readLong();
+    }
+
+    public static final Creator<ResourceInfo> CREATOR = new Creator<ResourceInfo>() {
+        @Override
+        public ResourceInfo createFromParcel(Parcel in) {
+            return new ResourceInfo(in);
+        }
+
+        @Override
+        public ResourceInfo[] newArray(int size) {
+            return new ResourceInfo[size];
+        }
+    };
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeByte(logicalChannelNumber);
+        dest.writeString(startTime);
+        dest.writeString(endTime);
+        dest.writeLong(alarmFlag);
+        dest.writeByte(resourceType);
+        dest.writeByte(streamType);
+        dest.writeByte(storageType);
+        dest.writeLong(fileSize);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    // Getters and Setters
+    public byte getLogicalChannelNumber() {
+        return logicalChannelNumber;
+    }
+
+    public void setLogicalChannelNumber(byte logicalChannelNumber) {
+        this.logicalChannelNumber = logicalChannelNumber;
+    }
+
+    public String getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(String startTime) {
+        this.startTime = startTime;
+    }
+
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
+
+    public long getAlarmFlag() {
+        return alarmFlag;
+    }
+
+    public void setAlarmFlag(long alarmFlag) {
+        this.alarmFlag = alarmFlag;
+    }
+
+    public byte getResourceType() {
+        return resourceType;
+    }
+
+    public void setResourceType(byte resourceType) {
+        this.resourceType = resourceType;
+    }
+
+    public byte getStreamType() {
+        return streamType;
+    }
+
+    public void setStreamType(byte streamType) {
+        this.streamType = streamType;
+    }
+
+    public byte getStorageType() {
+        return storageType;
+    }
+
+    public void setStorageType(byte storageType) {
+        this.storageType = storageType;
+    }
+
+    public long getFileSize() {
+        return fileSize;
+    }
+
+    public void setFileSize(long fileSize) {
+        this.fileSize = fileSize;
+    }
+
+    @Override
+    public String toString() {
+        return "ResourceInfo{" +
+                "logicalChannelNumber=" + logicalChannelNumber +
+                ", startTime='" + startTime + '\'' +
+                ", endTime='" + endTime + '\'' +
+                ", alarmFlag=" + alarmFlag +
+                ", resourceType=" + resourceType +
+                ", streamType=" + streamType +
+                ", storageType=" + storageType +
+                ", fileSize=" + fileSize +
+                '}';
+    }
+}
+
diff --git a/app/src/main/java/com/anyun/h264/service/H264EncodeServiceClient.java b/app/src/main/java/com/anyun/h264/service/H264EncodeServiceClient.java
new file mode 100644
index 0000000..aa22112
--- /dev/null
+++ b/app/src/main/java/com/anyun/h264/service/H264EncodeServiceClient.java
@@ -0,0 +1,206 @@
+package com.anyun.h264.service;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.util.Log;
+
+import com.anyun.h264.IH264EncodeService;
+import com.anyun.h264.model.ResourceInfo;
+
+import java.util.List;
+
+/**
+ * H264缂栫爜鏈嶅姟瀹㈡埛绔�
+ * 鐢ㄤ簬缁戝畾鏈嶅姟骞惰皟鐢ˋIDL鎺ュ彛
+ * 
+ * 浣跨敤绀轰緥锛�
+ * <pre>
+ * // 鍒涘缓瀹㈡埛绔�
+ * H264EncodeServiceClient client = new H264EncodeServiceClient(context);
+ * 
+ * // 缁戝畾鏈嶅姟
+ * client.bindService();
+ * 
+ * // 绛夊緟鏈嶅姟缁戝畾瀹屾垚鍚庯紝璋冪敤鎺ュ彛
+ * // 寮�鍚枃浠剁紪鐮侊紙甯﹂厤缃弬鏁帮級
+ * String jsonConfig = "{\"width\":640,\"height\":480,\"framerate\":25}";
+ * int result = client.controlEncode(0, jsonConfig);
+ * 
+ * // 寮�鍚綉缁滄帹閫侊紙甯﹂厤缃弬鏁帮級
+ * String networkConfig = "{\"ip\":\"192.168.1.100\",\"port\":8888,\"width\":1280,\"height\":720,\"framerate\":30}";
+ * result = client.controlEncode(2, networkConfig);
+ * 
+ * // 鍋滄缂栫爜锛堜笉闇�瑕侀厤缃弬鏁帮級
+ * client.controlEncode(1, null);
+ * 
+ * // 鑾峰彇璧勬簮鍒楄〃
+ * List<ResourceInfo> resources = client.getResourceList("240101000000", "240101235959");
+ * 
+ * // 瑙g粦鏈嶅姟
+ * client.unbindService();
+ * </pre>
+ */
+public class H264EncodeServiceClient {
+    private static final String TAG = "H264EncodeClient";
+    
+    private Context context;
+    private IH264EncodeService service;
+    private boolean isBound = false;
+    
+    private ServiceConnection connection = new ServiceConnection() {
+        @Override
+        public void onServiceConnected(ComponentName name, IBinder binder) {
+            Log.d(TAG, "Service connected");
+            service = IH264EncodeService.Stub.asInterface(binder);
+            isBound = true;
+            
+            // 鍙互鍦ㄨ繖閲屾坊鍔犳湇鍔¤繛鎺ユ垚鍔熺殑鍥炶皟
+            if (onServiceConnectedListener != null) {
+                onServiceConnectedListener.onConnected();
+            }
+        }
+        
+        @Override
+        public void onServiceDisconnected(ComponentName name) {
+            Log.d(TAG, "Service disconnected");
+            service = null;
+            isBound = false;
+            
+            // 鍙互鍦ㄨ繖閲屾坊鍔犳湇鍔℃柇寮�杩炴帴鐨勫洖璋�
+            if (onServiceDisconnectedListener != null) {
+                onServiceDisconnectedListener.onDisconnected();
+            }
+        }
+    };
+    
+    // 鏈嶅姟杩炴帴鍥炶皟鎺ュ彛
+    public interface OnServiceConnectedListener {
+        void onConnected();
+    }
+    
+    public interface OnServiceDisconnectedListener {
+        void onDisconnected();
+    }
+    
+    private OnServiceConnectedListener onServiceConnectedListener;
+    private OnServiceDisconnectedListener onServiceDisconnectedListener;
+    
+    public H264EncodeServiceClient(Context context) {
+        this.context = context.getApplicationContext();
+    }
+    
+    /**
+     * 璁剧疆鏈嶅姟杩炴帴鐩戝惉鍣�
+     */
+    public void setOnServiceConnectedListener(OnServiceConnectedListener listener) {
+        this.onServiceConnectedListener = listener;
+    }
+    
+    /**
+     * 璁剧疆鏈嶅姟鏂紑杩炴帴鐩戝惉鍣�
+     */
+    public void setOnServiceDisconnectedListener(OnServiceDisconnectedListener listener) {
+        this.onServiceDisconnectedListener = listener;
+    }
+    
+    /**
+     * 缁戝畾鏈嶅姟
+     * @return 鏄惁鎴愬姛鍚姩缁戝畾
+     */
+    public boolean bindService() {
+        if (isBound) {
+            Log.w(TAG, "Service is already bound");
+            return true;
+        }
+        
+        Intent intent = new Intent();
+        intent.setComponent(new ComponentName(context, "com.anyun.h264.H264EncodeService"));
+        
+        boolean result = context.bindService(intent, connection, Context.BIND_AUTO_CREATE);
+        if (!result) {
+            Log.e(TAG, "Failed to bind service");
+        }
+        return result;
+    }
+    
+    /**
+     * 瑙g粦鏈嶅姟
+     */
+    public void unbindService() {
+        if (isBound) {
+            context.unbindService(connection);
+            isBound = false;
+            service = null;
+            Log.d(TAG, "Service unbound");
+        }
+    }
+    
+    /**
+     * 妫�鏌ユ湇鍔℃槸鍚﹀凡缁戝畾
+     */
+    public boolean isServiceBound() {
+        return isBound && service != null;
+    }
+    
+    /**
+     * 鎺у埗H264缂栫爜
+     * @param action 鎿嶄綔绫诲瀷锛�0-寮�鍚痟264鏂囦欢鍐欏叆锛�1-鍋滄h264缂栫爜骞跺仠姝㈠啓鍏ユ枃浠讹紝2-寮�鍚綉缁滄帹閫乭264锛堜笉鍐欏叆鏂囦欢锛夛紝3-鍋滄h264缂栫爜骞跺仠姝㈢綉缁滄帹閫�
+     * @param jsonConfig JSON鏍煎紡鐨勯厤缃弬鏁帮紝鍖呭惈锛歩p锛堟湇鍔″櫒IP锛夈�乸ort锛堟湇鍔″櫒绔彛锛夈�亀idth锛堣棰戝搴︼級銆乭eight锛堣棰戦珮搴︼級銆乫ramerate锛堝抚鐜囷級
+     *                  绀轰緥锛歿"ip":"192.168.1.100","port":8888,"width":640,"height":480,"framerate":25}
+     *                  濡傛灉action涓�1鎴�3锛堝仠姝㈡搷浣滐級锛屾鍙傛暟鍙负null
+     * @return 0-鎴愬姛锛�1-澶辫触
+     */
+    public int controlEncode(int action, String jsonConfig) {
+        if (!isServiceBound()) {
+            Log.e(TAG, "Service is not bound");
+            return 1; // 澶辫触
+        }
+        
+        try {
+            int result = service.controlEncode(action, jsonConfig);
+            Log.d(TAG, "controlEncode(" + action + ", " + jsonConfig + ") returned: " + result);
+            return result;
+        } catch (RemoteException e) {
+            Log.e(TAG, "Error calling controlEncode", e);
+            return 1; // 澶辫触
+        }
+    }
+    
+    /**
+     * 鎺у埗H264缂栫爜锛堥噸杞芥柟娉曪紝鍏煎鏃т唬鐮侊紝浣跨敤null浣滀负jsonConfig锛�
+     * @param action 鎿嶄綔绫诲瀷锛�0-寮�鍚痟264鏂囦欢鍐欏叆锛�1-鍋滄h264缂栫爜骞跺仠姝㈠啓鍏ユ枃浠讹紝2-寮�鍚綉缁滄帹閫乭264锛堜笉鍐欏叆鏂囦欢锛夛紝3-鍋滄h264缂栫爜骞跺仠姝㈢綉缁滄帹閫�
+     * @return 0-鎴愬姛锛�1-澶辫触
+     * @deprecated 寤鸿浣跨敤 controlEncode(int action, String jsonConfig) 鏂规硶锛屼紶鍏ュ畬鏁寸殑閰嶇疆鍙傛暟
+     */
+    @Deprecated
+    public int controlEncode(int action) {
+        return controlEncode(action, null);
+    }
+    
+    /**
+     * 鑾峰彇璧勬簮鍒楄〃
+     * @param startTime 寮�濮嬫椂闂达紙鏍煎紡锛歒YMMDDHHmmss锛屼緥濡傦細240101000000锛�
+     * @param endTime 缁撴潫鏃堕棿锛堟牸寮忥細YYMMDDHHmmss锛屼緥濡傦細240101235959锛�
+     * @return 璧勬簮鍒楄〃锛屽鏋滃け璐ヨ繑鍥瀗ull
+     */
+    public List<ResourceInfo> getResourceList(String startTime, String endTime) {
+        if (!isServiceBound()) {
+            Log.e(TAG, "Service is not bound");
+            return null;
+        }
+        
+        try {
+            List<ResourceInfo> result = service.getResourceList(startTime, endTime);
+            Log.d(TAG, "getResourceList returned " + (result != null ? result.size() : 0) + " resources");
+            return result;
+        } catch (RemoteException e) {
+            Log.e(TAG, "Error calling getResourceList", e);
+            return null;
+        }
+    }
+}
+

--
Gitblit v1.8.0