相关文章推荐
volatile int gbHandling = 3 ; //解码回调 视频为YUV数据(YV12),音频为PCM数据 void CALLBACK DecCBFun ( long nPort , char * pBuf , long nSize , FRAME_INFO * pFrameInfo , long nReserved1 , long nReserved2 ) if ( gbHandling ) gbHandling -- ; return ; long lFrameType = pFrameInfo - > nType ; if ( lFrameType == T_YV12 ) Mat pImg ( pFrameInfo - > nHeight , pFrameInfo - > nWidth , CV_8UC3 ) ; Mat src ( pFrameInfo - > nHeight + pFrameInfo - > nHeight / 2 , pFrameInfo - > nWidth , CV_8UC1 , pBuf ) ; cvtColor ( src , pImg , CV_YUV2BGR_YV12 ) ; // Sleep(-1); //imshow("IPCamera", pImg); waitKey ( 1 ) ; gbHandling = 3 ; } ///实时流回调 void CALLBACK fRealDataCallBack ( LONG lRealHandle , DWORD dwDataType , BYTE * pBuffer , DWORD dwBufSize , void * pUser ) switch ( dwDataType ) case NET_DVR_SYSHEAD : //系统头 if ( ! PlayM4_GetPort ( & nPort ) ) //获取播放库未使用的通道号 break ; //m_iPort = lPort; //第一次回调的是系统头,将获取的播放库port号赋值给全局port,下次回调数据时即使用此port号播放 if ( dwBufSize > 0 ) if ( ! PlayM4_SetStreamOpenMode ( nPort , STREAME_REALTIME ) ) //设置实时流播放模式 break ; if ( ! PlayM4_OpenStream ( nPort , pBuffer , dwBufSize , 10 * 1024 * 1024 ) ) //打开流接口 break ; if ( ! PlayM4_Play ( nPort , NULL ) ) //播放开始 break ; if ( ! PlayM4_SetDecCallBack ( nPort , DecCBFun ) ) break ; break ; case NET_DVR_STREAMDATA : //码流数据 if ( dwBufSize > 0 && nPort != - 1 ) if ( ! PlayM4_InputData ( nPort , pBuffer , dwBufSize ) ) cout << "error" << PlayM4_GetLastError ( nPort ) << endl ; break ; break ; default : //其他数据 if ( dwBufSize > 0 && nPort != - 1 ) if ( ! PlayM4_InputData ( nPort , pBuffer , dwBufSize ) ) break ; break ; void CALLBACK g_ExceptionCallBack ( DWORD dwType , LONG lUserID , LONG lHandle , void * pUser ) char tempbuf [ 256 ] = { 0 } ; switch ( dwType ) case EXCEPTION_RECONNECT : //预览时重连 printf ( "----------reconnect--------%d\n" , time ( NULL ) ) ; break ; default : break ; //转换函数 DWORD HexToDecMa ( DWORD wHex ) return ( wHex / 4096 ) * 1000 + ( ( wHex % 4096 ) / 256 ) * 100 + ( ( wHex % 256 ) / 16 ) * 10 + ( wHex % 16 ) ; //控制结束 void OnLButtonUp ( LONG lRealPlayHandle ) NET_DVR_PTZControl ( lRealPlayHandle , PAN_RIGHT , 1 ) ; NET_DVR_PTZControl ( lRealPlayHandle , PAN_LEFT , 1 ) ; NET_DVR_PTZControl ( lRealPlayHandle , TILT_UP , 1 ) ; NET_DVR_PTZControl ( lRealPlayHandle , TILT_DOWN , 1 ) ; void main ( ) { //--------------------------------------- // 初始化 NET_DVR_Init ( ) ; //设置连接时间与重连时间 NET_DVR_SetConnectTime ( 2000 , 1 ) ; NET_DVR_SetReconnect ( 10000 , true ) ; //--------------------------------------- // 注册设备 LONG lUserID ; NET_DVR_DEVICEINFO_V30 struDeviceInfo ; lUserID = NET_DVR_Login_V30 ( "192.168.6.100" , 8000 , "admin" , "qwer1234" , & struDeviceInfo ) ; if ( lUserID < 0 ) printf ( "Login error, %d\n" , NET_DVR_GetLastError ( ) ) ; NET_DVR_Cleanup ( ) ; return ; //--------------------------------------- //设置异常消息回调函数 NET_DVR_SetExceptionCallBack_V30 ( 0 , NULL , g_ExceptionCallBack , NULL ) ; //--------------------------------------- //启动预览并设置回调数据流 LONG lRealPlayHandle ; cvNamedWindow ( "Mywindow" , 0 ) ; //cvNamedWindow("IPCamera", 0); HWND h = ( HWND ) cvGetWindowHandle ( "Mywindow" ) ; if ( h == 0 ) cout << "窗口创建失败" << endl ; NET_DVR_PREVIEWINFO struPlayInfo = { 0 } ; struPlayInfo . hPlayWnd = h ; //需要SDK解码时句柄设为有效值,仅取流不解码时可设为空 struPlayInfo . lChannel = 1 ; //预览通道号 struPlayInfo . dwStreamType = 0 ; //0-主码流,1-子码流,2-码流3,3-码流4,以此类推 struPlayInfo . dwLinkMode = 0 ; //0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP lRealPlayHandle = NET_DVR_RealPlay_V40 ( lUserID , & struPlayInfo , fRealDataCallBack , NULL ) ; if ( lRealPlayHandle < 0 ) printf ( "NET_DVR_RealPlay_V40 error\n" ) ; printf ( "%d\n" , NET_DVR_GetLastError ( ) ) ; NET_DVR_Logout ( lUserID ) ; NET_DVR_Cleanup ( ) ; return ; NET_DVR_PTZPOS m_ptzPosCurrent ; DWORD dwtmp ; while ( 1 ) OnLButtonUp ( lRealPlayHandle ) ; //控制云台 if ( GetKeyState ( VK_LEFT ) < 0 ) NET_DVR_PTZControl ( lRealPlayHandle , PAN_LEFT , 0 ) ; if ( GetKeyState ( VK_UP ) < 0 ) NET_DVR_PTZControl ( lRealPlayHandle , TILT_UP , 0 ) ; if ( GetKeyState ( VK_DOWN ) < 0 ) NET_DVR_PTZControl ( lRealPlayHandle , TILT_DOWN , 0 ) ; if ( GetKeyState ( VK_RIGHT ) < 0 ) NET_DVR_PTZControl ( lRealPlayHandle , PAN_RIGHT , 0 ) ; //获取当前PTZ状态 bool a = NET_DVR_GetDVRConfig ( 0 , NET_DVR_GET_PTZPOS , 0 , & m_ptzPosCurrent , sizeof ( NET_DVR_PTZPOS ) , & dwtmp ) ; //打印PTZ int m_iPara1 = HexToDecMa ( m_ptzPosCurrent . wPanPos ) ; int m_iPara2 = HexToDecMa ( m_ptzPosCurrent . wTiltPos ) ; int m_iPara3 = HexToDecMa ( m_ptzPosCurrent . wZoomPos ) ; cout << "P" << m_iPara1 / 10 + 1 << endl ; cout << "T" << m_iPara2 / 10 + 1 << endl ; cout << "Z" << m_iPara3 / 10 << endl ; waitKey ( 1 ) ; waitKey ( ) ; Sleep ( - 1 ) ; //--------------------------------------- //关闭预览 NET_DVR_StopRealPlay ( lRealPlayHandle ) ; //注销用户 NET_DVR_Logout ( lUserID ) ; //释放SDK资源 NET_DVR_Cleanup ( ) ; return ; #include&lt;cstdlib&gt;#include&lt;cstring&gt;#include&lt;iostream&gt;#include&lt;Windows.h&gt;#include&lt;HCNetSDK.h&gt;#include &lt;plaympeg4.h&gt;#include &lt;opencv2\opencv.hpp&gt;#include ...
海康 SDK编程指南 目前使用的 海康 SDK包括IPC_SDK(硬件设备),Plat_SDK(平台),其中两套SDK都需单独调用 海康 播放库PlayCtrl.dll来解码视频流,返回视频信息和角度信息。本文仅对视频监控常用功能的使用进行说明,其它未实现功能请参看设备网络SDK使用手册和播放库编程指南V7.2。 IPC_SDK编程指南 (一) SDK的引用 由于IPC_SDK没有SDK安装程...
项目中经常需要使用 海康 的网络摄像头,做视频图像算法经常会用到rtsp流,但是rtsp一般很难保证实时性且解码效率不能保证.通过 海康 给的python的demo,对模块进行封装以方便python像调用 opencv 的VideoCaputure一样调用.目录结构如下 ├── HKCam.py #自己写的封装 ├── HCNetSDK.py # SDK给定 ├── PlayCtrl.py #SDK给定 ├── lib │ ├── linux │ │ ├── HCNetSDKCom │ │ │...
/// 注册一个回调函数,获得当前表面的device context, 你可以在这个DC上画图(或写字),就好         /// 像在窗口的客户区DC上绘图,但这个DC不是窗口客户区的DC,而是DirectDraw里的         /// Off-Screen表面的DC。注意,如果是使用overlay表面,这个接口无效,你可以直接在窗口上绘图,只要不是透明色就不会被覆盖。
文章目录3D定位简述3D定位原理分析 海康 SDK实现ONVIF实现 球机 PTZ 与ONVIF的 PTZ 的对应关系 球机 的视场角与ONVIF的Zoom的对应关系3D 定位参考链接 海康 部分 球机 有3D定位功能,最近研究了一下 海康 球机 SDK实现和任意 球机 ONVIF实现。 3D定位是指通过设置图像目标坐标,旋转 球机 PTZ ,使目标在 球机 视野中心; 球机 坐标系有三个轴分别 控制 pan(水平) tilt(垂直) zoom(倍率); 3D定位原理分析 3D定位原理见下图(C是镜头中心,O是图像中心点
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schem
海康 威视摄像头是一款高品质、先进的监控摄像头,它具有可靠性、可控性和可扩展性,以及强大的智能化功能。 其中, 海康 摄像头的web 云台 控制 功能是其独特的特点之一。这个功能可以实现对摄像头的本地和远程 控制 ,用户可以通过 云台 控制 画面的旋转、变焦、变焦和对焦,以获得更清晰的图像和更全面的监控。 使用 海康 摄像头的web 云台 控制 功能,需要先在摄像头进行配置,然后使用支持web浏览器的设备打开 海康 摄像头的web页面,登录后即可进行 云台 控制 。用户可以使用方向键来 控制 云台 的移动方向,也可以使用数字键来 控制 变焦和对焦等操作。 此外, 海康 摄像头的web 云台 控制 功能还支持多画面预览,用户可以在同一个页面上对多个摄像头进行实时预览,并可以对其中任意一个摄像头进行 云台 控制 。 总之, 海康 威视摄像头的web 云台 控制 功能是其高品质、智能化的监控系统中不可或缺的一部分,为用户提供了更加全面、可控、易用的监控体验。
 
推荐文章