簡述 vlc-qt
VLC-Qt是用於連接Qt和libvlc庫的免費庫。它包含用於主要媒體播放的核心類和一些用於加快媒體播放器開發的GUI類。
拋磚及引玉:官方提供的所有SDK均基於Qt 5.6.1和VLC 2.2.4,也就是說你在使用官方提供的sdk時必須使用Qt5.6.1和VLC 2.2.4版。那麼問題來了,實際開發中要使用其他版本Qt或VLC時就只能重新編譯源碼以獲取對應SDK。
說明
本文基於Qt 5.12.4(msvc2015)、Vs2015、CMake 3.15.5、VLC 3.0.0、vlc-qt-1.1.1來介紹如何編譯vlc-qt。(注:均爲x64)
鏈接(加粗本文爲編譯需要下載 ):
vlc-qt - 官網地址(https://vlc-qt.tano.si/)
vlc-qt - Github地址(https://github.com/vlc-qt/vlc-qt)
vlc-qt - 示例地址(https://github.com/vlc-qt/examples)
vlc 開發庫 - 地址(http://download.videolan.org/pub/videolan/vlc/)
cmake下載(https://cmake.org/download/)
編譯
這裏默認已經安裝好Qt、Vs、CMake。並已下載好vlc開發庫與vlc-qt源碼。
一、解壓並配置vlc 3.0.0開發庫
此時需要做4個操作:
1、把plugins目錄與libvlc.dll、libvlccore.dll複製到qt安裝目錄下的bin目錄中
(例如:D:\Qt\Qt5.7.1\5.7\msvc2015\bin)
2、把sdk/include/vlc目錄複製到qt安裝目錄下的include目錄中
(例如:D:\Qt\Qt5.7.1\5.7\msvc2015\include)
3、把sdk/lib下面的幾個lib文件複製到qt安裝目錄下面的lib目錄中
(例如:D:\Qt\Qt5.7.1\5.7\msvc2015\lib)
4、設置環境變量,plugins文件夾的位置 (下圖)
變量名:VLC_PLUGIN_PATH
變量值:D:/Qt/Qt5.7.1/5.7/msvc2015/bin/plugins
二、解壓vlc-qt源碼並使用CMake編譯
1、配置並運行CMake
(1) 在"Where is the source code:"處選擇vlc-qt的源碼路徑
(2) 在"Where to build the binaries:"處選擇vlc-qt的源碼編譯路徑。(該目錄一般爲空)
(3) 點擊"Configure"按鈕配置。這裏我們選擇使用Vs2015編譯爲x64位版本。然後點擊"Finish"開始執行。
2、修改CMake運行配置
(1) “CMAKE_INSTALL_PREFIX” 爲設定最終編譯結果輸出的目錄,一般不要放在C盤。這裏我們改爲"C:/Users/Administrator/Desktop/VLC-Qt"
(2) “LIBVLCCORE_LIBRARY” 。這裏需要將後面的"vlccore.lib"改爲"libvlccore.lib"
(3) “LIBVLC_LIBRARY” 。這裏需要將後面的"vlc.lib"改爲"libvlc.lib"
(4) 增加一個CMake環境變量。點擊CMake軟件上的"Add Entery"按鈕。爲了使輸出debug版本庫時名稱帶有d結尾。
名稱:CMAKE_DEBUG_POSTFIX
類型:STRING
數值:d
說明:可以爲空
修改後結果如下圖:
設置好後,點擊configure成功後,然後執行Generate生成VS2015工程。
三、Vs編譯生成的工程
在CMake編譯結束後,vlc-qt-1.1.1_build文件夾中產生了很多文件與工程。
1、修改cmake_install.cmake
用文本打開vlc-qt-1.1.1_build/cmake_install.cmake文件夾。將下圖中的"include"改爲"bin"即可。
2、用Vs2015打開vlc-qt-1.1.1_build/VLC-Qt.sln工程
分別修改Core,PluginQml,Qml,Widgets工程的屬性>>調試/發佈>>鏈接器>>命令行>>其它選項下填入/SAFESEH:NO
然後選擇"ALL_BUILD"工程進行編譯。成功後再選擇"INSTALL"工程進行編譯,使輸出目錄至“VLC-Qt”。
至此編譯完畢,結果如下
四、Vs編譯時與使用過程中常見錯誤問題解決
問題一:error C2065: “libvlc_media_read_cb”: 未聲明的標識符
解決:在vlc.h 文件中 添加 typedef __int64 ssize_t; 即可解決此問題
問題二:編譯成功,運行初始化 libvlc_new(0, NULL);一直返回NULL
解決:未包含plugins這個文件夾
問題三:退出時候 程序中斷 libvlc_release(m_inst)
解決:判斷下m_inst的值,如果爲空則不釋放,否則會中斷
問題四:缺少libvlc.dll 缺少 libvlccore.dll
解決:添加對應的dll文件到運行目錄
問題五:libvlc_media_new_path 如果路徑參數錯誤 則返回NULL
解決:主要路徑的正確性 例如:E:\Doubango.png 如果寫成 E://Doubango.png 就會出錯
問題六:VLC is unable to open the MRL ‘file:///E:/Doubango%BF%F2%BC%DC.png’.
解決:路徑需要轉換成UTF8導入
問題七:用來接收VLC送過來的流
解決:用來接收的流 只需要一個句柄即可
問題八:報錯vlc.lib 文件無效或損壞
解決:先將vlc.lib引用去掉
問題九:提示找不到poll標識符
解決:定位到poll代碼區。會看到一個poll的宏定義。需要把這個宏定義剪貼到 poll代碼區的上方。
問題十:提示vlc.lib文件讀取錯誤,文件破壞
解決:把libvlc.lib改成vlc.lib 把原始的vlc.lib改成其他文件名或者兩個名稱相互修改成對方
問題十一:關閉SAFESEH警告,不關閉會把這個警告認爲錯誤
解決:分別修改Core,PluginQml,Qml,Widgets工程的屬性>>調試/發佈>>鏈接器>>命令行>>其它選項下填入 /SAFESEH:NO 斜槓後面不能有空格
問題十二:ssize_t問題
解決:把ssize_t 類型改成__int64 此問題解決(但由於ssize_t是跨平臺類型,所以程序移植後可能會出問題)。
下載
下載包內容爲:vlc-3.0.0-win64.7z、vlc-qt-1.1.1.tar.gz、上述編譯後的庫(debug、release)
關注
微信公衆號搜索"Qt_io_"或"Qt開發者中心"瞭解更多關於Qt、C++開發知識.。
筆者 - jxd