周少妈 發表於 2025-11-1 11:40:00

FFmpeg开发笔记(八十七)采用Kotlin的手机开源播放器VLC-Android

<span data-cke-copybin-start="1"><span data-cke-copybin-start="1">​</span></span><span id="cke_bm_4039S">《FFmpeg开发实战:从零基础到短视频上线》一书的“3.4.1 &nbsp;通用音视频播放器”介绍了如何在桌面系统上安装和使用通用音视频播放器VLC media player,其实VLC是个跨平台的播放器,它也提供了面向Android平台的手机版VLC。</span>
<p><span id="cke_bm_4039S"> Android版VLC的官网地址是https://code.videolan.org/videolan/libvlc-android,源码托管地址为https://github.com/videolan/vlc-android(星星数3.3k),国内镜像地址是https://gitcode.com/gh_mirrors/vl/vlc-android。最新版本为2025年9月发布的libvlc-3.6.4,可见该框架的源码更新十分及时,该版本的源码下载链接为https://github.com/videolan/vlc-android/archive/refs/tags/libvlc-3.6.4.tar.gz。<br>
Android版的VLC可以播放桌面版VLC支持的所有文件,并拥有音频、视频文件和网络串流的媒体数据库。vlc-android是嵌入VLC引擎的Android库,它提供了下列的多媒体功能:<br>
1、支持播放所有媒体文件格式、所有编解码器以及所有流媒体协议<br>
2、硬件支持,每个平台都能高效解码,最高可达8K分辨率<br>
3、通过菜单导航播放音频CD、DVD和蓝光光盘<br>
4、支持HDR,包括为SDR流进行色调映射<br>
5、支持视频和音频过滤器<br>
6、支持360度视频和3D音频播放,包括Ambisonics<br>
vlc-android采用Kotlin语言编写,接下来以Android Studio Ladybug(小瓢虫版本)为例,介绍如何通过Android Studio编译运行vlc-android工程。</span></p>
<h1>一、补充gradle目录</h1>
<p>下载完的vlc-android源码包缺少gradle目录,不能被Android Studio直接打开,需要先把其他App项目的gradle目录整个复制过来,并且打开gradle/gradle-wrapper.properties,把distributionUrl这行配置改成下面这样,表示使用8.14版本的Gradle</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="10" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22distributionUrl%3Dhttps%5C%5C%3A%2F%2Fservices.gradle.org%2Fdistributions%2Fgradle-8.14-bin.zip%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip</code></pre>
</div>
<h1>二、调整AGP配置</h1>
<p>1、因为Android Studio Ladybug最高只支持到 AGP 8.7,所以打开项目级别的build.gradle,把下面这行</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="9" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22ext.android_plugin_version%20%3D%20'8.11.1'%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">ext.android_plugin_version = '8.11.1'</code></pre>
</div>
<p>改为下面这样</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="8" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22ext.android_plugin_version%20%3D%20'8.7.1'%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">ext.android_plugin_version = '8.7.1'</code></pre>
</div>
<p>2、打开settings.gradle,把下面这行</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="7" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22id(%5C%22com.android.settings%5C%22)%20version%20'8.11.1'%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">id("com.android.settings") version '8.11.1'</code></pre>
</div>
<p>改为下面这样</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="6" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22id(%5C%22com.android.settings%5C%22)%20version%20'8.7.1'%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">id("com.android.settings") version '8.7.1'</code></pre>
</div>
<p>3、打开settings.gradle,注释掉下面这行</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="5" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22targetSdk%20%3D%2036%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">targetSdk = 36</code></pre>
</div>
<h1>三、修改编译用的JDK版本</h1>
<p>在Android Studio主界面依次选择菜单:File→Settings→Build,Execution,Deployment→Build Tools→Gradle,把Gradle JDK栏的版本调整为JDK17。<br>
因为Android Studio Ladybug自带的JDK版本为21,在编译时会报错:“Java compiler version 21 has deprecated support for compiling with source/target version 8.”。</p>
<h1>四、屏蔽掉revision</h1>
<p>1、打开application/vlc-android/build.gradle,注释下面这行</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="4" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22resValue%20%5C%22string%5C%22%2C%20%5C%22build_revision%5C%22%2C%20revision()%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">resValue "string", "build_revision", revision()</code></pre>
</div>
<p>这是因为revision()会调用git命令,一旦命令执行失败就会导致App工程无法编译。<br>
2、打开application/vlc-android/src/org/videolan/vlc/gui/dialogs/AboutVersionDialog.kt,注释掉下面这行:</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="3" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22binding.revision.text%20%3D%20getString(R.string.build_revision)%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">binding.revision.text = getString(R.string.build_revision)</code></pre>
</div>
<p>完成以上四处修改后,重新编译App安装到真机上,启动后的VLC界面如下图所示:</p>
<p><span class="cke_widget_wrapper cke_widget_inline cke_widget_image cke_image_nocaption cke_widget_selected" data-cke-display-name="图像" data-cke-filter="off" data-cke-widget-id="2" data-cke-widget-wrapper="1"><span class="cke_reset cke_widget_drag_handler_container"><span class="cke_image_resizer" title="点击并拖拽以改变尺寸"><span class="cke_widget_edit_container" title="编辑图片"><img src="https://img2024.cnblogs.com/blog/729938/202510/729938-20251005162537193-1095381747.jpg"></span></span></span></span></p>
<p>可见vlc-android会主动搜索手机上的视频文件,并且支持视频、音频、浏览、播放列表以及更多菜单,具备桌面版VLC media player拥有的大部分功能。</p>
<p>更多详细的FFmpeg开发知识参见<span class="cke_widget_wrapper cke_widget_inline cke_widget_csdnlink cke_widget_selected" data-cke-display-name="a" data-cke-filter="off" data-cke-widget-id="1" data-cke-widget-wrapper="1">《FFmpeg开发实战:从零基础到短视频上线》一书。</span></p><br><br>
来源:https://www.cnblogs.com/aqi00/p/19126693
頁: [1]
查看完整版本: FFmpeg开发笔记(八十七)采用Kotlin的手机开源播放器VLC-Android