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