VLC-Android編譯根據該網址編譯指導即可完成。【當然會遇到很多坑,但基本網上已給出答案】
指導網址:
[https://wiki.videolan.org/AndroidCompile/]
本次vlc分析版本為3.3.3
項目安卓子產品基本使用Kotlin編寫
application:應用子產品,包含以下9個子產品:
live-plot-graph: 自定義控件子產品,aar子產品
donations:谷歌官方支付子產品,aar子產品
mediadb:媒體資料庫ZOOM操作子產品,aar子產品
moviepedia:媒體搜尋子產品,aar子產品
resources:VLC項目資源庫,aar子產品
television:TV模式切換,TV界面替換相關 ,aar子產品。 依賴moviepedia、vlc-android子產品。
tools:VLC項目工具類庫,aar子產品
vlc-android:依賴安卓層libvlc庫及其界面功能子產品,aar子產品。
app:打包子產品,依賴以上子產品最終打包輸出apk的子產品。 依賴television、vlc-android子產品進行打包。
extension-api:擴充功能,主要檢查VLC是否安裝及其提供下載下傳,aar子產品
buildsystem:Linux下建構腳本來建構整個項目并完成打包,項目建構腳本子產品即linux下編譯指令子產品
libvlc:依賴C++層VLC的JNI實作及其部分界面【播放界面】和功能實作,生成libvlcjni.so及其aar庫,aar子產品
medialibrary:媒體資料源、資料庫等功能相關操作庫,建構libmla.so的子產品,并包含了libc++_shared.so子產品,并包含C層SQLite操作、代碼單元測試等,aar子產品。 Java實作
vlc:C層VLC項目源碼和編譯子產品,生成libvlc.so庫
術語:MRL表示Media resource Locator
新接觸知識點:
<uses-feature
android:name="android.software.leanback"
android:required="true" />
<uses-feature
android:name="android.software.leanback"
android:required="true" />
播放(控制)器元件:
org.videolan.libvlc.MediaPlayer
媒體資料實體類:
org.videolan.medialibrary.interfaces.media.MediaWrapper
點選播放調用鍊:
VideoGridFragment點選Item -->VideosViewModel.playVideo()–>MediaUtils.openMedia()–>PlaybackService.load()–>PlaylistManager.load()&playIndex()–>VideoPlayerActivity.startOpened()
播放器設定:
val media = mediaFactory.getFromUri(VLCInstance.getInstance(service), uri)
1、設定播放開始時間點字段:
media.addOption(":start-time=${start/1000L}")
2、設定禁止音頻輸出字段:
media.addOption(":no-audio")
media.addOption(":no-spu")
3、設定是否硬解字段:
media.addOption(":codec=mediacodec_ndk,mediacodec_jni,none")
JNI層與java層重要類對應關系:
箭頭表示其為内部字段:vlcjni_object–>libvlc_media_t–>input_item_t–>es_format_t
對應的java層音視訊及字幕資料解析的三個Track類型:
org.videolan.libvlc.interfaces.IMedia中三個Track内部類
具體播放流程分析請參考另外分析