1. 程式人生 > >VLC和Qt結合編寫流媒體rtsp播放器

VLC和Qt結合編寫流媒體rtsp播放器

      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中,關鍵程式碼如下:
  1. _instance = new VlcInstance(VlcCommon::args(), this);  //建立VLC媒體示例
  2. _player = new VlcMediaPlayer(_instance);  //建立播放器
  3. _player->setVideoWidget(ui->video);  //把播放器關聯ui中的video控制元件上面,這樣就能在video控制元件上面播放流媒體
  4. _equalizerDialog->setMediaPlayer(_player);  //之後都是關聯配置,比如聲音等等
  5. ui->video->setMediaPlayer(_player);  
  6. ui->volume->setMediaPlayer(_player);  
  7. ui->volume->setVolume(50);  
  8. ui->seek->setMediaPlayer(_player);  
           這個和之後直接用libvlc還是很相似的。執行它的樣例程式,點選open url 按鈕就能播放流媒體了。當然他不只做了播放流媒體,還有播放本地媒體檔案,兩者大同小異,只是在new VLCMedia函式中,輸入的引數一個是rtsp流地址,另一個是本地檔案地址而已。
  1. _media = 
    new VlcMedia(file,true,_instance);  //建立播放本地檔案的媒體
  2. _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(我的程式名,需要看你們自己的名字而定)放在一起就行,這樣就新增好動態執行庫了。        至於裡面的程式,主要部分可以與上面的程式對比來看:
  1. libvlc_m = libvlc_media_new_path (libvlc_inst, char_url);//建立一個可以播放的媒體
  2. libvlc_mp = libvlc_media_player_new_from_media (libvlc_m);//建立一個代表libvlc的示例
  3. libvlc_media_release (libvlc_m);//釋放這個可以播放的媒體
  4. libvlc_media_player_set_hwnd (libvlc_mp,screen_hwnd);//把libVLC的彈出視窗嵌入程式中   
  5. int x=libvlc_media_player_play (libvlc_mp);//播放視訊
   會發現兩者還是很相近的。            說到這裡, 必須要提的是雷霄驊大神,給了我很大幫助。他自己在部落格上面寫了很多關於視訊流媒體的內容和樣例,我的libvlc部分也參考了它的部落格。