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.   
  6. ui->video->setMediaPlayer(_player);  
  7. ui->volume->setMediaPlayer(_player);  
  8. ui->volume->setVolume(50);  
  9. 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.    
  4. libvlc_media_release (libvlc_m);//釋放這個可以播放的媒體  
  5. libvlc_media_player_set_hwnd (libvlc_mp,screen_hwnd);//把libVLC的彈出窗口嵌入程序中   
  6. int x=libvlc_media_player_play (libvlc_mp);//播放視頻 
          
   會發現兩者還是很相近的。
           說到這里, 必須要提的是雷霄驊大神,給了我很大幫助。他自己在博客上面寫了很多關於視頻流媒體的內容和樣例,我的libvlc部分也參考了它的博客。
          雷霄驊博客地址: http://blog.csdn.net/leixiaohua1020/article/details/42363079(最簡單示例)
                                        http://blog.csdn.net/leixiaohua1020/article/details/42363593(最簡單的播放器GUI)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM