#region IP摄像头代码

///

/// ip摄像头代码

///

//视频

private IntPtr m_hChannel;

private IntPtr m_hServer, phPlay;

public delegate void MyInvoke(string str);

public delegate void OutDelegate(IntPtr hSearch, DVSNET_FILE_TIME pFileTime, DVSNET_FILE_INFO pFileInfo, IntPtr pcontext);

//远程视频处理

public void BeforeRecordFrame(IntPtr hChannel, ref RECORD_INFO pRecordInfo, ref FRAME_HEADER pFrameHeader, IntPtr pcontext)

{

}

DVSNETClient.FileSearchCallback File_SearchCallback; //远程视频回放

public void FileSearchCallback(IntPtr hSearch, ref DVSNET_FILE_TIME pFileTime, ref DVSNET_FILE_INFO pFileInfo, IntPtr pcontext)

{

OutText(hSearch, pFileTime, pFileInfo, pcontext);

}

public void OutText(IntPtr hSearch, DVSNET_FILE_TIME pFileTime, DVSNET_FILE_INFO pFileInfo, IntPtr pcontext)

{

if (lvVideo.InvokeRequired)

{

OutDelegate outdelegate = new OutDelegate(OutText);

this.BeginInvoke(outdelegate, new object[] { hSearch, pFileTime, pFileInfo, pcontext });

return;

}

lvVideo.View = View.Details;

lvVideo.FullRowSelect = true;

for (int i = 0; i < pFileInfo.sFileName.Count(); i++)

{

ListViewItem item1 = new ListViewItem(pFileInfo.sFileName, i);

lvVideo.Items.AddRange(new ListViewItem[] { item1 });

}

}

private void pb_del_video_Click(object sender, EventArgs e)

{

this.Close();

}

public void SearchNotify(int nDevType,string sServName,string sServSerial,string sUrl,IntPtr MacAddr,ushort wWebPort,ushort wDataPort,string sSubNetMask,string sGateWay,string sMultiIp,string sDNS,ushort wMultiPort,int nChCount,uint bDHCP,IntPtr pcontext)

{

string str = Convert.ToString(wDataPort);

//string str2 = sUrl + "(" + str + ")";

string str2 = sUrl;

this.AddText(str2);

}

//赋值给cmbIP

private void AddText(string str)

{

MyInvoke method = new MyInvoke(this.AddTextToCmb);

base.BeginInvoke(method, new object[] { str });

}

public void AddTextToCmb(string str)

{

this.CmbIP.Items.Add(str);

}

//s搜索服务器

private void btnVideoSearck_Click(object sender, EventArgs e)

{

this.CmbIP.Items.Clear();

errornum errornum = DVSNETClient.DVSNET_SearchServers(0xbb8, 1, new DVSNETClient.SearchNotify(this.SearchNotify), base.Handle, IntPtr.Zero);

if (errornum == errornum.DVSNET_ERR_OK)

{

timerVideo.Enabled = true;

btnVideoSearck.Enabled = false;

}

else

{

}

}

//打开链接

private void btnVideoOpen_Click(object sender, EventArgs e)

{

string text = this.CmbIP.Text;

string sServIp = text;

int index = text.IndexOf('(');

if (index != -1)

{

string str3 = new string(text.ToCharArray(), 0, index);

sServIp = str3;

}

errornum errornum = DVSNETClient.DVSNET_OpenServer(this.EdtName.Text, sServIp, Convert.ToUInt16(this.EdtPort.Text), this.EdtUser.Text, this.EdtPassword.Text, ref this.m_hServer, 0, 0);

this.btnVideoOpen.Enabled = false; //不能点击

if (errornum == errornum.DVSNET_ERR_OK)

{

DVSNET_SERVER_INFO dvsnet_server_info = new DVSNET_SERVER_INFO();

MessageBox.Show("打开链接成功!");

dvsnet_server_info = new DVSNET_SERVER_INFO

{

lStructSize = Marshal.SizeOf(dvsnet_server_info)

};

DVSNETClient.DVSNET_GetServerInfo(this.m_hServer, ref dvsnet_server_info);

// this.CmbChannel.Items.Clear();

for (int i = 0; i < dvsnet_server_info.nChnNum; i++)

{

int num3 = i + 1;

// this.CmbChannel.Items.Add(num3.ToString());

}

// this.CmbChannel.SelectedIndex = 0;

}

else

{

MessageBox.Show("打开链接失败,错误码为:" + errornum.ToString());

this.btnVideoOpen.Enabled = true; //不能点击

}

}

//关闭链接

private void btnVideoClose_Click(object sender, EventArgs e)

{

if (this.m_hChannel != IntPtr.Zero)

{

MessageBox.Show("请关闭通道!再关闭链接");

}

else

{

if (this.m_hServer != IntPtr.Zero)

{

DVSNETClient.DVSNET_CloseServer(this.m_hServer);

this.m_hServer = IntPtr.Zero;

this.btnVideoOpen.Enabled = true; //不能点击

}

}

}

//打开通道

IntPtr selServer = IntPtr.Zero;

private void btnVideoOpenChnnel_Click(object sender, EventArgs e)

{

this.panelVideo.Visible = true;

this.pannelVideoTwo.Visible = false;

if (this.m_hServer != IntPtr.Zero)

{

this.btnVideoOpenChnnel.Enabled = false; //不能点击

DVSNET_CHANNEL_INFO dvsnet_channel_info = new DVSNET_CHANNEL_INFO();

MessageBox.Show("打开通道成功!请稍候");

dvsnet_channel_info = new DVSNET_CHANNEL_INFO

{

lStructSize = Marshal.SizeOf(dvsnet_channel_info),

nProtocol = 0,

hWndDisplay = this.panelVideo.Handle,

bPlayStart = 1,

dwStreamNo = 0

};

DVSNETClient.DVSNET_OpenChannel(this.m_hServer, Convert.ToUInt16(0), ref dvsnet_channel_info, ref this.m_hChannel);

}

else

{

MessageBox.Show("请打开链接!");

}

}

//关闭通道

private void btnVideoCloseChnnel_Click(object sender, EventArgs e)

{

if (this.m_hChannel != IntPtr.Zero)

{

DVSNETClient.DVSNET_CloseChannel(this.m_hChannel);

MessageBox.Show("关闭通道成功!请稍候");

this.m_hChannel = IntPtr.Zero;

this.btnVideoOpenChnnel.Enabled = true; //不能点击

}

}

//开始录像

private void btnVideoOn_Click(object sender, EventArgs e)

{

try

{

string ss = DateTime.Now.ToString().Replace(":", "-").Replace(" ", "-").Replace("/", "-") + ".asf";

if (this.panelVideo.Visible == false)

{

MessageBox.Show("请切换到打开通道");

}

else

{

if (this.m_hChannel != IntPtr.Zero)

{

this.btnVideoOn.Enabled = false; //不能点击

//DVSNETClient.DVSNET_StartRecord(this.m_hChannel, 1, FILETYPE.FILETYPE_ASF, ss, new DVSNETClient.BeforeRecordFrame(this.BeforeRecordFrame), base.Handle);

DVSNETClient.DVSNET_StartRecord(this.m_hChannel, 1, FILETYPE.FILETYPE_ASF, ss,Before_RecordFrame, base.Handle);

}

else

{

MessageBox.Show("请打开通道!");

}

}

}

catch (Exception ex)

{

MessageBox.Show(ex.ToString());

}

}

//停止录像

private void btnStopRec_Click(object sender, EventArgs e)

{

DVSNETClient.DVSNET_StopRecord(this.m_hChannel);

MessageBox.Show("已停止录像!");

this.btnVideoOn.Enabled = true; //不能点击

}

//打开本地视频

IntPtr phPlayer;

private void btnsearch_Click(object sender, EventArgs e)

{

try

{

if (m_hServer != IntPtr.Zero)

{

string fName = "";

OpenFileDialog openFileDialog = new OpenFileDialog();

openFileDialog.InitialDirectory = Application.StartupPath;

//注意这里写路径时要用c:\而不是c:

openFileDialog.Filter = "文本文件|*.asf|所有文件|*.asf";

openFileDialog.RestoreDirectory = true;

openFileDialog.FilterIndex = 1;

if (openFileDialog.ShowDialog() == DialogResult.OK)

{

this.panelVideo.Visible = false;

this.pannelVideoTwo.Visible = true;

this.btnsearch.Enabled = false;

fName = openFileDialog.FileName;

IntPtr hDisplayWnd = pannelVideoTwo.Handle;

phPlayer = (IntPtr)0;

DVSNETClient.DVSPLAYER_ReleaseInstance(phPlayer); //释放

DVSNETClient.DVSPLAYER_Stop(phPlayer); //释放本地

errornum aa = DVSNETClient.DVSPLAYER_CreateInstance(hDisplayWnd, ref phPlayer, 0);

aa = DVSNETClient.DVSPLAYER_OpenFile(phPlayer,ref fName, 1);

DVSNETClient.DVSPLAYER_Start(phPlayer);

}

else

{

this.panelVideo.Visible = true;

this.pannelVideoTwo.Visible = false;

}

}

else

{

MessageBox.Show("请打开通道!");

}

}

catch (Exception)

{

throw;

}

}

//停止视频播放

private void btnhf_Click(object sender, EventArgs e)

{

this.panelVideo.Visible = true;

this.pannelVideoTwo.Visible = false;

IntPtr phPlayer = (IntPtr)0;

DVSNETClient.DVSPLAYER_Stop(phPlayer);

MessageBox.Show("已停止回放录像!");

this.btnsearch.Enabled = true; ;

}

//查找远程视频

private void btnSearchbyName_Click(object sender, EventArgs e)

{

if (m_hServer == IntPtr.Zero)

{

MessageBox.Show("请先打开链接登录服务器!");

return;

}

this.btnSearchbyName.Enabled = false;

DVSNET_FILE_TIME pStartTime = new DVSNET_FILE_TIME();

pStartTime.lYear = (uint)this.dateTimePicker1.Value.Year;

pStartTime.lMonth = (uint)this.dateTimePicker1.Value.Month;

pStartTime.lDay = (uint)this.dateTimePicker1.Value.Day;

pStartTime.nHour = 0;

pStartTime.nMinute = 0;

DVSNET_FILE_TIME pEndTime = new DVSNET_FILE_TIME();

pEndTime.lYear = (uint)this.dateTimePicker1.Value.Year;

pEndTime.lMonth = (uint)this.dateTimePicker1.Value.Month;

pEndTime.lDay = (uint)this.dateTimePicker1.Value.Day;

pEndTime.nHour = 23;

pEndTime.nMinute = 59;

IntPtr phSearch = IntPtr.Zero;

//if(){}

errornum bak = DVSNETClient.DVSNET_ServerFindFile(m_hServer, 0, 0, (char)0xff, ref pStartTime, ref pEndTime, File_SearchCallback, (IntPtr)0, ref phSearch);

if (bak != errornum.DVSNET_ERR_OK)

{

MessageBox.Show("查找远程视频失败!");

}

this.btnSearchbyName.Enabled = true;

}

//鼠标双击事件

private void lvVideo_MouseDoubleClick(object sender, MouseEventArgs e)

{

this.panelVideo.Visible = false;

this.pannelVideoTwo.Visible = true;

string sa = "";

IntPtr hWnd = pannelVideoTwo.Handle;

if (lvVideo.SelectedItems.Count > 0)

{ //this.listView1.SelectedIndices

sa = lvVideo.SelectedItems[0].Text.ToString();

}

DVSNETClient.DVSPLAYER_Stop(phPlayer); //释放本地回放

DVSNETClient.DVSNET_ClosePlayFile(phPlay); //释放远程

phPlay = IntPtr.Zero;

errornum bak = DVSNETClient.DVSNET_PlayFileByName(m_hServer, sa, 1, hWnd, ref phPlay);

if (bak == errornum.DVSNET_ERR_OK)

{

UInt32 value = 0;

DVSNETClient.DVSNET_ControlPlayFile(phPlay, 1, 0, ref value);

}

else

{

MessageBox.Show("回放远程文件 失败,错误码为" + bak.ToString());

}

}

#endregion

//时间控件 1s

private void timerVideo_Tick(object sender, EventArgs e)

{

int nStatus = 0;

errornum errnum = DVSNETClient.DVSNET_GetSearchStatus(ref nStatus);

if (errnum == errornum.DVSNET_ERR_OK)

{

if (nStatus == 1)

{

btnVideoSearck.Enabled = true;

timerVideo.Enabled = false;

MessageBox.Show("没有启动搜索");

}

if (nStatus == 2)

{

//MessageBox.Show("正在搜索!");

}

if (nStatus == 3)

{

timerVideo.Enabled = false;

btnVideoSearck.Enabled = true;

if (this.CmbIP.Items.Count == 0)

{

MessageBox.Show("没有找到设备!请接上设备");

}

else

{

MessageBox.Show("已找到设备,请选择IP地址");

}

}

}

else

{

MessageBox.Show("DVSNET_GetSearchStatus 失败,错误码为" + errnum.ToString());

}

}

网络摄像头ip php,C#实现IP摄像头的方法相关推荐

  1. 电脑有摄像头吗_知道ip地址就能入侵摄像头吗?

    原作者:天津华来科技 微信公众号 原文链接:https://mp.weixin.qq.com/s/3qgEgPNdbkAE9QeLQzH03A 我们经常看到有不少电影或电视剧中的黑客说"给我 ...

  2. ping 丢包 网络摄像头_视频监控系统的摄像头掉线看交换机连接注意事项

    某智创园做了一个监控工程,使用64台200万的IPC以及两台64路NVR,出现多个通道频繁掉线.黑屏.经初步判断,我们怀疑是网络传输存在问题,决定前往现场排查和解决问题,确保工程交付. 问题现象 到达 ...

  3. chrome web获取mac地址_老鬼傻瓜式讲解网络知识:网络设备如何通过IP地址获取设备MAC地址...

    导读:在前面老鬼向各位好友介绍一些关于网络的基础知识,同时针对ICMP协议(常见使用的Ping测试网络就是使用该协议)进行了详细介绍.具体可参见<Ping是你经常测试工业智能制造网络的工具,但你 ...

  4. 网络分层模型OSI和TCP/IP四层模型

    网络分层模型OSI和TCP/IP四层模型 网络分层模型OSI和TCP/IP四层模型 OSI模型,即开放式通信系统互联参考模型(Open System Interconnection,OSI/RM,Op ...

  5. linux 添加路由_linux网络知识:路由策略(ip rule,ip route)

    一,路由策略(使用ip rule命令操作路由策略数据库) 基于策略的路由比传统路由在功能上更强大,使用更灵活,它使网络管理员不仅能够根据目的地址而且能够根据报文大小,应用或IP源地址等属性来选择转发路 ...

  6. 为什么百度查到的ip地址和ipconfig查到的不同;详解公网Ip和私网ip; 网络分类ABC类;

    文章目录 1.百度查到的ip和ipconfig查到的不同 1.1引出问题 1.2不一样的原因 2.IP地址分类 2.1IP类别 2.1 Public IP和Private IP 3.总结 3.1整理上 ...

  7. linux 工业 网络协议,简单了解Linux TCP/IP协议栈

    什么是TCP/IP协议? TCP/IP是互联网相关各类协议族的总称.计算机与网络设备之间如果要相互通信,双方就必须基于相同的方法.比如,如何探测到通信目标.由哪一边先发起通信.使用哪种语言进行通信.怎 ...

  8. CentOS8设置桥接网络模式,并配置静态IP及外网访问

    之前,在使用winSCP工具远程连接linux时出现了无法连接的情况,将网络连接配置成桥接模式后,虽然可以无压力客户端连接,但新问题又来了,linux无法访问外网. 首先,我们在VMware中打开网络 ...

  9. 计算机网络-IP数据报计算(IP数据报分片)一个数据报部分长度为3400字节(使用固定首部)。现在经过一个网络传输,该网络的MTU为800字节:

    IP数据报计算(IP数据报分片) 题目: 一个数据报部分长度为3400字节(使用固定首部).现在经过一个网络传输,该网络的MTU为800字节: (1)应分为几个数据报片? (2)各数据报片的数据字段长 ...

  10. 【计算机网络】6. 网络基础4之详解IP协议( IP协议头格式、IP地址管理、路由选择)

    目录 1. IP协议头格式 2. IP地址管理 2.1 IP地址的早期划分方式 2.1.1 A类 2.1.2 B类 2.1.3 C类 2.2 现在分配IP的方式:CIDR方式 2.2.1 引入子网掩码 ...

最新文章

  1. Java网络编程笔记4
  2. 【计算机网络】传输层 : TCP 可靠传输 ( 可靠传输机制 | 快速重传机制 )
  3. mysql t添加注释_mysql—添加注释(comment)的用法
  4. LeetCode 8 字符串转换整数 (atoi)
  5. LeetCode 287. Find the Duplicate Number
  6. 山西专科学校计算机专业排名,河南单招计算机专业专科学校排名
  7. ipv6网络使用scp,并解决No route to host与no matches found报错
  8. 又一次摔MFC坑里了
  9. 博客园修改页面显示样式
  10. pcm5102a解码芯片音质评测_简单测评200元档可能是唯一搭载高通QCC3020芯片的真无线蓝牙耳机...
  11. 编程语言python入门-【python】编程语言入门经典100例--19
  12. poj 1322 Chocolate (概率dp)
  13. 我,第一次做项目经理,干赔了
  14. eviews9.0详细安装步骤
  15. 华为 M5680t对HGU ONU配置指导
  16. win10卸载软件程序
  17. java.net.MalformedURLException: unknown protocol: jrt 异常解决方法
  18. 软件设计工程——设计流程
  19. 基于公开网站挖掘敏感信息的研究与分析- Fofa 搜索
  20. 2023团队程序设计天梯赛选拔赛

热门文章

  1. 关于删库 恢复 (慎重使用,未亲测)
  2. oracle数据库执行sql很慢
  3. mysql(指RDS)验证pureftpd登录
  4. Arcgis Android API开发之离线地图
  5. 【原创】纯CSS 仿U9论坛 箭形导航栏 兼容IE6+IE7+FF
  6. 基于Matlab的标记分水岭分割算法
  7. 【算法学习】Fast burst images denoising
  8. 如何在win10 64位下搭载汇编环境(包含汇编dosbox和masm文件)
  9. PSP模块Tensorflow/Pytorch实现小结
  10. PHP文件操作-读取数据库文件路径复制到另一个目录