VLC for Android簡介
關(guān)于VLC for Android,做過音視頻相關(guān)的開發(fā)者應(yīng)該都聽說過他的大名,官方(VideoLAN)是這么介紹的:
VLC for Android
VLC media player is a free and open source cross-platform multimedia player that plays most multimedia files as well as discs, devices, and network streaming protocols.
VLC for Android can play any video and audio files, as well as network streams and DVD ISOs, like the desktop version of VLC.
VLC for Android is a full audio player, with a complete database, an equalizer and filters, playing all weird audio formats.
翻譯成中文呢。。。咳咳,不好意思,英文水平有限就不翻譯了,大概就是說:
VLC for Android可以播放任何視頻和音頻文件,并且是一個(gè)完整的音頻播放器,可以播放所有的音頻格式。
聽起來是不是很吊炸天啊,嗯嗯,而事實(shí)也確實(shí)是這樣的。那么我們就來編譯一下VLC for Android的源碼。
為啥要寫這篇文章
其實(shí)已經(jīng)有很多人編譯過VLC for Android的源碼,大家去網(wǎng)絡(luò)上搜索一下,也可以搜索到很多相關(guān)的文章。當(dāng)然,我也一樣去搜索。但是,But,當(dāng)我按照他們的編譯步驟去做的時(shí)候,呵呵。。不說了。可能是我的電腦有點(diǎn)特殊,就是死活編譯不過去。無奈,不看你們的了,我自己玩吧。所以就記錄一下這個(gè)歷程吧。
正題
1、準(zhǔn)備工作
1.1、獲取源碼
既然我們要編譯源碼,那么首先我們要先獲取源碼:
git clone https://code.videolan.org/videolan/vlc-android.git
1.2、編譯環(huán)境配置
獲取到源碼之后呢,就要配置編譯環(huán)境。這里先給出官方的編譯指南。
Android的SDK、NDK 環(huán)境這個(gè)自不必說,做Android開發(fā)的應(yīng)該都已經(jīng)配置好了,這個(gè)地方提一點(diǎn),就是這個(gè)環(huán)境變量的名字,最好是和官方的保持一致:ANDROID_SDK,ANDROID_NDK。至于路徑,你開心就好。
除了SDK、NDK 官方還給出了以下一堆的編譯工具:
sudo apt-get install automake ant autopoint cmake build-essential libtool \
patch pkg-config protobuf-compiler ragel subversion unzip git \
openjdk-8-jre openjdk-8-jdk
其中sudo apt-get install是Linux下的軟件安裝命令,可以不看。其實(shí)啊,就我個(gè)人來看,這些軟件并沒有全部用上。我在編譯的過程中,是遇到哪一個(gè)提示“找不到指令”是才去安裝的,并沒有一下子全部安裝。而且,就算你一下子去安裝所有,我可以保證的是,有幾個(gè)是找不到安裝資源的。別問我為什么知道。我這里給出我安裝的幾個(gè):
automake 、ant 、cmake、libtool
有人會(huì)問,git 、subversion為什么不安裝,其實(shí)我在想,你為什么會(huì)問這個(gè)問題。難道你這些常用的代碼同步軟件你不用的嗎?
哦,忘記一個(gè)關(guān)鍵問題,就是在Mac下命令行安裝軟件用的是 Homebrew。
2、正式編譯
2.1、sh compile.sh
使用上面的 git clone 命令,如果不做更正,會(huì)在終端當(dāng)前的文件夾(終端查看當(dāng)前文件夾,直接輸入:pwd)下生成一個(gè)vlc-android的文件夾,進(jìn)入這個(gè)文件夾,會(huì)看到兩個(gè).sh文件:

其中compile-libvlc.sh只編譯vlc 庫文件,不編譯Vlc for android,如果想編譯Vlc for android就要用compile.sh。
編譯平臺(tái)可以參考官方的編譯指南。
sh compile.sh -a <ABI>
//也可以不指定,直接使用:sh compile.sh
//注意:指定的是說明使用默認(rèn)的編譯平臺(tái):ARMv7
我編譯的時(shí)候,未指定編譯平臺(tái),直接使用默認(rèn)的。
2.2、資源下載
執(zhí)行上面的命令之后,會(huì)檢測(cè)你的環(huán)境和資源是否完整,如果不完整會(huì)下載相關(guān)的資源,至于會(huì)下載多久,視你的網(wǎng)絡(luò)狀況而定。
2.3、編譯
這一步是最關(guān)鍵的一步,如果你運(yùn)氣好的話,看到如下字樣的時(shí)候,

下面的就不用看了,如果運(yùn)氣不好,希望接下來的文字對(duì)你有所幫助。如果沒有幫助,也沒有辦法,畢竟每個(gè)人的電腦環(huán)境都不一樣,遇到的問題也不一樣,誰知道你電腦里面有什么不干凈的東西,反正我的電腦在一個(gè)月前重裝了系統(tǒng)。
3、編譯過程中的問題
其實(shí),上面說了那么多,只有到這里,才是最關(guān)鍵的,因?yàn)樯厦嬲f的,和別人說的都一樣,不一樣的就是大家遇到的問題不一樣。不然,我這一篇文章也就沒有必要去寫了。
好多人都曾經(jīng)嘗試過編譯VLC,但是當(dāng)遇到了問題,或百度、或谷歌、或者其他的搜索,結(jié)果卻沒有得到一個(gè)有實(shí)用價(jià)值的答案,最后不了了之。這就扼殺了許多有志碼農(nóng)學(xué)習(xí)VLC的愿望。還記得1年前我也是其中一員,如今,又走上了這條不歸路。。
3.1、相關(guān)資源下載問題。
其實(shí)這不是個(gè)問題,翻下墻就好了。不過,這次編譯,好像并沒有翻墻。。。
-
early EOF
關(guān)于這個(gè)問題,多試幾次就好了
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
沒必要去百度git early EOF的解決方案。
-
contribs: make fetch failed
同上,多試幾次。
3.2、編譯問題
-
編譯FFmpeg 是出現(xiàn):{standard input}:146: Error: unknown register alias 'GP'
解決方案:
在vlc-android/vlc/contrib/src/ffmpeg/rules.mak文件中,添加如下代碼:
FFMPEGCONF = \
--cc="$(CC)" \
--pkg-config="$(PKG_CONFIG)" \
--disable-doc \
--disable-asm \ //添加此行代碼
--disable-encoder=vorbis \
--disable-decoder=opus \
--enable-libgsm \
--enable-libopenjpeg \
--disable-debug \
--disable-avdevice \
--disable-devices \
--disable-avfilter \
--disable-filters \
--disable-protocol=concat \
--disable-bsfs \
--disable-bzlib \
--disable-avresample
- medialibrary 編譯錯(cuò)誤
CXX src/libmedialibrary_la-Album.lo
CXX src/libmedialibrary_la-AlbumTrack.lo
CXX src/libmedialibrary_la-Artist.lo
CXX src/libmedialibrary_la-AudioTrack.lo
clang38++: error: no such file or directory: '@includedirs@'
clang38++: error: no such file or directory: '@includedirs@'
clang38++: error: no such file or directory: '@includedirs@'
clang38++: error: no such file or directory: '@includedirs@'
make[1]: *** [src/libmedialibrary_la-AlbumTrack.lo] Error 1
make[1]: *** Waiting for unfinished jobs....
make[1]: *** [src/libmedialibrary_la-Album.lo] Error 1
make[1]: *** [src/libmedialibrary_la-AudioTrack.lo] Error 1
make[1]: *** [src/libmedialibrary_la-Artist.lo] Error 1
解決方案:
打開/vlc-android/medialibrary/medialibrary/build-android-armeabi-v7a/的Makefile 文件,修改第624行:
//修改之前
VLC_CFLAGS = @includedirs@
//修改之后
vlc_path = /vlc-android/vlc //這里指向你的vlc-android/vlc的路徑,全路徑
vlc_include = ${vlc_path}/include
vlc_version_include = ${vlc_path}/build-android-arm-linux-androideabi/include
VLC_CFLAGS = -I${vlc_include} -I${vlc_version_include}
差不多就這些問題吧,感覺這次編譯要比之前編譯的時(shí)候,容易了很多,如果有問題,歡迎大家留言。