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

相关推荐
2501_9071368227 分钟前
开源视频批量处理工具FFmpeg Batch AV Converter
ffmpeg·音视频·软件需求
lichong9511 小时前
XLog debug 开启打印日志,release 关闭打印日志
android·java·前端
EasyCVR1 小时前
从“看不见”到“看得清”:视频融合平台EasyCVR远程监控技术在沙尘暴交通监控中的应用
音视频
用户69371750013841 小时前
14.Kotlin 类:类的形态(一):抽象类 (Abstract Class)
android·后端·kotlin
火柴就是我1 小时前
NekoBoxForAndroid 编译libcore.aar
android
Kaede62 小时前
MySQL中如何使用命令行修改root密码
android·mysql·adb
七牛云行业应用3 小时前
解决 AI 视频角色闪烁与时长限制:基于即梦/可灵的多模型 Pipeline 实战
人工智能·音视频·ai视频
y***n6143 小时前
从MySQL5.7平滑升级到MySQL8.0的最佳实践分享
ffmpeg
明君879974 小时前
Flutter 图纸标注功能的实现:踩坑与架构设计
android·ios
成都大菠萝4 小时前
Android Auto开发(3)-Audio Integration
android