Ejemplo n.º 1
0
        public bool StartDynamicDecode(CameraConf camera, int iWnd)
        {
            CHCNetSDK.NET_DVR_PU_STREAM_CFG_V41 struStreamCfgV41 = new CHCNetSDK.NET_DVR_PU_STREAM_CFG_V41();
            CHCNetSDK.NET_DVR_DEC_STREAM_DEV_EX struStreamDev    = new CHCNetSDK.NET_DVR_DEC_STREAM_DEV_EX();

            struStreamCfgV41.dwSize                       = (uint)Marshal.SizeOf(struStreamCfgV41);
            struStreamCfgV41.byStreamMode                 = 1; //取流模式
            struStreamDev.struDevChanInfo.byChanType      = 0; //通道类型
            struStreamDev.struDevChanInfo.byChannel       = 0; //该参数无效,通道号见dwChannel
            struStreamDev.struDevChanInfo.byTransProtocol = 0; //传输协议类型0-TCP,1-UDP
            struStreamDev.struDevChanInfo.byFactoryType   = 0; //前端设备厂家类型,通过接口获取

            struStreamDev.struDevChanInfo.byAddress   = camera.CameraIP;
            struStreamDev.struDevChanInfo.wDVRPort    = (ushort)camera.CameraPort;
            struStreamDev.struDevChanInfo.dwChannel   = (uint)camera.DwChannel; //通道号
            struStreamDev.struDevChanInfo.byTransMode = (byte)camera.Mllx;      //传输码流模式
            struStreamDev.struDevChanInfo.sUserName   = camera.RasUser;
            struStreamDev.struDevChanInfo.sPassword   = camera.RasPassword;

            if (!string.IsNullOrEmpty(camera.MediaIP))                    //流媒体 IP 不为空
            {
                struStreamDev.struStreamMediaSvrCfg.byValid        = 1;   //启用流媒体
                struStreamDev.struStreamMediaSvrCfg.wDevPort       = 554; //端口
                struStreamDev.struStreamMediaSvrCfg.byTransmitType = 0;   //TCP
                struStreamDev.struStreamMediaSvrCfg.byAddress      = camera.MediaIP;
            }

            uint   dwUnionSize    = (uint)Marshal.SizeOf(struStreamCfgV41.uDecStreamMode);
            IntPtr ptrStreamUnion = Marshal.AllocHGlobal((Int32)dwUnionSize);

            Marshal.StructureToPtr(struStreamDev, ptrStreamUnion, false);
            struStreamCfgV41.uDecStreamMode = (CHCNetSDK.NET_DVR_DEC_STREAM_MODE)Marshal.PtrToStructure(ptrStreamUnion, typeof(CHCNetSDK.NET_DVR_DEC_STREAM_MODE));
            Marshal.FreeHGlobal(ptrStreamUnion);

            if (!CHCNetSDK.NET_DVR_MatrixStartDynamic_V41(m_userId, m_deChannel[iWnd], ref struStreamCfgV41))
            {
                uint errorCode = CHCNetSDK.NET_DVR_GetLastError();
                Log.GetLogger().ErrorFormat("NET_DVR_MatrixStartDynamic_V41 failed, error code = {0}", errorCode);
                return(false);
            }

            Log.GetLogger().InfoFormat("开启动态解码,考车{0},ecode={1},子窗口={2},mediaIP={3},码流={4}(0主码流,1子码流),{5}_{6}",
                                       m_kch, camera.CameraBH, m_deChannel[iWnd], camera.MediaIP, camera.Mllx, camera.CameraIP, camera.DwChannel);
            return(true);
        }
Ejemplo n.º 2
0
        private void btnStartDecode_Click(object sender, EventArgs e)
        {
            CHCNetSDK.NET_DVR_PU_STREAM_CFG_V41 m_struStreamCfgV41 = new CHCNetSDK.NET_DVR_PU_STREAM_CFG_V41();
            m_struStreamCfgV41.dwSize       = (uint)Marshal.SizeOf(m_struStreamCfgV41);
            m_struStreamCfgV41.byStreamMode = (byte)(comboBoxStreamMode.SelectedIndex + 1);

            //通过IP地址或者域名从设备或者流媒体服务器取流
            if (m_struStreamCfgV41.byStreamMode == 1)
            {
                m_struStreamDev.struDevChanInfo.byChanType = (byte)comboBoxChanType.SelectedIndex;
                if (m_struStreamDev.struDevChanInfo.byChanType == 2)
                {
                    m_struStreamDev.struDevChanInfo.byStreamId = textBoxChanNo.Text;
                }
                else
                {
                    m_struStreamDev.struDevChanInfo.dwChannel = uint.Parse(textBoxChanNo.Text);
                    m_struStreamDev.struDevChanInfo.byChannel = byte.Parse(textBoxChanNo.Text);
                }
                m_struStreamDev.struDevChanInfo.byAddress       = textBoxDevIP.Text;
                m_struStreamDev.struDevChanInfo.wDVRPort        = ushort.Parse(textBoxDevPort.Text);
                m_struStreamDev.struDevChanInfo.byTransProtocol = (byte)comboBoxTransType.SelectedIndex;
                m_struStreamDev.struDevChanInfo.byTransMode     = (byte)comboBoxStreamType.SelectedIndex;
                m_struStreamDev.struDevChanInfo.byFactoryType   = (byte)m_struProtoList.struProto[comboBoxFactory.SelectedIndex].dwType;
                m_struStreamDev.struDevChanInfo.sUserName       = textBoxUserName.Text;
                m_struStreamDev.struDevChanInfo.sPassword       = textBoxPassword.Text;
                if (checkBoxStreamSever.Checked)
                {
                    m_struStreamDev.struStreamMediaSvrCfg.byValid        = 1;
                    m_struStreamDev.struStreamMediaSvrCfg.byAddress      = textBoxSeverIP.Text;
                    m_struStreamDev.struStreamMediaSvrCfg.wDevPort       = ushort.Parse(textBoxServerPort.Text);
                    m_struStreamDev.struStreamMediaSvrCfg.byTransmitType = (byte)comboBoxSeverProcotol.SelectedIndex;
                }
                else
                {
                    m_struStreamDev.struStreamMediaSvrCfg.byValid = 0;
                }

                uint   dwUnionSize    = (uint)Marshal.SizeOf(m_struStreamCfgV41.uDecStreamMode);
                IntPtr ptrStreamUnion = Marshal.AllocHGlobal((Int32)dwUnionSize);
                Marshal.StructureToPtr(m_struStreamDev, ptrStreamUnion, false);
                m_struStreamCfgV41.uDecStreamMode = (CHCNetSDK.NET_DVR_DEC_STREAM_MODE)Marshal.PtrToStructure(ptrStreamUnion, typeof(CHCNetSDK.NET_DVR_DEC_STREAM_MODE));
                Marshal.FreeHGlobal(ptrStreamUnion);
            }

            //通过URL从设备或者流媒体服务器取流
            if (m_struStreamCfgV41.byStreamMode == 2)
            {
                m_struStreamURL.byEnable = 1;
                m_struStreamURL.strURL   = textBoxURL.Text;

                uint   dwUnionSize    = (uint)Marshal.SizeOf(m_struStreamCfgV41.uDecStreamMode);
                IntPtr ptrStreamUnion = Marshal.AllocHGlobal((Int32)dwUnionSize);
                Marshal.StructureToPtr(m_struStreamURL, ptrStreamUnion, false);
                m_struStreamCfgV41.uDecStreamMode = (CHCNetSDK.NET_DVR_DEC_STREAM_MODE)Marshal.PtrToStructure(ptrStreamUnion, typeof(CHCNetSDK.NET_DVR_DEC_STREAM_MODE));
                Marshal.FreeHGlobal(ptrStreamUnion);
            }

            //通过动态域名解析从设备或者流媒体服务器取流
            if (m_struStreamCfgV41.byStreamMode == 3)
            {
                m_struStreamDDNS.struDdnsInfo.byChanType = (byte)comboBoxChanType_D.SelectedIndex;
                if (m_struStreamDDNS.struDdnsInfo.byChanType == 2)
                {
                    m_struStreamDDNS.struDdnsInfo.byStreamId = textBoxChanNo_D.Text;
                }
                else
                {
                    m_struStreamDDNS.struDdnsInfo.dwChannel = uint.Parse(textBoxChanNo_D.Text);
                }
                m_struStreamDDNS.struDdnsInfo.byDevAddress    = textBoxDevDomain.Text;
                m_struStreamDDNS.struDdnsInfo.byTransProtocol = (byte)comboBoxTransType_D.SelectedIndex;
                m_struStreamDDNS.struDdnsInfo.byTransMode     = (byte)comboBoxStreamType_D.SelectedIndex;
                m_struStreamDDNS.struDdnsInfo.byDdnsType      = 4;
                m_struStreamDDNS.struDdnsInfo.byDdnsAddress   = textBoxDDNSAddr.Text;
                m_struStreamDDNS.struDdnsInfo.wDdnsPort       = ushort.Parse(textBoxDDNSPort.Text);
                m_struStreamDDNS.struDdnsInfo.byFactoryType   = (byte)m_struProtoList.struProto[comboBoxFactory_D.SelectedIndex].dwType;
                m_struStreamDDNS.struDdnsInfo.sUserName       = textBoxUserName_D.Text;
                m_struStreamDDNS.struDdnsInfo.sPassword       = textBoxPassword_D.Text;
                m_struStreamDDNS.struDdnsInfo.wDevPort        = ushort.Parse(textBoxDevPort_D.Text);

                if (checkBoxStreamSever.Checked)
                {
                    m_struStreamDDNS.struMediaServer.byValid        = 1;
                    m_struStreamDDNS.struMediaServer.byAddress      = textBoxSeverIP.Text;
                    m_struStreamDDNS.struMediaServer.wDevPort       = ushort.Parse(textBoxServerPort.Text);
                    m_struStreamDDNS.struMediaServer.byTransmitType = (byte)comboBoxSeverProcotol.SelectedIndex;
                }
                else
                {
                    m_struStreamDDNS.struMediaServer.byValid = 0;
                }

                uint   dwUnionSize    = (uint)Marshal.SizeOf(m_struStreamCfgV41.uDecStreamMode);
                IntPtr ptrStreamUnion = Marshal.AllocHGlobal((Int32)dwUnionSize);
                Marshal.StructureToPtr(m_struStreamDDNS, ptrStreamUnion, false);
                m_struStreamCfgV41.uDecStreamMode = (CHCNetSDK.NET_DVR_DEC_STREAM_MODE)Marshal.PtrToStructure(ptrStreamUnion, typeof(CHCNetSDK.NET_DVR_DEC_STREAM_MODE));
                Marshal.FreeHGlobal(ptrStreamUnion);
            }

            if (!CHCNetSDK.NET_DVR_MatrixStartDynamic_V41(m_lUserID, dwDecChanNum, ref m_struStreamCfgV41))
            {
                iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                strErr   = "NET_DVR_MatrixStartDynamic_V41 failed, error code= " + iLastErr;
                //启动动态解码失败,输出错误号 Failed to start dynamic decoding and output the error code
                MessageBox.Show(strErr);
            }
            else
            {
                MessageBox.Show("Successful to start dynamic decoding!");
            }
        }