有VC++代碼可以看得出來接下來代碼都和這差不多,應該就是初始化 顯示四個窗口的代碼了,那我們就不需要把這個方法裡面的代碼全部翻譯了,只需要達到連接一個視頻窗口的目的就可以了,翻譯的過程中可 以自己先臨時設置一些變量來讓代碼跑起來,翻譯過程中每次都執行到MP4_ClIEntRigisterDrawFun方法的時候就報錯了,但是畫面確已經出來 了,所有我就從這裡截斷了,先達到目的再說,請看翻譯對象的C#代碼:
int cs;
private void button1_Click(object sender, EventArgs e)
{
CLIENT_VIDEOINFO cVideo = new CLIENT_VIDEOINFO();
//對應服務端通道號
cVideo.m_bRemoteChannel = (byte)0;
//網絡連接模式
cVideo.m_bSendMode = (byte)SEND_MODE.TCPMODE;
//服務端IP地址
cVideo.m_sIPAddress = "192.168.0.188";
//顯示區域
cVideo.m_hShowVideo = pVideo.Handle;//(IntPtr)null;
//圖像格式
cVideo.m_nImgFormat = (byte)0;
//用戶名
cVideo.m_sUserName = "123";
//密碼
cVideo.m_sUserPassWord = "w";
//是否需要發生密碼
cVideo.m_bUserCheck = true;
//設置多播的TTL參數
PcHikClient.MP4_ClIEntSetTTL((char)64);
//啟動客戶端
cs = PcHikClient.MP4_ClIEntStart(ref cVideo, new ReadDataCallBack(MyRealDataCallBack1));
}
private void MyRealDataCallBack1(ulong port, [MarshalAs(UnmanagedType.LPArray)] byte[] pBuffer, ulong pSize)
{
MessageBox.Show(pBuffer.Length.ToString());
}
需要注意的是,VC++裡面的指針類型,如 HWND一般可以對應C#裡面的IntPtr數據類型,ReadDataCallBack是回調函數,但是沒有執行,不過至此畫面已經能夠顯示出來!!
那麼 接下來做畫面切割,右鍵事件什麼的都只需要你WinForm的開發經驗了,我是用的四個面板(Panel)切換隱藏顯示的;pVideo是Panel控件;用戶 名和密碼隨便設置也能連得上。
5.3 關閉連接
同樣找到VC++代碼:
if (nn1 >= 0)
{
MP4_ClIEntStopCapture(nn1);
MP4_ClIEntStop(nn1);
}
對應C#代碼:
private void Close()
{
PcHikClient.MP4_ClIEntStop(cs);
PcHikClient.MP4_ClIEntStopCapture(cs);
pVideo.Invalidate(true);
}
需要注意的是這個cs變量,在連接的時候MP4_ClIEntStart返回值,需要拿全局變量保存起來,以便這裡關閉 的時候需要,從API文章裡面我們也能看到這樣的說明。這段代碼最好在窗體關閉的時候也加上!!
注意
摘抄:
DS400xM/DS400xH卡在客戶端機器運行的要求
主要是針對運行客戶端程序的計算機顯卡有要求,需支持Overlay功能,目前主流 的顯卡nvidia,ati,Intel845GL集成的系列都支持Overlay功能。
在PIII 833的計算機上,可以比較流暢的軟解碼4路普通的實時圖象; 在PIV 2G的計算機上,可以比較流暢的軟解碼8-9路普通的實時圖象;如果用我們公司的硬解碼卡,只要顯卡支持Overlay功能,就可以支持最 多達24路的實時圖象,並且支持VideoOut功能,可以上電視牆。
結束
如果本文能帶你實現預覽的功能,將使你信心百倍,效果 才是最有說服力的,並祝你好運: )