feeluown / FeelUOwn

trying to be a robust, user-friendly and hackable music player
http://feeluown.readthedocs.io
GNU General Public License v3.0
3.54k stars 597 forks source link

关于 FeelUOwn 移动端 #804

Open cosven opened 8 months ago

cosven commented 8 months ago

简介与背景

每隔一段时间就会遇到 “是否支持移动端”、“移动端用哪个框架比较好”的问题。这里创建一个 issue,把一些想法和讨论给记录下来。

关于 “FeelUOwn 移动端“,有好几个话题可以讨论

  1. 是否要支持移动端?
  2. 假设支持
    1. 是基于现有的 FeelUOwn 代码开发,还是另起炉灶?
    2. 如果基于现有代码,用什么框架比较好?(比如 QML, Flutter 等)
    3. Client + Server 架构来支持移动端怎么样?(部署一个 feeluown 当作 data API)
  3. 假设不支持?

2.2 问题调研记录

这一小节之讨论 2.2 这个问题。

现有代码大体可以分为四大模块:

  1. UI
  2. library: 各个音乐平台的接口,以及抽象
  3. player: 播放媒体资源
  4. server: 提供 rpc 接口,和 nowplaying 集成等

如果要支持移动端,能够服用的主要是 library 模块,server 的 rpc 模块可能也有用。其它模块是无法复用的。现在是 Python 编写的,而 Python 要在 iOS 和 Android 上运行,都要花不少功夫。

看了几个选项

  1. QML + Pyside6 可以部署到 Android(看起来不能部署到 iOS)
  2. flet + python + mpv (flet 是基于 flutter 的封装)
  3. flutter + python + mpv

对于 2 这个选项,看了看 flet 的文档,本地也简单尝试了一下。总的来说,感受是能用,但目前肯定要踩很多坑。并且 UI 可定制程度是一个潜在的问题(风险)。具体来说,目前的主观感受如下:

  1. flet 确实可以把 python 打包到安卓上去运行,也能打包到 iOS 上运行
  2. flet gallery 里面的例子不是很多,例子的美感感觉一般(很主观的感受)
  3. flet 目前有一些打包 python 到安卓的例子,但没有一步一步的操作文档。 如果想把 feeluown 的 library 用 flet 打包,估计要踩一些坑,但感觉是能行的。
cosven commented 8 months ago

其它模块是无法复用的

player 模块可能也能复用大部分。flet 团队的 media_kit 也是基于 libmpv 实现的。 https://pub.dev/packages/media_kit