天天看點

【二】vlc-android架構子產品組成

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内部類

具體播放流程分析請參考另外分析

繼續閱讀