From aaa07634fa899b7346dfd61c6f70962adbc1dca5 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期五, 20 十月 2023 08:55:02 +0800
Subject: [PATCH] 1. 增加聚焦值和获取接口。 2. 增加视频编码获取接口。 3. 流媒体通过编码自动切换是否转码。

---
 ard-work/src/main/java/com/ruoyi/device/dhsdk/module/RealPlayModule.java |   70 ++++++++++++++++++++++++++++++++---
 1 files changed, 64 insertions(+), 6 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/RealPlayModule.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/RealPlayModule.java
index 46e6fc7..a97ce4c 100644
--- a/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/RealPlayModule.java
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/RealPlayModule.java
@@ -2,6 +2,10 @@
 
 import com.ruoyi.device.dhsdk.lib.NetSDKLib;
 import com.ruoyi.device.dhsdk.lib.ToolKits;
+import com.sun.jna.Pointer;
+
+import static com.ruoyi.device.dhsdk.module.LoginModule.netsdk;
+
 /**
  * 瀹炴椂棰勮鎺ュ彛瀹炵幇
  * 涓昏鏈� 锛氬紑濮嬫媺娴併�佸仠姝㈡媺娴佸姛鑳�
@@ -14,8 +18,16 @@
      * 寮�濮嬮瑙�
      * \endif
      */
-    public static NetSDKLib.LLong startRealPlay(NetSDKLib.LLong m_hLoginHandle, int channel, int stream) {
-        NetSDKLib.LLong m_hPlayHandle = LoginModule.netsdk.CLIENT_RealPlayEx(m_hLoginHandle, channel, null, stream);
+
+    public static NetSDKLib.LLong startRealPlay(NetSDKLib.LLong m_hLoginHandle, int channel, String path) {
+        NetSDKLib.NET_IN_REALPLAY_BY_DATA_TYPE net_in_realplay_by_data_type = new NetSDKLib.NET_IN_REALPLAY_BY_DATA_TYPE();
+        net_in_realplay_by_data_type.nChannelID = channel;
+        net_in_realplay_by_data_type.hWnd = null;
+        net_in_realplay_by_data_type.rType = 0;
+        net_in_realplay_by_data_type.emDataType = NetSDKLib.EM_REAL_DATA_TYPE.EM_REAL_DATA_TYPE_MP4;
+        net_in_realplay_by_data_type.szSaveFileName = path;
+        NetSDKLib.NET_OUT_REALPLAY_BY_DATA_TYPE net_out_realplay_by_data_type = new NetSDKLib.NET_OUT_REALPLAY_BY_DATA_TYPE();
+        NetSDKLib.LLong m_hPlayHandle = netsdk.CLIENT_RealPlayByDataType(m_hLoginHandle, net_in_realplay_by_data_type, net_out_realplay_by_data_type, 5000);
         if (m_hPlayHandle.longValue() == 0) {
             System.err.println("寮�濮嬪疄鏃堕瑙堝け璐ワ紝閿欒鐮�" + ToolKits.getErrorCodePrint());
         } else {
@@ -26,7 +38,7 @@
 
     /**
      * \if ENGLISH_LANG
-     * Start RealPlay
+     * Stop RealPlay
      * \else
      * 鍋滄棰勮
      * \endif
@@ -35,10 +47,56 @@
         if (m_hPlayHandle.longValue() == 0) {
             return;
         }
-
-        boolean bRet = LoginModule.netsdk.CLIENT_StopRealPlayEx(m_hPlayHandle);
+        boolean bRet = netsdk.CLIENT_StopRealPlayEx(m_hPlayHandle);
         if (bRet) {
             m_hPlayHandle.setValue(0);
         }
     }
-}
+
+    /**
+     * 瀹炴椂棰勮鏁版嵁鍥炶皟鍑芥暟--鎵╁睍(pBuffer鍐呭瓨鐢盨DK鍐呴儴鐢宠閲婃斁)
+     */
+    private static class CbfRealDataCallBackEx implements NetSDKLib.fRealDataCallBackEx {
+        private CbfRealDataCallBackEx() {
+        }
+
+        private static class CallBackHolder {
+            private static CbfRealDataCallBackEx instance = new CbfRealDataCallBackEx();
+        }
+
+        public static CbfRealDataCallBackEx getInstance() {
+            return CallBackHolder.instance;
+        }
+
+        @Override
+        public void invoke(NetSDKLib.LLong lRealHandle, int dwDataType, Pointer pBuffer,
+                           int dwBufSize, int param, Pointer dwUser) {
+            int bInput = 0;
+            if (0 != lRealHandle.longValue()) {
+                switch (dwDataType) {
+                    case 0:
+                        System.out.println("鐮佹祦澶у皬涓�" + dwBufSize + "\n" + "鐮佹祦绫诲瀷涓哄師濮嬮煶瑙嗛娣峰悎鏁版嵁");
+                        break;
+                    case 1:
+                        //鏍囧噯瑙嗛鏁版嵁
+                        System.out.println("鐮佹祦澶у皬涓�" + dwBufSize + "\n" + "鐮佹祦绫诲瀷涓烘爣鍑嗚棰戞暟鎹�");
+                        break;
+                    case 2:
+                        //yuv 鏁版嵁
+                        System.out.println("鐮佹祦澶у皬涓�" + dwBufSize + "\n" + "鐮佹祦绫诲瀷涓簓uv鏁版嵁");
+                        break;
+                    case 3:
+                        //pcm 闊抽鏁版嵁
+                        System.out.println("鐮佹祦澶у皬涓�" + dwBufSize + "\n" + "鐮佹祦绫诲瀷涓洪煶棰戞暟鎹�");
+                        break;
+                    case 4:
+                        //鍘熷闊抽鏁版嵁
+                        System.out.println("鐮佹祦澶у皬涓�" + dwBufSize + "\n" + "鐮佹祦绫诲瀷涓哄師濮嬮煶棰戞暟鎹�");
+                        break;
+                    default:
+                        break;
+                }
+            }
+        }
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3