C# 视频监控系列(8):服务器端——预览和可被客户端连接
2009-04-08 08:23:42 来源:WEB开发网代码说明:
1. 仅仅实现服务器端的预览代码并不多,这也是在VC++ Demo中不断注释代码、在已经成功完成大部分功能的基础上才试出来的,可见预览和服务器启动是相对独立的。
2. Form2_Move是窗体移动时执行的,在VC++的也是在窗体移动中进行了同样处理,否则你一移动窗体会出现难看的一幕呢 : )
3. StartVideoPreview的参数RECT *rect 直接使用Rectangle结构体即可。
4. panel1是窗体是的一个面板Panel。
三、让客户端连接并预览
C# Code:
//将委托声明为成员变量!!
STREAM_DIRECT_READ_CALLBACK sdrc;
/// <summary>
/// 预览并客户端连接
/// </summary>
private void PreviewAndClientConnect()
{
sdrc = new STREAM_DIRECT_READ_CALLBACK(STREAM_DIRECT_READ_CALLBACK1);
//[必须]注册编码图像数据流直接读取回调函数
HikVisionSDK.RegisterStreamDirectReadCallback(sdrc, this.Handle);
//[必须]启动服务端
HikServer.MP4_ServerSetStart(new StartCap(StartCap));
//HikServer.MP4_ServerSetStop(sc);
//HikServer.MP4_ServerSetIBPMode(new SetIBP(SetIBP));
//[必须]设置回调,重新生成一个I帧
HikServer.MP4_ServerSetCapIFrame(new MakeIFrame(MakeIFrame));
//HikServer.MP4_ServerSetTTL(64);
//HikServer.MP4_ServerSetNetPort(5050, 6050);
PSERVER_VIDEOINFO videoInfo = new PSERVER_VIDEOINFO();
//初始化
videoInfo.m_datatype = new byte[64];
//设置发送缓冲区大小
HikServer.MP4_ServerSetBufNum((ushort)0, (ushort)90);
videoInfo.m_datatype[0] = (byte)ChannelDataType.SMALLPIC;
videoInfo.m_channum = (byte)1;
videoInfo.m_waittime = 5;
//设置每个通道的最大用户数量
//HikServer.MP4_ServerMaxUser(0, 24);
if (HikServer.MP4_ServerStart(ref videoInfo) == 0)
{
MessageBox.Show("服务端启动错误!!");
}
//开启视频预览
StartVideoPreview();
}
#region 回调函数
public void StartCap(int port)
{
HikVisionSDK.StartVideoCapture(ChannelHandle);
}
public void MakeIFrame(ulong port)
{
HikVisionSDK.CaptureIFrame(ChannelHandle);
}
public int STREAM_DIRECT_READ_CALLBACK1(int channelNum, IntPtr DataBuf, int Length, FrameType_t frameType, IntPtr context)
{
int status = 0;
HikServer.MP4_ServerWriteDataEx(channelNum, DataBuf, Length, (int)frameType, status, 0);
return 0;
}
#endregion
更多精彩
赞助商链接