1. 程式人生 > >MFC 基於VLC的視訊播放器(二)---配置VLC庫

MFC 基於VLC的視訊播放器(二)---配置VLC庫

北京時間 23點18分 2018年12月19日

因為我之前是完成了一次,現在重新來寫一遍,所以更新會比較慢。

整理好步驟如下:

1、新建一個MFC專案,基於對話方塊

基於對話方塊,下一步,下一步,完成。

建立完成。

 

2、先初步修改介面。

因為這一章是配置,所以我只添加了播放的PICTURE控制元件、播放按鈕、狀態條控制元件。後面的介面會在後面持續更新。

注意:在建立控制元件後,我們應該為控制元件的ID進行修改,否則控制元件多了ID容易亂,這是一個必須養成的習慣。

3、執行一下

當然這只是空殼,點選了也沒有反應哈哈哈。

4、配置vlc的庫

我整理後的檔案如下,下載地址

將vlc資料夾拷貝到工程目錄下。

將vlc資料夾裡面的兩個dll檔案拷貝到Debug檔案下。

在你的程式碼解決方案上右鍵-屬性-vc++目錄-包含目錄和庫目錄修改如下:

開始執行測試程式碼:

我是在網上看到Alberl大神的整理的vlc函式,於是我也照著他的整理。

//參考Alberl大神的整理
class CAVPlayer
{
public:
    CAVPlayer(void);
    ~CAVPlayer(void);

    bool Play(const std::string &strPath);  // 播放路徑為strPath的檔案
    void Play ();                           // 播放
    void Pause();                           // 暫停
    void Stop ();                           // 停止

    void Volume(int nVol);                  // 音量設定為nVol
    void VolumeIncrease();                  // 音量增大
    void VolumeReduce();                    // 音量減小 

    void SeekTo(int nPos);                  // 跳到指定位置nPos
    void SeekForward();                     // 快進
    void SeekBackward();                    // 快退

    void SetHWND(HWND hwnd);                // 設定視訊顯示的視窗控制代碼
    HWND GetHWND();                         // 獲取視訊顯示的視窗控制代碼

    void SetCallback(pfnPosChanged pfn);    // 設定檔案位置改變時的回撥函式
    pfnPosChanged GetCallback();            // 獲取檔案位置改變時的回撥函式

    BOOL    IsOpen();                       // 檔案是否開啟
    BOOL    IsPlaying();                    // 檔案是否正在播放
    int     GetPos();                       // 獲取檔案當前播放的位置
	void    SetPos(int Pos);                // 設定檔案播放位置
    __int64 GetTime();                      // 獲取時間
	__int64 GetLength();

private:
    libvlc_instance_t       *m_pVLC_Inst;   // VLC例項
    libvlc_media_player_t   *m_pVLC_Player; // VLC播放器
    HWND                    m_hWnd;         // 視訊顯示的視窗控制代碼
    pfnPosChanged           m_pfn;          // 檔案位置改變時的回撥函式

    void Init();                            // 初始化
    void Release();                         // 清理記憶體
};

我們先把整理完的AVPlayer.h和AVPlayer.cpp放到目錄下

然後再新增到解決方案中

測試開始:

先把picture控制元件的type改為rectangle

在標頭檔案新增定義

在.cpp檔案新增以下程式碼

#define WM_USER_POS_CHANGED WM_USER + 1

void CallbackPosChanged(void *data, int iPos)
{
	CAVPlayer *pAVPlayer = (CAVPlayer *)data;

	if (pAVPlayer)
	{
		HWND hWnd = pAVPlayer->GetHWND();

		if (::IsWindow(hWnd) && ::IsWindow(::GetParent(hWnd)))
		{
			::PostMessage(::GetParent(hWnd), WM_USER_POS_CHANGED, (WPARAM)data, iPos);
		}
	}
}

注意這個回撥函式要放在對話方塊初始化函式前面,因為在初始化函式裡面有呼叫

在onInitDialog裡面新增  設定播放的控制代碼

	m_cAVPlayer.SetHWND(GetDlgItem(IDC_PLAY)->GetSafeHwnd());   // 設定播放器的視窗控制代碼
	m_cAVPlayer.SetCallback(CallbackPosChanged);

 

接下來就是按鈕函式的新增

注意:按鈕函式的名稱要規範,不然後面容易混

m_cAVPlayer.Play("D:\\a.mkv");

好了,測試程式碼寫完了,執行,看一看效果。

注意:在執行時還需要把dll和plugins檔案拷貝到debug的資料夾下!!!!!

行了,執行完成!

程式碼已經上傳,你們可以看一下。下載地址

注意:1、本人是萌新,大佬們可以直接跳過閱讀我的文章,寫這個目的就是為了賺點分數以後可以用,當然也是想和其他萌新一起學習。

2、我會盡力快點更新,如果有什麼問題大家可以在底下評論,我看到便會回覆的,我的個人郵箱[email protected]

3、每一期我都會盡量放上原始碼,希望能幫到大家的學習。