FFmpeg开发笔记(七十八)采用Kotlin+Compose的NextPlayer播放器

《FFmpeg开发实战:从零基础到短视频上线》一书的"第 12 章 FFmpeg的移动开发"介绍了如何使用FFmpeg在手机上播放视频,基于FFmpeg的国产播放器开源框架也有很多了,前有哔哩哔哩的ijkplayer,后有小红书的RedPlayer,参见之前的文章《使用国产的ijkplayer播放器观看网络视频》和《使用国产的RedPlayer播放器观看网络视频》。
除此以外,NextPlayer也是一款优秀的Android原生播放器,该框架采用Kotlin+Compose开发,贴近最新的Android开发技术。NextPlayer支持的视频编码格式包括H.263、H.264(AVC)、H.265(HEVC)、MPEG-4 SP、VP8、VP9、AV1等,支持的音频编码格式包括Vorbis、Opus、FLAC、ALAC、PCM/WAVE、MP1、MP2、MP3、AMR、AAC 等,支持的字幕格式包括SRT、SSA、ASS、TTML、VTT、DVB等,可谓博采众长。
NextPlayer的源码托管地址为https://github.com/anilbeesetti/nextplayer(星星数2.8k),国内的镜像地址为https://gitcode.com/gh_mirrors/ne/nextplayer,最新版本是2025年1月发布的NextPlayer v0.13.0,可见该框架的源码更新十分及时。并且NextPlayer的源码采用Kotlin+Compose编写,适合Android开发者用作进阶练习,不过由于NextPlayer引入了最新的Android开发技术,因此需要使用较新的Android Studio才能成功导入运行。
接下来以Android Studio Ladybug(小瓢虫版本)为例,介绍如何通过Android Studio编译运行NextPlayer的demo工程。
使用Android Studio导入nextplayer工程之后,Gradle会报错"The project is using an incompatible version (AGP 8.10.1) of the Android Gradle plugin. Latest supported version is AGP 8.7.2"。这是因为nextplayer工程用到的Gradle插件版本8.10.1太高了,需要降级降到8.7.2。于是打开nextplayer/gradle/libs.versions.toml,把下面这行

复制代码
androidGradlePlugin = "8.10.1"

改为下面这行,也就是把androidGradlePlugin版本号从8.10.1降到8.7.2。

复制代码
androidGradlePlugin = "8.7.2"

继续编译nextplayer工程,Gradle又报错"Inconsistent JVM-target compatibility detected for tasks 'compileJava' (21)"。这是因为nextplayer工程用的JVM版本为17,而Android Studio Ladybug默认安装的JVM版本为21,所以需要把nextplayer工程的JVM版本从17升级到21。于是打开nextplayer/gradle/libs.versions.toml,把下面这行

复制代码
android-jvm = "17"

改为下面这行,也就是把android-jvm版本号从17升到21。

复制代码
android-jvm = "21"

等待nextplayer工程编译通过,把demo应用安装到手机上,启动之后的App界面如下图所示:

可见NextPlayer会自动搜索手机上的视频目录。进入某个目录后选择一个视频,NextPlayer就打开全屏播放窗口如下图所示:

点击播放界面右上角的音符图标,弹出音轨选择窗口如下图所示:

总结一下,NextPlayer确实使用简单,播放功能也丰富,是个未来可期的下一代播放器。

更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。

相关推荐
Kapaseker2 小时前
Compose 进阶—巧用 GraphicsLayer
android·kotlin
黄林晴2 小时前
Android17 为什么重写 MessageQueue
android
阿巴斯甜1 天前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker1 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95271 天前
Andorid Google 登录接入文档
android
黄林晴1 天前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab2 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿2 天前
Android MediaPlayer 笔记
android
Jony_2 天前
Android 启动优化方案
android
阿巴斯甜2 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android