C#編寫的IP攝像頭代碼

pb44 9年前發布 | 3K 次閱讀 C#

#region IP攝像頭代碼
    /// <summary>
    /// ip攝像頭代碼
    /// </summary>
//視頻 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());
    }
}</pre> 


 本文由用戶 pb44 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!