1. 程式人生 > >基於VLC開發視訊播放器---VLC +MFC

基於VLC開發視訊播放器---VLC +MFC

1。開發視訊播放器一般可以基於ffmpeg,其與目前大部播放器的關係可以是萬能發動機與汽車的關係。VLC播放器的編解碼庫就是ffmpeg。利用VLC現有的sdk可以快速,簡便的開發出滿足需要的視訊播放器。本文演示如何開發一個簡單視訊播放器。

2。環境:

OS: Windows 7 32位旗艦版

IDE: VS2005

LIB: VLC0.99 SDK

3。相關資料:

說明:

由於VLC是跨平臺庫,在windows下如果要從原始碼編譯庫需要MinGw + Mysys或者Cygwin環境。搭建環境及編譯步驟較繁瑣,故直接利用現成二進位制庫高效。

4。建立工程

1)在VS2005下建立一個基於對話方塊工程。新增控制元件,建立好後類似下圖:

2)需要的設定:

解壓vlc-0.9.9-win32.zip檔案後,將sdk目錄下的include和lib目錄拷貝至工程目錄。在建立的工程屬性C/C++/常規裡設定包含的目錄為..\include,連結器/常規裡設定附加庫目錄為..\lib;將vlc解壓後的plugins目錄拷貝至工作的Debug目錄。

3)示例程式碼:

class CvlcTestDlg : public CDialog
{
public:
	CvlcTestDlg(CWnd* pParent = NULL);	
	~CvlcTestDlg();

	enum { IDD = IDD_VLCTEST_DIALOG };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	

protected:
	HICON m_hIcon;

	virtual BOOL OnInitDialog();
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()

private:
	CString		strVPath;
	HWND		m_hWndVideo;
	bool		m_bNew;

	libvlc_exception_t		m_vlcEx;
	libvlc_instance_t*		m_vlcInst;
	libvlc_media_player_t*	m_vlcMplay;
	libvlc_media_t*			m_vlcMedia;

private:
	afx_msg void OnBnClickedBtnPlay();
	afx_msg void OnBnClickedBtnStop();
	afx_msg void OnBnClickedBtnPause();
	afx_msg void OnBnClickedBtnDir();
};

相關事件:

void CvlcTestDlg::OnBnClickedBtnPlay()
{
    // TODO: 在此新增控制元件通知處理程式程式碼
    TRACE("Start player!\n");
    GetDlgItemText(IDC_EDIT1, strVPath);

    if(m_bNew == true)
    {
        m_bNew = false;

        m_vlcMedia = libvlc_media_new(m_vlcInst, strVPath.GetBuffer(0), &m_vlcEx);
        m_vlcMplay = libvlc_media_player_new_from_media(m_vlcMedia, &m_vlcEx);
        libvlc_media_release(m_vlcMedia);

        libvlc_media_player_set_drawable(m_vlcMplay, (libvlc_drawable_t)m_hWndVideo, &m_vlcEx);
    }


    libvlc_media_player_play(m_vlcMplay, &m_vlcEx);
    TRACE("Playing video!\n");
}

void CvlcTestDlg::OnBnClickedBtnStop()
{
	// TODO: 在此新增控制元件通知處理程式程式碼
	libvlc_media_player_stop(m_vlcMplay, &m_vlcEx);
        m_bNew = true;
 }

5。執行結果:


注:不支援中文路徑。

6。測試程式碼下載: