WEB开发网
开发学院软件开发C语言 C# 视频监控系列(8):服务器端——预览和可被客... 阅读

C# 视频监控系列(8):服务器端——预览和可被客户端连接

 2009-04-08 08:23:42 来源:WEB开发网   
核心提示: 代码说明: 1. 仅仅实现服务器端的预览代码并不多,这也是在VC++ Demo中不断注释代码、在已经成功完成大部分功能的基础上才试出来的,C# 视频监控系列(8):服务器端——预览和可被客户端连接(5),可见预览和服务器启动是相对独立的, 2. Form2_Move是窗体移动时执行的,在

代码说明:

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

上一页  1 2 3 4 5 6  下一页

Tags:视频监控 系列 服务器

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接