天天看點

在MFC視窗中嵌入VLC ActiveX控件,讀網絡流和本地檔案的不同調用方法

關于如何在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");

繼續閱讀