關于如何在MFC的視窗中插入VLC ActiveX控件,請看這位大神的一篇文章:https://blog.csdn.net/zjw12221/article/details/38051183
注意不同版本的DLL接口可能有點不同,而我介紹的接口調用方法隻在VLC 3.0.2上測過。
如上面連結博文所述,在MFC的對話框中插入一個VLC控件後,然後定義一個控件變量,假設變量名為m_VLC,這樣在工程中就會自動添加VLC的控件類,預設名稱為CVlcplugin1,并且也相應增加了CVlcplugin1.h和CVlcplugin1.cpp檔案。另外,你的對話框的源檔案上面會加多了一行:
#import "C:\Program Files (x86)\VideoLAN\VLC\axvlc.dll" exclude("VLCPlaylistMode")
如果你嵌入ActiveX控件的父視窗不是一個對話框,比如是以CView為基類,不能用編輯器拖入控件,則可以采取動态建立控件執行個體的方法,因為控件也是一個視窗(繼承與CWnd),而建立視窗MFC有專門的函數。下面是動态建立控件執行個體的例子代碼:
BOOL bRet = m_VLC.Create(_T("VLC Client"), WS_CHILD|WS_VISIBLE, rc, this, IDC_VLCPLUGIN1);
if(bRet)
{
m_VLC.put_AutoPlay(TRUE);
m_VLC.put_Visible(TRUE);
}
聲明了控件變量(CVlcplugin1 m_VLC;),我們就可以通路VLC的接口函數了,比如設定播放URL,啟動播放,停止播放等。我們先在對話框類裡定義一個函數,用來傳入播放的URL位址。
void CVLCPlayDlg::SetPlayURL(CString strURL)
{
m_strURL = strURL;
}
實作一個啟動播放的成員函數:
void CVLCPlayDlg::StartPlay()
{
if(m_strURL.IsEmpty())
return;
AXVLC::IVLCPlaylistPtr plo(reinterpret_cast<AXVLC::IVLCPlaylist*>(m_VLC.get_playlist()), false);
plo->add(m_strURL.GetBuffer());
plo->play();
}
實作一個停止播放的成員函數,代碼如下:
void CVLCPlayDlg::StopPlay()
{
AXVLC::IVLCPlaylistPtr plo(reinterpret_cast<AXVLC::IVLCPlaylist*>(m_VLC.get_playlist()), false);
plo->stop();
}
VLC播放時需要讀取一個URL,而這個URL可能是網絡流位址或是本地檔案路徑。針對這兩種不同的流,傳入的URL參數有不同的規則的。
- 播放網絡流
如果是以rtsp://,rtmp://開頭的URL,直接傳入URL路徑,例子如下:
pVLCDlg->SetPlayURL(“rtsp://192.168.0.22/stream1”);
- 播放本地檔案
對于檔案,路徑前面要加上file:///,例子如下:
pVLCDlg->SetPlayURL("file:///d:\\Video2.mpg");