VS2015編譯VLC3.0.6源碼


  最近的項目需要用vlc來做二次開發,於是需要編譯vlc源碼。在windows下開發,當然用VS(宇宙第一IDE,VS2017的安裝包近20G)比較方便。用VS編譯vlc挺費勁的,編譯加上調試約一周時間,這個過程也很考驗耐心的。需要感謝一下sunqueen(https://github.com/sunqueen/vlc-2.2.1.32-2013),編譯過程中參考了sunqueen的修改。

  閑來無事,博主在家重新編譯了一遍,梳理一遍,把之前沒有搞明白的地方搞清楚,同時也給同道中人一些思路。

  博主使用的是vs2015@win10教育版64位系統,vs2017實在太大了,安裝包將近20G,電腦裝不下了,要不然怎么是宇宙第一IDE呢。

  關於VLC在windows下的編譯,VLC官網(https://www.videolan.org/)給的編譯方式有兩種,並沒有windows下vs的編譯指導,實際上用Visual Studio是編譯不過的。VLC使用c語言寫的,但是它用了很多C99和C11的特性,比如定義動態數組,泛型_Generic ,對齊處理操作符 alignof,_Noreturn,原子操作等等,VS2015對C99和C11的支持是不全的,所以需要對源碼做一些小的改動才行。

  1.編譯順序:compat->跨平台兼容庫,libvlccore->vlc核心庫,libvlc,plugins->vlc的插件(modules)們,博主只用到live555,avcodec,direct3d,drawable,hevc,就只編譯了這幾個plugin.

  2.配置文件config.h,由config.h.in改名而來,是整過解決方案的配置,每個工程都會包含它,所以每個工程都要加上預處理器定義HAVE_CONFIG_H。仔細去核對它每一項宏定義,支持的就把#undef改成#define即可。注意使用UNICODE時,config.h中的#undef UNICODE要注釋掉,否則它會undef掉工程的預處理器UNICODE

  3.編譯compat,基本沒什么改動,不需要的*.c文件不要加入工程即可;

  4.編譯libvlccore,主要修改如下,一些小修改沒有列出來

  4.1 #warning xxx修改成#pragma message("xxx")

  4.2 定義動態數組修改,改成足夠大的數組或是使用malloc替換,用malloc時注意釋放內存;

  4.3 泛型關鍵字_Generic的修改,不使用add_overflow(a,b,r),直接調用對應的uadd_overflow()函數

  4.4 update_cryto.c移出工程

  4.5 “stdnoreturn.h”: No such file or directory,不包含這個頭文件,在sap.c中把noreturn宏定義成空,即#define noreturn 

  4.6 無法打開包括文件: “fourcc_tables.h”: No such file or directory: 這個文件需要src/misc/fourcc_gen.c來生成,創建一個fourcc_gen的win32控制台工程,配置vs重定向輸出,在屬性->調試->命令行參數中輸入"1>fourcc_tables.h",用調試方式運行fourcc_gen,在工程目錄下生成fourcc_tables.h,拷貝到/src/misc下

  4.7 最后鏈接的時候報了一堆函數找不到:原因是warning MSB8027: Two or more files with the name of xxx ......,vlc在不同文件下有同名*.c文件,vs編譯時中間文件輸出到同一個文件夾下,導致后生成的*.obj覆蓋先生成的*.obj。解決辦法,修改具有同名*.c生成的*.obj文件名,改成不一樣即可。右鍵對應C文件->屬性->C/C++ ->輸出文件->文件對象名。

  4.8 添加鏈接庫Ws2_32.lib和compat.lib

  4.9 error LNK2001: 無法解析的外部符號 _strncasecmp,在config.h中增加 #define strncasecmp strnicmp

  4.10 在config.h中增加#define HAVE_DYNAMIC_PLUGINS 1

  4.11 鏈接的時候根據具體錯誤一一排查,缺鐵補鐵缺鈣補鈣

  5.編譯libvlc,相對libvlccore就容易得多

  6.編譯插件們plugins

  6.1 live555: 源碼下載地址http://www.live555.com/liveMedia/public/,我使用了次新版本live.2019.06.28.tar.gz。編譯基本無阻礙

  6.2 avcodec: 需要使用ffmpeg庫(后續再使用ffmpeg源碼編譯),ffmpeg官網http://ffmpeg.org/,下載地址https://ffmpeg.zeranoe.com/builds/win32/dev/https://ffmpeg.zeranoe.com/builds/win32/shared/,前者是編譯需要的頭文件和lib文件,后者是運行時的dll文件。

  6.3 direct3d:

  6.4 swscale:

  只需要這四個plugin就可以播放出視頻,可以找一個在線源rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov測試一下。

 


免責聲明!

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



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