
??想了解更多關于開源的內容,請訪問:??
??51CTO 開源基礎軟件社區??
??https://ost.51cto.com??
一、前言
VLC是一款簡單且非常優秀的免費開源軟件,所有開源軟件的好處他都有,而且是為數不多開源并長期更新維護的播放器,兼容性等各個方面都很好。VLC提供了libvlc庫,可以很方便進行二次開發。
穩定版本,3.0 版本官網:https://www.videolan.org/。
目前VLC已經推出了全新的4.0版本,解決了很多3.0里一直存在的問題。并且4.0的VLC支持提供了渲染接口,支持opengl、D3D渲染,二次開發非常方便,源碼里提供了很多例子,方便開發者二次開發參考,有Qt的、SDL的、GTK的、OpenGL渲染的、D3D渲染的等等。
VLC最新的4.0版本官網首頁:https://nightlies.videolan.org/。

二、VLC4.0源碼和庫文件下載
1、SDK庫文件下載
官網地址:https://nightlies.videolan.org/。
打開網頁,可以看到各種環境的下載選項。我的開發環境是在windows下,我這里就分別下載32位和64位的SDK文件。

從時間上來看,VLC更新的頻率還是很高的。

下載win64的包,直接下載7z包就行,解壓就能直接使用。


下載win32的包:


這是下載好的win32和win64的庫文件:

打開解碼的目錄,可以看到sdk目錄,這個sdk目錄里有include和lib目錄,二次開發需要用到。

外面的libvlc.dll和 libvlccore.dll 庫文件、plugins插件目錄是運行過程中需要使用文件。

2、vlc源碼下載
通過git克隆一份最新的源碼下來。 源碼里包含了vlc4.0的使用示例代碼,通過例子代碼可以快速運行。
git clone https://code.videolan.org/videolan/vlc.git

克隆成功: 在vlc\doc\libvlc 目錄下有很多例子。

這里面可以看到QtGL和QtPlayer兩個Qt例子,我這里就分別運行這兩個例子完成測試。
QtGL是采用OpenGL渲染,QtPlayer是窗口句柄嵌入方式渲染。
3、拷貝庫文件
為了方便運行例子代碼,將剛才下載下來的庫文件里的lib文庫、插件目錄、dll文件拷貝到項目目錄下,建立一個vlc40_win32和vlc40_win64目錄。
以QtGL項目為例:

將下載的壓縮包解碼目錄下的相關文件拷貝過來:

拷貝到項目下:

64位的庫操作方法一樣:


4、運行項目(QtGL)
(1)打開項目

(2)修改pro文件
根據32位編譯器 和 64位編譯器分別設置庫文件和頭文件的路徑。
TEMPLATE = app
TARGET = qtglvlc
CONFIG += c++14 #link_pkgconfig force_debug_info
PKGCONFIG = libvlc
QT += widgets
SOURCES += main.cpp qtvlcwidget.cpp
HEADERS += qtvlcwidget.h
#打印當前Qt構建套件的信息
message($$QT_ARCH)
#表示32位的構建套件
contains(QT_ARCH, i386)
{
INCLUDEPATH += $$PWD\vlc40_win32\sdk\include #VLC頭文件包含目錄
INCLUDEPATH += $$PWD\vlc40_win32\sdk\include\vlc #VLC頭文件包含目錄
LIBS +=$$PWD\vlc40_win32\sdk\lib\libvlc.lib #VLC庫文件路徑
LIBS +=$$PWD\vlc40_win32\sdk\lib\libvlccore.lib
}
#表示64位的構建套件
contains(QT_ARCH, x86_64)
{
INCLUDEPATH += $$PWD\vlc40_win64\sdk\include #VLC頭文件包含目錄
INCLUDEPATH += $$PWD\vlc40_win64\sdk\include\vlc #VLC頭文件包含目錄
LIBS +=$$PWD\vlc40_win64\sdk\lib\libvlc.lib #VLC庫文件路徑
LIBS +=$$PWD\vlc40_win64\sdk\lib\libvlccore.lib
}

5、編譯運行(QtGL)
(1)修改視頻路徑,方便測試

glWidget->playMedia()里調用的是libvlc_media_new_location函數打開媒體文件,libvlc_media_new_location 函數用于打開協議,這個函數更加強大,可以支持很多協議,本地視頻也可以使用該函數打開,更加通用一點,而且使用該函數時,路徑斜杠使用常規左斜杠就行(linux風格),不需要進行轉換。
下面介紹幾個常用的使用示例:
打開本地文件: libvlc_media_new_location (inst, "file:///D:/work/test.mp4");
打開RTSP流媒體:libvlc_media_new_location (inst, "rtsp://10.0.0.4:554/cam");
打開RTMP流媒體:libvlc_media_new_location (inst, "rtmp://10.0.0.4:554/cam");
播放當前桌面屏幕: libvlc_media_new_location (inst, "screen://");
(2)編譯器選擇
我當前采用的編譯器是,MSVC_VS2017_32位 和 MSVC_VS2017_64位 。

(3)構建項目
點擊左下角垂直構建項目。

構建完成之后,將vlc的插件目錄和相關的dll文件拷貝到構建的影子目錄下。

(4)最終運行效果
拷貝之后,再點擊左下角的綠色三角形運行程序。

6、運行項目(QtPlayer)
(1)打開項目

(2)修改pro文件
#打印當前Qt構建套件的信息
message($$QT_ARCH)
#表示32位的構建套件
contains(QT_ARCH, i386)
{
INCLUDEPATH += $$PWD\vlc40_win32\sdk\include #VLC頭文件包含目錄
INCLUDEPATH += $$PWD\vlc40_win32\sdk\include\vlc #VLC頭文件包含目錄
LIBS +=$$PWD\vlc40_win32\sdk\lib\libvlc.lib #VLC庫文件路徑
LIBS +=$$PWD\vlc40_win32\sdk\lib\libvlccore.lib
}
#表示64位的構建套件
contains(QT_ARCH, x86_64)
{
INCLUDEPATH += $$PWD\vlc40_win64\sdk\include #VLC頭文件包含目錄
INCLUDEPATH += $$PWD\vlc40_win64\sdk\include\vlc #VLC頭文件包含目錄
LIBS +=$$PWD\vlc40_win64\sdk\lib\libvlc.lib #VLC庫文件路徑
LIBS +=$$PWD\vlc40_win64\sdk\lib\libvlccore.lib
}

(3)修改代碼
例子代碼里采用libvlc_media_new_path 函數加載媒體文件,需要轉換一下路徑的斜杠。
windows下使用libvlc_media_new_path 函數傳入的路徑要注意斜杠問題,必須保證傳入的是雙右斜杠,如果默認選擇的路徑是左斜杠,可以使用std::replace函數轉換一下。
std::replace(fileOpen.begin(), fileOpen.end(), QChar('/'), QChar('\\'));

(4)運行項目
注意:需要將VLC的插件目錄和相關的dll文件拷貝到運行目錄,否則程序無法正常運行,具體步驟參考前面的2.5小節說明。

加載視頻播放:

??想了解更多關于開源的內容,請訪問:??
??51CTO 開源基礎軟件社區??
??https://ost.51cto.com??