VLC播放器是一款功能強大且小巧的播放器,它支持多種多樣的音視頻格式,比如MPEG1,2以及mp3等等。並且通過Qt和VLC的結合能讓每個開發者寫出自己的視頻流媒體播放器。
Qt與VLC結合編寫流媒體播放器主要有兩種辦法:
一. 通過VLC-Qt庫
VLC-Qt庫是基於libVlc的,后者是VLC 媒體的接口,開發者通過其可以開發出基於VLCMedia的應用。所以VLC-QT具備所以LIBVLC的功能。VLC-Qt庫的下載地址是:
https://vlc-qt.tano.si/,我選擇的是Windows 64bit,當然要選擇適合自己電腦的版本。下載安裝之后,記住自己的安裝目錄,之后有用。

安裝好之后,在自己的Qt中項目.pro文件中要添加配置文件。具體來說,如果你的庫安裝目錄為E:\vlc-qt,那么就應該在.pro中加入
LIBS +=E:/vlc-qt/lib -VLCQtCore -VLCQtWidgets
INCLUDPATH +=E:/vlc-qt/include (注意是斜杠不是反斜杠)這樣才能把下載的庫添加進去。
之后,在ntadej大牛的GitHub上面,他已經給出了樣例程序(事實上上面那個庫也是他做的)。樣例程序比較復雜,但是其關鍵代碼還是比較易懂的。代碼地址:
https://github.com/vlc-qt/examples。在simple player.cpp中,關鍵代碼如下:
- _instance = new VlcInstance(VlcCommon::args(), this); //創建VLC媒體示例
- _player = new VlcMediaPlayer(_instance); //創建播放器
- _player->setVideoWidget(ui->video); //把播放器關聯ui中的video控件上面,這樣就能在video控件上面播放流媒體
- _equalizerDialog->setMediaPlayer(_player); //之后都是關聯配置,比如聲音等等
- ui->video->setMediaPlayer(_player);
- ui->volume->setMediaPlayer(_player);
- ui->volume->setVolume(50);
- ui->seek->setMediaPlayer(_player);
這個和之后直接用libvlc還是很相似的。運行它的樣例程序,點擊open url 按鈕就能播放流媒體了。當然他不只做了播放流媒體,還有播放本地媒體文件,兩者大同小異,只是在new VLCMedia函數中,輸入的參數一個是rtsp流地址,另一個是本地文件地址而已。
- _media = new VlcMedia(file,true,_instance); //創建播放本地文件的媒體
- _media = new VlcMedia(url,_instance); //而這個是創建播放url的
二. 直接調用libvlc
libvlc就是為VLC Media提供的函數接口,通過這個庫可以方便地創建VLC媒體播放器。
首先下載LibVLC的SDK庫。
http://www.videolan.org/這是官網地址。下載好之后仍然把他放在E:\sdk中。然后在項目的.pro文件添加配置。
LIBS += E:\sdk\lib\libvlc.lib
LIBS += E:\sdk\lib\libvlccore.lib
INCLUDEPATH += E:\sdk\include
此外還需要添加動態運行庫.dll文件。需要把你的libvlc.dll libvlccore.dll 以及include/vlc/plugins這個文件夾放在可執行目錄下面,也就是編譯之后產生的build文件夾下面的debug文件夾里面,把它和testvideo.exe(我的程序名,需要看你們自己的名字而定)放在一起就行,這樣就添加好動態運行庫了。
至於里面的程序,主要部分可以與上面的程序對比來看:
- libvlc_m = libvlc_media_new_path (libvlc_inst, char_url);//創建一個可以播放的媒體
- libvlc_mp = libvlc_media_player_new_from_media (libvlc_m);//創建一個代表libvlc的示例
- libvlc_media_release (libvlc_m);//釋放這個可以播放的媒體
- libvlc_media_player_set_hwnd (libvlc_mp,screen_hwnd);//把libVLC的彈出窗口嵌入程序中
- int x=libvlc_media_player_play (libvlc_mp);//播放視頻
會發現兩者還是很相近的。
說到這里, 必須要提的是雷霄驊大神,給了我很大幫助。他自己在博客上面寫了很多關於視頻流媒體的內容和樣例,我的libvlc部分也參考了它的博客。
雷霄驊博客地址:
http://blog.csdn.net/leixiaohua1020/article/details/42363079(最簡單示例)