日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 视频监控 分屏ui_视频监控网页ActiveX视频分屏播放控件开发

發布時間:2023/12/4 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 视频监控 分屏ui_视频监控网页ActiveX视频分屏播放控件开发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在搞視頻監控項目,需要在網頁上顯示實時視頻,于是網上找了很多資料研究如何在網頁上播放視頻,一種實現方式就是開發activex控件嵌入到網頁中。

如下我將介紹如何開發一個可以分屏播放視頻的activex控件 (部分內容也是從網上抄的,感謝各位勞動人民:))

1.創建ActiveX工程(使用VS2008)

1.選擇“文件”菜單,然后選擇“新建”->“項目”。

2.在“新建項目”對話框中,如下圖1所示,選擇“VisualC++”分類下的“MFC”。然后選擇“MFC ActiveX控件”作為項目模板。

3.將新項目命名為“TVWallAX”,然后選擇項目的保存目錄,最后點擊“確定”按鈕,關閉“新項目”對話框,進入“MFC ActiveX控件”向導。

4.在“MFC ActiveX控件”向導中,如下圖2所示,選擇左側的“控件設置”,進入控件參數設置頁面。

5.在“Create control based on”下拉列表中選擇“STATIC”。這表示我們使用的是一個靜態控件,因為我們僅僅是顯示輸出而不接收輸入。

6.在下面的“Additional features”的所有選項中,我們確認選中“Activates when visible”和“Flicker-free activation”這兩個選項,同時確認“Has an About box dialog”選項沒有被選中。

7.點擊“Finish”按鈕關閉整個“MFC ActiveX控件向導”對話框,然后向導就會為我們創建整個項目的源代碼。默認情況下,向導創建的項目是使用共享MFC DLL的,這里我們需要改變這一設置。因為如果目標機器上沒有安裝MFC DLL,那么ActiveX控件就不會運行。我們常常看到一些網頁上的ActiveX控件被顯示為紅色的叉叉,很多都是這個原因造成的。為了解決這個問題,我們使用靜態的MFC DLL。從Visual Studio的菜單中選擇“項目”->“屬性”,然后切換到“配置屬性”->“普通”,在配置頁面中的“Use of MFC ”下拉列表中,將“use MFC in a shared DLL”切換成“Use MFC in a Static Library”就可以了。

以上步驟就完成了控件的基本框架。

2.設計分屏控件

接下來我們需要編寫一個可以16分屏的控件,用戶可以選擇1分屏、4分屏、6分屏、9分屏、16分屏。如下:

設計3個類CPlayerItem、CPlayer、CPlayerGroup

CPlayerItem放在CPlayer上面,主要用來顯示視頻。CPlayerItem是CPlayer的子控件,比CPlayer尺寸小4個像素。

CPlayer放在CPlayerGroup上面,主要用來顯示鼠標選中播放視頻窗口(CPlayer)后的矩形框。

CPlayerGroup主要用來管理16個CPlayer。

CPlayerItem實現OnEraseBkgnd消息顯示黑色背景

BOOL CPlayerItem::OnEraseBkgnd(CDC* pDC)

{

CRect rcWindow;

GetWindowRect(&rcWindow);

rcWindow.OffsetRect(-rcWindow.TopLeft());

pDC->FillSolidRect(&rcWindow,RGB(0,0,0));

return TRUE;

}

CPlayer實現OnEraseBkgnd消息顯示用戶選擇當前播放窗口后的焦點框

BOOL CPlayer::OnEraseBkgnd(CDC* pDC)

{

CRect rt;

GetClientRect(rt);

pDC->FillSolidRect(rt,RGB(0,0,0));

DrawEdge(pDC);

return TRUE;

}

void CPlayer::DrawEdge(CDC *dc)

{

CRect rcWindow;

CRect rcTemp;

GetWindowRect(&rcWindow);

rcWindow.OffsetRect(-rcWindow.left,-rcWindow.top);

rcTemp=rcWindow;

// Draw edge

CPen cpEdge(PS_SOLID,1,m_clrEdge);

CPen *cpTemp;

cpTemp=dc->SelectObject(&cpEdge);

rcTemp.DeflateRect(1,1);

dc->Draw3dRect(&rcTemp,m_clrEdge,m_clrEdge);

dc->SelectObject(cpTemp);

}

3.CPlayerGroup分屏實現

CPlayerGroup中定義16個CPlayer,需要實現如下功能:

1.按用戶選擇的畫面數顯示對應個數的CPlayer。

2.正確布局當前所有CPlayer。

3.當窗口尺寸變化是調整CPlayer位置及尺寸。

4.把用戶當前鼠標操作反饋給主界面,如用戶點選視頻播放窗口、用戶最大化視頻播放窗口等。

用戶選擇對應的畫面數目就需要對各個CPlayer重新布局即重新計算在CPlayerGroup中對應的坐標位置。

voidCPlayerGroup::RecalWndPos()

{

CRectrcWindow;

GetClientRect(rcWindow);

intnWidth;

intnHeight;

intnPos;

//清空所有CRect

for(nPos=0;nPos

{

m_rcWnd[nPos]=CRect(0,0,0,0);

m_player[nPos].rcWnd=CRect(0,0,0,0);

}

//得到最大化CRect

m_rcWndMax=rcWindow;

//計算各個顯示數量時的CRect

if(m_nCount==PlayCount1)

{

rcWindow.InflateRect(0,0,0,0);

m_rcWnd[0]=rcWindow;

}

elseif(m_nCount==PlayCount4)

{

nWidth??? =rcWindow.Width()/2;

nHeight?? =rcWindow.Height()/2;

m_rcWnd[0]=CRect(0,0,nWidth,nHeight);

m_rcWnd[1]=CRect(nWidth,0,rcWindow.Width(),nHeight);

m_rcWnd[2]=CRect(0,nHeight,nWidth,rcWindow.Height());

m_rcWnd[3]=CRect(nWidth,nHeight,rcWindow.Width(),rcWindow.Height());

}

elseif(m_nCount==PlayCount6)

{

nWidth??? =rcWindow.Width()?????? /3;

nHeight?? =rcWindow.Height()????? /3;

m_rcWnd[0]=CRect(0,0,nWidth*2,nHeight*2);

m_rcWnd[1]=CRect(nWidth*2,0,rcWindow.Width(),nHeight);

m_rcWnd[2]=CRect(nWidth*2,nHeight,rcWindow.Width(),nHeight*2);

m_rcWnd[3]=CRect(nWidth*2,nHeight*2,rcWindow.Width(),rcWindow.Height());

m_rcWnd[4]=CRect(0,nHeight*2,nWidth,rcWindow.Height());

m_rcWnd[5]=CRect(nWidth,nHeight*2,nWidth*2,rcWindow.Height());

}

elseif(m_nCount==PlayCount8)

{

nWidth??? =rcWindow.Width()?????? /4;

nHeight?? =rcWindow.Height()????? /4;

m_rcWnd[0]=CRect(0,0,nWidth*3,nHeight*3);

m_rcWnd[1]=CRect(nWidth*3,0,rcWindow.Width(),nHeight);

m_rcWnd[2]=CRect(nWidth*3,nHeight,rcWindow.Width(),nHeight*2);

m_rcWnd[3]=CRect(nWidth*3,nHeight*2,rcWindow.Width(),nHeight*3);

m_rcWnd[4]=CRect(nWidth*3,nHeight*3,rcWindow.Width(),rcWindow.Height());

m_rcWnd[5]=CRect(0,nHeight*3,nWidth,rcWindow.Height());

m_rcWnd[6]=CRect(nWidth,nHeight*3,nWidth*2,rcWindow.Height());

m_rcWnd[7]=CRect(nWidth*2,nHeight*3,nWidth*3,rcWindow.Height());

}

elseif(m_nCount==PlayCount9)

{

nWidth??? =rcWindow.Width()?????? /3;

nHeight?? =rcWindow.Height()????? /3;

intx,y;

for(y=0;y<3;y++)

{

for(x=0;x<3;x++)

{

if(y==2)

{

if(x==2)

{

m_rcWnd[x+3*y]=CRect(x*nWidth,y*nHeight,

rcWindow.Width(),rcWindow.Height());

}

else

{

m_rcWnd[x+3*y]=CRect(x*nWidth,

y*nHeight(x+1)*nWidth,rcWindow.Height());

}

}

else

{

if(x==2)

{

m_rcWnd[x+3*y]=CRect(x*nWidth,y*nHeight,

rcWindow.Width(),(y+1)*nHeight);

}

else

{

m_rcWnd[x+3*y]=CRect(x*nWidth,

y*nHeight(x+1)*nWidth,(y+1)*nHeight);

}

}

}

}

}

elseif(m_nCount==PlayCount16)

{

nWidth??? =rcWindow.Width()?????? /4;

nHeight?? =rcWindow.Height()????? /4;

intx,y;

for(y=0;y<4;y++)

{

for(x=0;x<4;x++)

{

if(y==3)

{

if(x==3)

{

m_rcWnd[x+4*y]=CRect(x*nWidth,y*nHeight,

rcWindow.Width(),rcWindow.Height());

}

else

{

m_rcWnd[x+4*y]=CRect(x*nWidth,

y*nHeight(x+1)*nWidth,rcWindow.Height());

}

}

else

{

if(x==3)

{

m_rcWnd[x+4*y]=CRect(x*nWidth,y*nHeight,

rcWindow.Width(),(y+1)*nHeight);

}

else

{

m_rcWnd[x+4*y]=CRect(x*nWidth,

y*nHeight(x+1)*nWidth,(y+1)*nHeight);

}

}

}

}

}

我們還需要重寫CPlayerGroup對應的OnSize(UINT nType, int cx, int cy)消息處理函數,當窗口尺寸改變后需要重新對CPlayer布局。

最后把CPlayerGroup 類放到CTVWallAXCtrl上就完成分屏控件了。

總結

以上是生活随笔為你收集整理的java 视频监控 分屏ui_视频监控网页ActiveX视频分屏播放控件开发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。