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开发实战:从零基础到短视频上线》一书。

相关推荐
郑州光合科技余经理6 小时前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程
andyweike11 小时前
Android Automotive
android
又见情义11 小时前
记一次 RK3568 Android 13 蓝牙反复重启问题的排查与修复
android
hai_android11 小时前
Kotlin Flow combine 源码剖析:一个 Channel 如何优雅合并多条流
android·java·kotlin
云上先途12 小时前
标签化服务适合哪些人?常见适用场景一次讲清
大数据·人工智能·算法·音视频
敲代码的瓦龙13 小时前
Jetpack?ViewModel!!!
android·开发语言·kotlin·android-studio
2601_9623807613 小时前
MoneyPrinterTurbo 本地部署与出片全流程:从环境配置到一键生成短视频
音视频
Godikov13 小时前
Android 工控终端实战:从秒级卡顿到毫秒响应,SQLite/LitePal 性能优化全记录
android
可乐鸡翅yeah_15 小时前
HLS视频编码兼容性全解,H.264/H.265流媒体浏览器适配排错实战
音视频·firefox·safari·m3u8
星间都市山脉15 小时前
Android16 SystemService.onBootPhase 调用时机
android·java·linux·windows·ubuntu