package com.netsdk.demo.example; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.Image; import java.awt.Panel; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JSlider; import javax.swing.JTextField; import javax.swing.SwingUtilities; import javax.swing.border.Border; import com.netsdk.lib.NetSDKLib; import com.netsdk.lib.NetSDKLib.LLong; import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; class PtzControl{ static NetSDKLib NetSdk = NetSDKLib.NETSDK_INSTANCE; static NetSDKLib ConfigSdk = NetSDKLib.CONFIG_INSTANCE; //登陆参数 private String m_strIp = "172.23.1.32"; private Integer m_nPort = new Integer("37777"); private String m_strUser = "admin"; private String m_strPassword = "admin"; //视频设置参数 private int m_nBrightness ; private int m_nContrast ; private int m_nHue ; private int m_nSaturation ; //设备信息 private NetSDKLib.NET_DEVICEINFO m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO(); private static LLong m_hLoginHandle = new LLong(0); //登陆句柄 private LLong m_hPlayHandle = new LLong(0); //预览句柄 private boolean m_hVideo; //视频参数 //////////////////SDK相关信息/////////////////////////// //NetSDK 库初始化 private class SDKEnvironment { private boolean bInit = false; private boolean bLogopen = false; private DisConnect disConnect = new DisConnect(); //设备断线通知回调 private HaveReConnect haveReConnect = new HaveReConnect(); //网络连接恢复 //设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数 public class DisConnect implements NetSDKLib.fDisConnect { public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort); } } //网络连接恢复,设备重连成功回调 // 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数 public class HaveReConnect implements NetSDKLib.fHaveReConnect { public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort); } } //初始化 public boolean init() { bInit = NetSdk.CLIENT_Init(disConnect, null); if(!bInit) { System.out.println("Initialize SDK failed"); return false; } //打开日志,可选 NetSDKLib.LOG_SET_PRINT_INFO setLog = new NetSDKLib.LOG_SET_PRINT_INFO(); File path = new File("."); String logPath = path.getAbsoluteFile().getParent() + "\\sdk_log\\PtzControl" + System.currentTimeMillis() + ".log"; setLog.bSetFilePath = 1; System.arraycopy(logPath.getBytes(), 0, setLog.szLogFilePath, 0, logPath.getBytes().length); setLog.bSetPrintStrategy = 1; setLog.nPrintStrategy = 0; bLogopen = NetSdk.CLIENT_LogOpen(setLog); if(!bLogopen ) { System.err.println("Failed to open NetSDK log"); } // 设置断线重连回调接口,设置过断线重连成功回调函数后,当设备出现断线情况,SDK内部会自动进行重连操作 // 此操作为可选操作,但建议用户进行设置 NetSdk.CLIENT_SetAutoReconnect(haveReConnect, null); //设置登录超时时间和尝试次数,可选 int waitTime = 5000; //登录请求响应超时时间设置为5S int tryTimes = 3; //登录时尝试建立链接3次 NetSdk.CLIENT_SetConnectTime(waitTime, tryTimes); // 设置更多网络参数,NET_PARAM的nWaittime,nConnectTryNum成员与CLIENT_SetConnectTime // 接口设置的登录设备超时时间和尝试次数意义相同,可选 NetSDKLib.NET_PARAM netParam = new NetSDKLib.NET_PARAM(); netParam.nConnectTime = 10000; //登录时尝试建立链接的超时时间 NetSdk.CLIENT_SetNetworkParam(netParam); return true; } //清除环境 public void cleanup() { if(bLogopen) { NetSdk.CLIENT_LogClose(); } if(bInit) { NetSdk.CLIENT_Cleanup(); } } } private SDKEnvironment sdkEnv; public PtzControl() { sdkEnv = new SDKEnvironment(); sdkEnv.init(); //SDK 库初始化 SwingUtilities.invokeLater(new Runnable() { public void run() { mainFrame = new JFrame("带云台控制的JNADEMO"); mainFrame.setSize(800, 600); mainFrame.setLayout(new BorderLayout()); mainFrame.setLocationRelativeTo(null); mainFrame.setVisible(true); loginPanel = new LoginPanel(); realPlayPanel = new RealPlayPanel(); ptzControlPanel = new PtzControlPanel(); mainFrame.add(loginPanel, BorderLayout.NORTH); mainFrame.add(realPlayPanel, BorderLayout.CENTER); mainFrame.add(ptzControlPanel, BorderLayout.EAST); mainFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.out.println("Window Closing"); //登出 logoutButtonPerformed(null); sdkEnv.cleanup(); mainFrame.dispose(); System.exit(0); } }); } }); } /////////////////面板/////////////////// ////////////////////////////////////// //设置边框 private void setBorderEx(JComponent object, String title, int width) { Border innerBorder = BorderFactory.createTitledBorder(title); Border outerBorder = BorderFactory.createEmptyBorder(width, width, width, width); object.setBorder(BorderFactory.createCompoundBorder(outerBorder, innerBorder)); } //登录面板 private class LoginPanel extends JPanel { private static final long serialVersionUID = 1L; public LoginPanel() { loginBtn = new JButton("登录"); logoutBtn = new JButton("登出"); nameLabel = new JLabel("用户名"); passwordLabel = new JLabel("密码"); nameTextArea = new JTextField(m_strUser, 6); passwordTextArea = new JPasswordField(m_strPassword, 6); ipLabel = new JLabel("设备地址"); portLabel = new JLabel("端口号"); ipTextArea = new JTextField(m_strIp, 8); portTextArea = new JTextField(m_nPort.toString(), 4); setLayout(new FlowLayout()); setBorderEx(this, "登录", 2); add(ipLabel); add(ipTextArea); add(portLabel); add(portTextArea); add(nameLabel); add(nameTextArea); add(passwordLabel); add(passwordTextArea); add(loginBtn); add(logoutBtn); logoutBtn.setEnabled(false); //登录按钮,监听事件 loginBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { loginButtonPerformed(e); play(); getVideoEffect(null); } }); //登出按钮,监听事件 logoutBtn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { logoutButtonPerformed(e); } }); } } //预览面板 private class RealPlayPanel extends PaintPanel { private static final long serialVersionUID = 1L; public RealPlayPanel() { setBorderEx(this, "实时预览", 4); setLayout(new BorderLayout()); Dimension dim = getPreferredSize(); setPreferredSize(dim); realPlayWindow = new Panel(); add(realPlayWindow, BorderLayout.CENTER); } } //云台控制 public class PtzControlPanel extends JPanel { private static final long serialVersionUID = 1L; public PtzControlPanel() { setBorderEx(this, "云台控制", 2); setLayout(new BorderLayout()); Dimension dim = getPreferredSize(); dim.height =180; dim.width = 280; setPreferredSize(dim); modifyPanel = new ModifyPanel(); //变倍、变焦控制 dirControlPanel = new DirControlPanel(); //方向控制 sliderPanel = new SliderPanel(); //亮度、对比度、饱和度、色度设置 saveRealDataPanel = new SaveRealDataPanel(); ptzCtrPanel = new JPanel(); add(modifyPanel, BorderLayout.NORTH); add(ptzCtrPanel, BorderLayout.CENTER); add(saveRealDataPanel, BorderLayout.SOUTH); ptzCtrPanel.setLayout(new GridLayout(2, 1)); ptzCtrPanel.add(dirControlPanel); ptzCtrPanel.add(sliderPanel); } } //变倍、变焦控制面板 public class ModifyPanel extends JPanel { private static final long serialVersionUID = 1L; public ModifyPanel() { setBorderEx(this, "变倍、变焦设置", 2); setLayout(new FlowLayout()); Dimension dim = getPreferredSize(); dim.height =100; setPreferredSize(dim); zoomAdd = new JButton("变倍+"); zoomDec = new JButton("变倍-"); spaceLabel1 = new JLabel(" "); spaceLabel2 = new JLabel(" "); focusAdd = new JButton("变焦+"); focusDec = new JButton("变焦-"); add(spaceLabel1); add(zoomAdd); add(zoomDec); add(spaceLabel2); add(focusAdd); add(focusDec); // 变倍+ zoomAdd.addMouseListener(new MouseListener() { @Override public void mouseExited(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { ptzControlZoomAddStart(0, speedComboBox.getSelectedIndex()); } @Override public void mouseReleased(MouseEvent e) { ptzControlZoomAddEnd(0); } }); // 变倍- zoomDec.addMouseListener(new MouseListener() { @Override public void mouseExited(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { ptzControlZoomDecStart(0, speedComboBox.getSelectedIndex()); } @Override public void mouseReleased(MouseEvent e) { ptzControlZoomDecEnd(0); } }); // 变焦+ focusAdd.addMouseListener(new MouseListener() { @Override public void mouseExited(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { ptzControlFocusAddStart(0, speedComboBox.getSelectedIndex()); } @Override public void mouseReleased(MouseEvent e) { ptzControlFocusAddEnd(0); } }); // 变焦- focusDec.addMouseListener(new MouseListener() { @Override public void mouseExited(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { ptzControlFocusDecStart(0, speedComboBox.getSelectedIndex()); } @Override public void mouseReleased(MouseEvent e) { ptzControlFocusDecEnd(0); } }); } } //方向控制面板 public class DirControlPanel extends JPanel { private static final long serialVersionUID = 1L; public DirControlPanel() { setBorderEx(this, "方向控制", 2); setLayout(new GridLayout(3, 1)); //将DirControlPanel分为三部分 JPanel dirControlPanel1 = new JPanel(); JPanel dirControlPanel2 = new JPanel(); JPanel dirControlPanel3 = new JPanel(); dirControlPanel1.setLayout(new FlowLayout()); dirControlPanel2.setLayout(new FlowLayout()); dirControlPanel3.setLayout(new FlowLayout()); up = new JButton("上"); leftUp = new JButton("左上"); rightUp = new JButton("右上"); down = new JButton("下"); leftDown = new JButton("左下"); rightDown = new JButton("右下"); left = new JButton("左"); right = new JButton("右"); String[] speed = {"速率" + " 1", "速率" + " 2", "速率" + " 3", "速率" + " 4", "速率" + " 5", "速率" + " 6", "速率" + " 7", "速率" + " 8"}; speedComboBox = new JComboBox(speed); speedComboBox.setSelectedIndex(4); speedComboBox.setPreferredSize(new Dimension(74, 25)); dirControlPanel1.add(leftUp); dirControlPanel1.add(up); dirControlPanel1.add(rightUp); dirControlPanel2.add(left); dirControlPanel2.add(speedComboBox); dirControlPanel2.add(right); dirControlPanel3.add(leftDown); dirControlPanel3.add(down); dirControlPanel3.add(rightDown); add(dirControlPanel1); add(dirControlPanel2); add(dirControlPanel3); // 向上 up.addMouseListener(new MouseListener() { @Override public void mouseExited(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { ptzControlUpStart(0, 0, speedComboBox.getSelectedIndex()); } @Override public void mouseReleased(MouseEvent e) { ptzControlUpEnd(0); } }); // 向下 down.addMouseListener(new MouseListener() { @Override public void mouseExited(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { ptzControlDownStart(0, 0, speedComboBox.getSelectedIndex()); } @Override public void mouseReleased(MouseEvent e) { ptzControlDownEnd(0); } }); // 向左 left.addMouseListener(new MouseListener() { @Override public void mouseExited(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { ptzControlLeftStart(0, 0, speedComboBox.getSelectedIndex()); } @Override public void mouseReleased(MouseEvent e) { ptzControlLeftEnd(0); } }); // 向右 right.addMouseListener(new MouseListener() { @Override public void mouseExited(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { ptzControlRightStart(0, 0, speedComboBox.getSelectedIndex()); } @Override public void mouseReleased(MouseEvent e) { ptzControlRightEnd(0); } }); // 向左上 leftUp.addMouseListener(new MouseListener() { @Override public void mouseExited(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { ptzControlLeftUpStart(0, speedComboBox.getSelectedIndex(), speedComboBox.getSelectedIndex()); } @Override public void mouseReleased(MouseEvent e) { ptzControlLeftUpEnd(0); } }); // 向右上 rightUp.addMouseListener(new MouseListener() { @Override public void mouseExited(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { ptzControlRightUpStart(0, speedComboBox.getSelectedIndex(), speedComboBox.getSelectedIndex()); } @Override public void mouseReleased(MouseEvent e) { ptzControlRightUpEnd(0); } }); // 向左下 leftDown.addMouseListener(new MouseListener() { @Override public void mouseExited(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { ptzControlLeftDownStart(0, speedComboBox.getSelectedIndex(), speedComboBox.getSelectedIndex()); } @Override public void mouseReleased(MouseEvent e) { ptzControlLeftDownEnd(0); } }); // 向右下 rightDown.addMouseListener(new MouseListener() { @Override public void mouseExited(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { ptzControlRightDownStart(0, speedComboBox.getSelectedIndex(), speedComboBox.getSelectedIndex()); } @Override public void mouseReleased(MouseEvent e) { ptzControlRightDownEnd(0); } }); } } //亮度、对比度、饱和度、色度设置 进度条方法 public class SliderPanel extends JPanel { private static final long serialVersionUID = 1L; public SliderPanel() { setLayout(new GridLayout(4, 1)); setBorderEx(this, "画面颜色属性", 4); brightnessLabel = new JLabel("亮度 (0)"); contrastLabel = new JLabel("对比度(0)"); hueLabel = new JLabel("色度 (0)"); saturationLabel = new JLabel("饱和度(0)"); //设置滑动块 brightJSlider = new JSlider(JSlider.HORIZONTAL, 0, 255, 0); contrastJSlider = new JSlider(JSlider.HORIZONTAL, 0, 255, 0); hueJSlider = new JSlider(JSlider.HORIZONTAL, 0, 255, 0); saturationJSlider = new JSlider(JSlider.HORIZONTAL, 0, 255, 0); add(brightnessLabel); add(brightJSlider); add(contrastLabel); add(contrastJSlider); add(hueLabel); add(hueJSlider); add(saturationLabel); add(saturationJSlider); //亮度滑块监听 brightJSlider.addMouseListener(new MouseListener() { public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { setVideoEffect(e); } }); //对比度滑块监听 contrastJSlider.addMouseListener(new MouseListener() { public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { setVideoEffect(e); } }); //色度滑块监听 hueJSlider.addMouseListener(new MouseListener() { public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { setVideoEffect(e); } }); //饱和度滑块监听 saturationJSlider.addMouseListener(new MouseListener() { public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { setVideoEffect(e); } }); } } /** * 控制面板-保存录像操作 */ public class SaveRealDataPanel extends JPanel { private static final long serialVersionUID = 1L; public SaveRealDataPanel() { setBorderEx(this, "保存实时预览", 4); setLayout(new BorderLayout()); pathText = new JTextField(); saveRealDataBtn = new JButton("保存录像"); stopSaveRealDataBtn = new JButton("停止保存"); JPanel panel = new JPanel(); add(pathText, BorderLayout.NORTH); add(panel, BorderLayout.SOUTH); panel.setLayout(new GridLayout(2, 1)); panel.add(saveRealDataBtn); panel.add(stopSaveRealDataBtn); saveRealDataBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { saveRealData(); } }); stopSaveRealDataBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { stopSaveRealData(); } }); } } ////////////////////事件执行////////////////////// /////////////////////////////////////////////// //登录按钮事件 private void loginButtonPerformed(ActionEvent e) { m_strIp = ipTextArea.getText(); m_nPort = Integer.parseInt(portTextArea.getText()); m_strUser = nameTextArea.getText(); m_strPassword = new String(passwordTextArea.getPassword()); System.out.println("设备地址:" + m_strIp + "\n端口号:" + m_nPort + "\n用户名:" + m_strUser + "\n密码:" + m_strPassword); IntByReference nError = new IntByReference(0); m_hLoginHandle = NetSdk.CLIENT_LoginEx(m_strIp, m_nPort.intValue(), m_strUser, m_strPassword, 0, null, m_stDeviceInfo, nError); if(m_hLoginHandle.longValue() == 0) { int error = 0; error = NetSdk.CLIENT_GetLastError(); System.err.printf("Login Device[%s] Port[%d]Failed. Last Error[0x%x]\n", m_strIp, m_nPort, error); JOptionPane.showMessageDialog(mainFrame, "登录失败,错误码 :" + String.format("[0x%x]", error)); } else { System.out.println("Login Success [ " + m_strIp + " ]"); JOptionPane.showMessageDialog(mainFrame, "登录成功"); logoutBtn.setEnabled(true); loginBtn.setEnabled(false); } } //登出按钮事件 private void logoutButtonPerformed(ActionEvent e) { if(m_hLoginHandle.longValue() != 0) { System.out.println("Logout Button Action"); //结束接口调用 stopPlay(); stopSaveRealData(); if(NetSdk.CLIENT_Logout(m_hLoginHandle)) { System.out.println("Logout Success [ " + m_strIp + " ]"); m_hLoginHandle.setValue(0); logoutBtn.setEnabled(false); loginBtn.setEnabled(true); } } } /////////实时预览/////////// private void play() { int channel = 0; //预览通道号,设备有多通道的情况,可手动更改 int playType = NetSDKLib.NET_RealPlayType.NET_RType_Realplay; //实时预览 m_hPlayHandle = NetSdk.CLIENT_RealPlayEx(m_hLoginHandle, channel, Native.getComponentPointer(realPlayWindow), playType); if(m_hPlayHandle.longValue() ==0) { int error = NetSdk.CLIENT_GetLastError(); System.err.println("开始实时预览失败,错误码" + String.format("[0x%x]", error)); } else { System.out.println("Success to start realplay"); realPlayWindow.setVisible(true); realPlayPanel.setOpaque(false); realPlayPanel.repaint(); } } /******************************************************************************** * 云台功能 * ********************************************************************************/ /** * 向上 */ public static boolean ptzControlUpStart(int nChannelID, int lParam1, int lParam2) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL, lParam1, lParam2, 0, 0); } public static boolean ptzControlUpEnd(int nChannelID) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL, 0, 0, 0, 1); } /** * 向下 */ public static boolean ptzControlDownStart(int nChannelID, int lParam1, int lParam2) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL, lParam1, lParam2, 0, 0); } public static boolean ptzControlDownEnd(int nChannelID) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL, 0, 0, 0, 1); } /** * 向左 */ public static boolean ptzControlLeftStart(int nChannelID, int lParam1, int lParam2) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL, lParam1, lParam2, 0, 0); } public static boolean ptzControlLeftEnd(int nChannelID) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL, 0, 0, 0, 1); } /** * 向右 */ public static boolean ptzControlRightStart(int nChannelID, int lParam1,int lParam2) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL, lParam1, lParam2, 0, 0); } public static boolean ptzControlRightEnd(int nChannelID) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL, 0, 0, 0, 1); } /** * 向左上 */ public static boolean ptzControlLeftUpStart(int nChannelID, int lParam1, int lParam2) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP, lParam1, lParam2, 0, 0); } public static boolean ptzControlLeftUpEnd(int nChannelID) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP, 0, 0, 0, 1); } /** * 向右上 */ public static boolean ptzControlRightUpStart(int nChannelID, int lParam1, int lParam2) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP, lParam1, lParam2, 0, 0); } public static boolean ptzControlRightUpEnd(int nChannelID) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP, 0, 0, 0, 1); } /** * 向左下 */ public static boolean ptzControlLeftDownStart(int nChannelID, int lParam1, int lParam2) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN, lParam1, lParam2, 0, 0); } public static boolean ptzControlLeftDownEnd(int nChannelID) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN, 0, 0, 0, 1); } /** * 向右下 */ public static boolean ptzControlRightDownStart(int nChannelID, int lParam1, int lParam2) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN, lParam1, lParam2, 0, 0); } public static boolean ptzControlRightDownEnd(int nChannelID) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN, 0, 0, 0, 1); } /** * 变倍+ */ public static boolean ptzControlZoomAddStart(int nChannelID, int lParam2) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL, 0, lParam2, 0, 0); } public static boolean ptzControlZoomAddEnd(int nChannelID) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL, 0, 0, 0, 1); } /** * 变倍- */ public static boolean ptzControlZoomDecStart(int nChannelID, int lParam2) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL, 0, lParam2, 0, 0); } public static boolean ptzControlZoomDecEnd(int nChannelID) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL, 0, 0, 0, 1); } /** * 变焦+ */ public static boolean ptzControlFocusAddStart(int nChannelID, int lParam2) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL, 0, lParam2, 0, 0); } public static boolean ptzControlFocusAddEnd(int nChannelID) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL, 0, 0, 0, 1); } /** * 变焦- */ public static boolean ptzControlFocusDecStart(int nChannelID, int lParam2) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL, 0, lParam2, 0, 0); } public static boolean ptzControlFocusDecEnd(int nChannelID) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL, 0, 0, 0, 1); } /** * 光圈+ */ public static boolean ptzControlIrisAddStart(int nChannelID, int lParam2) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL, 0, lParam2, 0, 0); } public static boolean ptzControlIrisAddEnd(int nChannelID) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL, 0, 0, 0, 1); } /** * 光圈- */ public static boolean ptzControlIrisDecStart(int nChannelID, int lParam2) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL, 0, lParam2, 0, 0); } public static boolean ptzControlIrisDecEnd(int nChannelID) { return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID, NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL, 0, 0, 0, 1); } //获取亮度、对比度、饱和度、色度参数 public void getVideoEffect(MouseEvent e){ byte[] param1 = {0}; byte[] param2 = {0}; byte[] param3 = {0}; byte[] param4 = {0}; m_hVideo = NetSdk.CLIENT_ClientGetVideoEffect(m_hPlayHandle, param1, param2, param3, param4); if(m_hVideo) { System.out.println("Get: param1= " + (int)(param1[0]&0xff) + ", param2= " + (int)(param2[0]&0xff) + ", param3= " + (int)(param3[0]&0xff) + ", param4= " + (int)(param4[0]&0xff)); brightnessLabel.setText("亮度 (" + String.valueOf((int)(param1[0]&0xff)) + ")"); contrastLabel.setText("对比度(" + String.valueOf((int)(param2[0]&0xff)) + ")"); hueLabel.setText("色度 (" + String.valueOf((int)(param3[0]&0xff)) + ")"); saturationLabel.setText("饱和度(" + String.valueOf((int)(param4[0]&0xff)) + ")"); brightJSlider.setValue((int)(param1[0]&0xff)); contrastJSlider.setValue((int)(param2[0]&0xff)); hueJSlider.setValue((int)(param3[0]&0xff)); saturationJSlider.setValue((int)(param4[0]&0xff)); } else { System.err.println("GetVideoEffect Failed!"); } } //设置亮度、对比度、饱和度、色度参数 private void setVideoEffect(MouseEvent e) { m_nBrightness = brightJSlider.getValue(); m_nContrast = contrastJSlider.getValue(); m_nHue = hueJSlider.getValue(); m_nSaturation = saturationJSlider.getValue(); m_hVideo = NetSdk.CLIENT_ClientSetVideoEffect(m_hPlayHandle, (byte)m_nBrightness, (byte)m_nContrast, (byte)m_nHue, (byte)m_nSaturation); if(!m_hVideo) { System.err.println("Modify Failed!"); } else { System.out.println("Set: m_nBrightness=" + m_nBrightness + ", m_nContrast=" + m_nContrast + ", m_nHue=" + m_nHue + ", m_nSaturation=" + m_nSaturation); //从滑动块获取参数,并在文本中显示 brightnessLabel.setText(String.valueOf("亮度 (" + m_nBrightness + ")")); contrastLabel.setText(String.valueOf("对比度(" + m_nContrast + ")")); hueLabel.setText(String.valueOf("色度 (" + m_nHue + ")")); saturationLabel.setText(String.valueOf("饱和度(" + m_nSaturation + ")")); } } //结束调用 private void stopPlay() { System.out.println("Stop Tasks!"); if(m_hPlayHandle.longValue() ==0) { System.err.println("Please make sure the RealPlay Handle is valid!"); return; } if(!NetSdk.CLIENT_StopRealPlayEx(m_hPlayHandle)) { System.err.println("StopRealPlay Failed"); return; } else { System.out.println("StopRealPlay Succeed!"); m_hPlayHandle.setValue(0); realPlayWindow.repaint(); } } /** * 保存录像 */ private void saveRealData() { if (m_hLoginHandle.longValue() == 0) { System.err.printf("Please Login First"); JOptionPane.showMessageDialog(mainFrame, "请先登录"); return; } if(m_hPlayHandle.longValue() != 0) { File currentPath = new File("."); String pchFileName = currentPath.getAbsoluteFile().getParent() + "\\" + System.currentTimeMillis() + ".dav"; // 默认保存路径 pathText.setText(pchFileName); boolean m_hSaveRealData = NetSdk.CLIENT_SaveRealData(m_hPlayHandle, pchFileName); if(m_hSaveRealData) { System.out.println("Saving RealData...."); } else { System.err.println("Saving RealData failed!" + NetSdk.CLIENT_GetLastError()); } } else { System.err.println("Please make sure the RealPlay Handle is valid!"); } } /** * 停止保存录像 */ private void stopSaveRealData() { if (m_hLoginHandle.longValue() == 0) { System.err.printf("Please Login First"); JOptionPane.showMessageDialog(mainFrame, "请先登录"); return; } if(m_hPlayHandle.longValue() != 0) { boolean bRet = NetSdk.CLIENT_StopSaveRealData(m_hPlayHandle); if(bRet) { System.out.println("Stop SaveRealData...."); } else { System.err.println("Stop SaveRealData failed!" + NetSdk.CLIENT_GetLastError()); } } } /////////////////////组件////////////////////////// ////////////////////////////////////////////////// //带背景的面板组件 private class PaintPanel extends JPanel { private static final long serialVersionUID = 1L; private Image image; //背景图片 public PaintPanel() { super(); setOpaque(true); //非透明 setLayout(null); setBackground(new Color(153, 240, 255)); setForeground(new Color(0, 0, 0)); } //设置图片的方法 public void setImage(Image image) { this.image = image; } protected void paintComponent(Graphics g) { //重写绘制组件外观 if(image != null) { g.drawImage(image, 0, 0, getWidth(), getHeight(), this);//绘制图片与组件大小相同 } super.paintComponent(g); // 执行超类方法 } } private JFrame mainFrame; //登录组件 private LoginPanel loginPanel; //实时预览 private RealPlayPanel realPlayPanel; private Panel realPlayWindow; //云台控制 private PtzControlPanel ptzControlPanel; private ModifyPanel modifyPanel; private DirControlPanel dirControlPanel; private SliderPanel sliderPanel; private JButton loginBtn; private JButton logoutBtn; private JButton zoomAdd; private JButton zoomDec; private JButton focusAdd; private JButton focusDec; private JButton up; private JButton leftUp; private JButton rightUp; private JButton down; private JButton leftDown; private JButton rightDown; private JButton left; private JButton right; private JLabel nameLabel; private JLabel passwordLabel; private JLabel ipLabel; private JLabel portLabel; private JLabel brightnessLabel; private JLabel contrastLabel; private JLabel saturationLabel; private JLabel hueLabel; private JLabel spaceLabel1; private JLabel spaceLabel2; private JComboBox speedComboBox; private JTextField ipTextArea; private JTextField portTextArea; private JTextField nameTextArea; private JPasswordField passwordTextArea; private JSlider brightJSlider; private JSlider contrastJSlider; private JSlider hueJSlider; private JSlider saturationJSlider; private SaveRealDataPanel saveRealDataPanel; private JTextField pathText; private JButton saveRealDataBtn; private JButton stopSaveRealDataBtn; private JPanel ptzCtrPanel; public static void main(String[] args) { new PtzControl(); } }