











using System; using System.Collections; using System.Runtime.InteropServices; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace TPOpenSDKCSharpDemo { public partial class MainForm : Form { private Context ctx摄像头1 = new Context(); PreviewController 摄像头1; IntPtr pCtx摄像头1 = IntPtr.Zero; private static TPOpenSDK.SDKReqCallback g_sdkReqCallback = sdkReqCallback; TPOpenSDK.SDKPlayerCallbackContext callBcakCtx摄像头1; TPOpenSDK.SDKPlayerCallbackContext playbackCallBcakCtx摄像头1; Hashtable reqOpHashTable摄像头1 = new Hashtable(); Hashtable reqControllerHashTable摄像头1 = new Hashtable(); public MainForm() { InitializeComponent(); } private void 初始化(PreviewController shexiangtou, string ip, int port) { if (shexiangtou.pDevHandle != IntPtr.Zero) { TPOpenSDK.SDKDeleteDevice(shexiangtou.pDevHandle); shexiangtou.pDevHandle = IntPtr.Zero; } shexiangtou.pDevHandle = TPOpenSDK.SDKCreateDevice(); if (shexiangtou.pDevHandle == IntPtr.Zero) { XLog.XTrace.WriteLine(string.Format("22AA错误:设备初始化失败!\n")); return; } XLog.XTrace.WriteLine(string.Format("22成功:设备初始化成功!\n")); int res = TPOpenSDK.SDKInitDevice(shexiangtou.pDevHandle, ip, port); //登录连接(shexiangtou); if (shexiangtou.pDevHandle == IntPtr.Zero) { XLog.XTrace.WriteLine(string.Format("错误:请先初始化设备!\n")); return; } int iReqID = TPOpenSDK.SDKReqLogin(shexiangtou.pDevHandle, g_sdkReqCallback, pCtx摄像头1, "admin", "111111"); reqControllerHashTable摄像头1.Add(iReqID, 0); reqOpHashTable摄像头1.Add(iReqID, SDKReqOperation.DevLogin); XLog.XTrace.WriteLine("登录连接中。。。\n"); } private void 获取视频端口(PreviewController shexiangtou) { Thread.Sleep(1000); int iReqID = TPOpenSDK.SDKReqGetVideoPort(shexiangtou.pDevHandle, g_sdkReqCallback, pCtx摄像头1); if (iReqID < TPOpenSDK.IPC_EC_OK) { XLog.XTrace.WriteLine(string.Format("错误:获取视频端口失败123!\n")); return; } reqControllerHashTable摄像头1.Add(iReqID, 0); reqOpHashTable摄像头1.Add(iReqID, SDKReqOperation.GetVideoPort); } private void 预览(PreviewController shexiangtou) { if (shexiangtou.pDevHandle == IntPtr.Zero) { XLog.XTrace.WriteLine(string.Format("错误:请先连接设备!\n")); return; } if (!shexiangtou.bPlaying) { if (TPOpenSDK.SDKDevGetVideoPort(shexiangtou.pDevHandle) < 0) { XLog.XTrace.WriteLine(string.Format("错误:请先获取视频端口!\n")); return; } int iChannel = -1; if (shexiangtou.pPlayerHandle != IntPtr.Zero) { TPOpenSDK.SDKDeletePlayer(shexiangtou.pPlayerHandle); } shexiangtou.pPlayerHandle = TPOpenSDK.SDKCreatePlayer(callBcakCtx摄像头1); TPOpenSDK.SDKPlayerStartPreview(shexiangtou.pPlayerHandle, shexiangtou.pDevHandle, iChannel, TPOpenSDK.TPPLAYER_PLAY_QUALITY_VGA, shexiangtou.pWinHandle); } else { if (shexiangtou.pPlayerHandle != IntPtr.Zero) { TPOpenSDK.SDKPlayerStopPreview(shexiangtou.pPlayerHandle); } if (shexiangtou.bTalking && shexiangtou.pTalkPlayerHandle != IntPtr.Zero) { TPOpenSDK.SDKPlayerStopVoiceTalk(shexiangtou.pTalkPlayerHandle); } } } private void btnSnapshot_Click(object sender, EventArgs e) { 截图(摄像头1); } private bool 截图(PreviewController shexiangtou) { if (shexiangtou.pPlayerHandle == IntPtr.Zero) { XLog.XTrace.WriteLine(string.Format("错误:请先进行播放!\n")); return false; } string strFilePath = string.Format("\\TPSnapshot_{0}.jpg", DateTime.Now.ToString("yyyy-MM-dd-hhmmss")); TPOpenSDK.SDKPlayerSnapshot(shexiangtou.pPlayerHandle, System.Windows.Forms.Application.StartupPath + strFilePath); return true; } delegate void SetUIcallback(); private static void sdkReqCallback(IntPtr pContext, TPOpenSDK.SDKIPCReqResponse pResp, int iDataNum, IntPtr pData) { Context context = (Context)Marshal.PtrToStructure(pContext, typeof(Context)); //SetUIcallback callback = delegate ()/*使用委托*/ //{ context.Form.handleReqCallback(pResp, iDataNum, pData); //}; //context.Form.textBoxLog.Invoke(callback); } private void handleReqCallback(TPOpenSDK.SDKIPCReqResponse resp, int iDataNum, IntPtr pData) { if (!reqControllerHashTable摄像头1.Contains(resp.iReqID) || !reqOpHashTable摄像头1.Contains(resp.iReqID)) { reqControllerHashTable摄像头1.Remove(resp.iReqID); reqOpHashTable摄像头1.Remove(resp.iReqID); return; } int iReqWinIndex = (int)reqControllerHashTable摄像头1[resp.iReqID]; SDKReqOperation operation = (SDKReqOperation)reqOpHashTable摄像头1[resp.iReqID]; if (operation != SDKReqOperation.DownloadProgress) /* DownloadProgress回调先不删除,会多次收到 */ { reqControllerHashTable摄像头1.Remove(resp.iReqID); reqOpHashTable摄像头1.Remove(resp.iReqID); } switch (operation) { case SDKReqOperation.DevLogin: if (resp.iError < TPOpenSDK.IPC_EC_OK) { XLog.XTrace.WriteLine(string.Format("错误:登录设备失败,错误:{0},设备返回错误码:{1}\n", resp.iError, resp.iRval)); break; } else { XLog.XTrace.WriteLine(string.Format("33成功:设备登录!\n")); int iReqID = TPOpenSDK.SDKReqConnectDev(摄像头1.pDevHandle, g_sdkReqCallback, pCtx摄像头1); if (iReqID < TPOpenSDK.IPC_EC_OK) { XLog.XTrace.WriteLine(string.Format("错误:设备连接调用失败456!\n")); //break; return; } reqOpHashTable摄像头1.Add(iReqID, SDKReqOperation.DevConnect); reqControllerHashTable摄像头1.Add(iReqID, iReqWinIndex); Task.Run(() => 获取视频端口(摄像头1) ); } break; case SDKReqOperation.GetVideoPort: if (resp.iError < TPOpenSDK.IPC_EC_OK) { XLog.XTrace.WriteLine(string.Format("44AA错误:获取视频端口失败:{0},设备返回错误码:{1}\n", resp.iError, resp.iRval)); break; } XLog.XTrace.WriteLine(string.Format("44成功:获取视频端口!\n")); //labelVideoPort = Convert.ToString(TPOpenSDK.SDKDevGetVideoPort(摄像头1.pDevHandle)); 预览(摄像头1); break; } } public void playerSnapshotCallback(IntPtr pPlayer, int iErrorCode, string pcFilePath) { SetUIcallback callback = delegate ()/*使用委托*/ { if (iErrorCode != TPOpenSDK.TPPLAYER_PLAY_OK) { XLog.XTrace.WriteLine(string.Format("错误:截图失败,返回码:{0}\n", iErrorCode)); } else { XLog.XTrace.WriteLine(string.Format("8成功:截图路径:{0}\n", pcFilePath)); } }; this.BeginInvoke(callback); } private void MainForm_Load(object sender, EventArgs e) { ctx摄像头1.Form = this; pCtx摄像头1 = Marshal.AllocHGlobal(Marshal.SizeOf(ctx摄像头1)); Marshal.StructureToPtr(ctx摄像头1, pCtx摄像头1, false); 摄像头1 = new PreviewController(); 摄像头1.pWinHandle = pictureBox1.Handle; callBcakCtx摄像头1.SnapshotCallback = playerSnapshotCallback; playbackCallBcakCtx摄像头1.SnapshotCallback = playerSnapshotCallback; if (TPOpenSDK.SDKAppReqStart() == TPOpenSDK.IPC_EC_OK) { XLog.XTrace.WriteLine(string.Format("11成功:SDK初始化成功!\n")); 初始化(摄像头1, "10.8.32.252", 80); } } } }
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。