海康流媒体服务器客户端网页打不开,海康dvr流媒体服务器+客户端

海康流媒体服务器客户端网页打不开,海康dvr流媒体服务器+客户端实例简介 实例截图 核心代码 usingSystem usingSystem Collections Generic usingSystem ComponentMod usingSystem Data usingSystem Drawing usingSystem Linq usingSystem Text usingSystem Windows Forms using

【实例简介】

【实例截图】

65b81318f61e47eb51efcfd6accf8c8b.png

346490aec18a7792ffe23c192b500224.png

【核心代码】

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

using System.Runtime.InteropServices;

using System.Net;

using System.Net.Sockets;

using System.Threading;

namespace MediaServerFrom

{

public partial class Form1 : Form

{

#region 定义

int m_lUserID = -1;

byte[] headStream;//头数据

ClientList clientList = ClientList.GetClientList();

CHCNetSDK.REALDATACALLBACK m_fRealData;

Socket listenSocket;

Semaphore m_maxNumberAcceptedClients;

#endregion

///

/// Server构造函数,启动服务端Socket及海康SDK获取设备数据

///

/// 服务端IP配置

/// 最大客户端连接数

/// 设备监听通道

public void Server(IPEndPoint ipPoint, int numConnections, int channel)

{

if (!InitHK())

{

return;

}

RunGetStream(channel);

listenSocket = new Socket(ipPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

listenSocket.Bind(ipPoint);

m_maxNumberAcceptedClients = new Semaphore(numConnections, numConnections);

listenSocket.Listen(100);

AddInfo(“开始监听客户端连接……”);

StartAccept(null);

}

#region HKSDK

///

/// 获取视频数据

///

/// 通道号

private void RunGetStream(int channel)

{

if (m_lUserID != -1)//初始化成功

{

CHCNetSDK.NET_DVR_CLIENTINFO lpClientInfo = new CHCNetSDK.NET_DVR_CLIENTINFO();

lpClientInfo.lChannel = channel;//通道

lpClientInfo.lLinkMode = 0x0000;//码流

lpClientInfo.sMultiCastIP = “”;//组播地址,空着就好了

m_fRealData = new CHCNetSDK.REALDATACALLBACK(RealDataCallBack);

IntPtr pUser = new IntPtr();

int m_lRealHandle = CHCNetSDK.NET_DVR_RealPlay_V30(m_lUserID, ref lpClientInfo, m_fRealData, pUser, 1);//获取视频流,视频流处理在回调函数m_fRealData里面做

AddInfo(“开始获取视频数据……”);

}

else//初始化 失败,因为已经初始化了

{

AddInfo(“视频数据获取失败……”);

}

}

private bool InitHK()

{

bool m_bInitSDK = CHCNetSDK.NET_DVR_Init();//初始化SDK

if (m_bInitSDK == false)

{

return false;

}

else

{

AddInfo(“设备SDK初始化成功…….”);

CHCNetSDK.NET_DVR_DEVICEINFO_V30 DeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V30();

m_lUserID = CHCNetSDK.NET_DVR_Login_V30(txtDvrIP.Text, Convert.ToInt32(txtDvrPort.Text), txtUserName.Text, txtDvrPwd.Text, ref DeviceInfo);//登录DVR

if (m_lUserID != -1)

{

AddInfo(“监控设备登录成功…….”);

return true;

}

else

{

AddInfo(“监控设备登录失败,稍后再试…….”);

return false;

}

}

}

///

/// 视频流回调

///

/// 播放窗口句柄

/// 数据类型

/// 缓冲区指针

/// 缓冲区大小

/// 用户数据

private void RealDataCallBack(Int32 lRealHandle, UInt32 dwDataType, IntPtr pBuffer, UInt32 dwBufSize, IntPtr pUser)

{

byte[] data = new byte[dwBufSize];

Marshal.Copy(pBuffer, data, 0, (int)dwBufSize);//写到缓存

if (dwDataType == CHCNetSDK.NET_DVR_SYSHEAD)

{

headStream = data;

}

clientList.SetSendData(data);//发送到客户端

return;

}

#endregion

#region Socket

///

/// 监听客户端

///

///

private void StartAccept(SocketAsyncEventArgs acceptEventArg)

{

if (acceptEventArg == null)

{

acceptEventArg = new SocketAsyncEventArgs();

acceptEventArg.Completed = new EventHandler(IO_Completed);

}

else

{

acceptEventArg.AcceptSocket = null;

}

m_maxNumberAcceptedClients.WaitOne();

bool willRaiseEvent = listenSocket.AcceptAsync(acceptEventArg);

if (!willRaiseEvent)

{

ProcessAccept(acceptEventArg);

}

}

///

/// 增加客户端列表

///

///

private void ProcessAccept(SocketAsyncEventArgs e)

{

clientList.AddClient(new Client(e.AcceptSocket, headStream));

StartAccept(e);

}

///

/// Socket回调函数

///

///

///

private void IO_Completed(object sender, SocketAsyncEventArgs e)

{

switch (e.LastOperation)

{

case SocketAsyncOperation.Accept:

ProcessAccept(e);

break;

default:

throw new ArgumentException(“The last operation completed on the socket was not a receive or send”);

}

}

#endregion

public Form1()

{

InitializeComponent();

}

///

/// 预览功能

///

///

///

private void btnPreview_Click(object sender, System.EventArgs e)

{

if (txtDvrIP.Text != “” && txtDvrPort.Text != “” && txtUserName.Text != “” && txtDvrPwd.Text != “”)

{

IPEndPoint IP = new IPEndPoint(IPAddress.Parse(“127.0.0.1”), 1212);

Server(IP, 500, 1);

}

else

{

MessageBox.Show(“设备信息要先输入~!”);

}

}

///

/// 向屏幕输出显示状态信息(这里使用了委托机制)

///

///

public delegate void AddInfoDelegate(string str);

///

/// 输出到屏幕

///

///

public void AddInfo(string str)

{

if (listBox1.InvokeRequired == true)

{

AddInfoDelegate d = new AddInfoDelegate(AddInfo);

this.Invoke(d, str);

}

else

{

listBox1.Items.Add(str);

listBox1.TopIndex = listBox1.Items.Count – 1;

listBox1.ClearSelected();

}

}

private void Form1_Load(object sender, EventArgs e)

{

}

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208209.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午12:05
下一篇 2026年3月19日 下午12:06


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号