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内部类
具体播放流程分析请参考另外分析