从开发到上架:我为什么要在鸿蒙上写一款NAS播放器

2026-06-23 23:50:30 2点赞 5收藏 1评论

花了一个月,给自己搓了个「纯血鸿蒙」的NAS媒体工具,顺便把相册备份也安排了


一、先说说为什么有这个东西

先交代一下背景:我是NAS老用户了,一路从HP Gen10 自建 NextCloud威联通 TS-212,再到群晖 DS118威联通 TS-532X,现在主力是群晖 DS223手机里存了大量照片和视频,NAS 对我来说就是数字生活的「基础设施」。

去年换了鸿蒙手机之后,问题来了——群晖官方App在鸿蒙上的体验一言难尽。倒不是说不能用,但总觉得像是个移植品,界面比例怪怪的,操作起来也不够跟手。更关键的是,鸿蒙的分布式能力和这些App完全没结合,有种「拿着新手机跑旧系统」的割裂感。

上论坛逛了一圈,发现不是我一个人这么觉得。鸿蒙的NAS工具生态确实比较薄,尤其是纯原生的、针对鸿蒙特性设计的工具,基本没有。

与其等着厂商适配,不如自己写一个。

于是就有了 ReelNAS——一个纯血鸿蒙的原生应用,包名 com.ron.reelnas,基于Stage模型 + MVVM架构,目标是覆盖NAS日常使用中最核心的几个场景:浏览文件、看图片、播视频、相册备份

多说一句:这个应用完全开源、免费、无广告。源码在 Gitee 上,你可以随时查看、修改、提意见。

开发过程中也充分体验了AI编程的能力——从技术方案的设计讨论、鸿蒙API的用法咨询、代码质量检查到这篇文案的打磨,AI贯穿了各个环节。在鸿蒙生态文档和社区资源还不够丰富的阶段,AI辅助确实大幅缩短了从想法到上架的周期。


二、它到底能干什么

先别急着关页面,我直接把它能做的事情摆出来,你看有没有你需要的。

1. 远程文件浏览——三列网格,清爽直观

一进应用就是文件浏览界面,远程服务器上的文件和目录以三列网格展示,每个文件都有对应的图标区分(文件夹、图片、视频、普通文件)。

从开发到上架:我为什么要在鸿蒙上写一款NAS播放器

操作逻辑很简单:点击目录进入下一级,点击图片看图,点击视频播视频。顶部有 .. 按钮返回上级,跟电脑上的文件管理器一样直觉。

值得一说的是缩略图。图片和视频都会自动生成缩略图,但只有在滚动到可见区域时才会触发加载,不会一进目录就把所有文件都下载一遍。缩略图生成后缓存到本地,上限500MB,下次再浏览直接读取缓存,不需要重新请求服务器。

视频缩略图是从视频的第一帧提取的,不需要下载完整视频——这对NAS用户来说太重要了,几百MB的视频文件不可能为了一个预览图就全量下载。

2. 图片查看——滑动浏览,手势缩放

点击任意图片进入全屏查看模式,这个页面我花了不少心思。

核心操作

  • 左右滑动切换上一张/下一张图片

  • 双击放大到2.5倍,再次双击恢复原大小

  • 双指捏合自由缩放(1倍到5倍)

  • 双指拖动在放大状态下平移视野

  • 底部显示当前页码、图片分辨率和文件大小

从开发到上架:我为什么要在鸿蒙上写一款NAS播放器

后台做了几件事来保证流畅度

  • 只预先加载当前、上一张、下一张共三张图片到内存,翻页后及时释放远处的图片

  • 图片解码限制最大边长为4096像素,防止超高分辨率图片撑爆内存

  • 缩放和双指平移都是通过手势组件实现的,双击有平滑缩放动画,手感比较接近系统相册

3. 视频播放——这才是重头戏

视频播放是我自己最常用的功能。NAS上存了大量视频,以前在手机上播NAS里的视频要么下载到本地,要么用第三方播放器通过SMB连接。

ReelNAS的做法是直接通过WebDAV流式播放——视频不下载到本地,播放器直接从服务器读取数据流,边缓冲边播, 还可以支持横竖屏切换。

从开发到上架:我为什么要在鸿蒙上写一款NAS播放器

具体功能

  • 播放/暂停点击画面或控制栏按钮

  • 进度拖拽底部滑块控制

  • 快进快退双击左侧快退10秒,双击右侧快进10秒,有文字提示

  • 上/下一个视频当前目录有多个视频时,控制栏会出现切歌按钮

  • 全屏隐藏系统状态栏和导航栏,铺满屏幕

  • 控制栏3秒自动隐藏,点击画面重新显示

画面适配方面

  • 视频保持原始宽高比,自动居中,两边黑边由黑色背景填充

  • 宽屏视频自动切横屏,竖屏视频保持竖屏

  • 切换视频时画面尺寸不会出现瞬间拉伸——上一视频的比例一直保持到下一视频的画面信息加载完毕

说一个开发过程中踩过的坑。系统播放器的状态流转是这样的:设置播放地址(URL)→ 状态变为「已初始化」→ 在「已初始化」状态下设置显示画面和启动准备 → 状态变为「已就绪」→ 开始播放。一开始我没注意顺序,在设置URL之后马上设置显示画面,结果系统报错「只能在已初始化状态下设置画面」。后来改成在回调函数里等状态变为「已初始化」后再执行后续操作,问题解决。这种底层细节虽然用户看不见,但确实影响稳定性。

4. 相册备份——全量 or 增量,随你选

这个功能比较直接:把你手机里选中的相册的照片和视频,备份到自己的WebDAV服务器上。

两种同步模式

  • 全量同步:不管之前有没有备份过,扫描所有文件上传

  • 增量同步:只上传上次同步之后新增或修改的文件

服务器上需要先设置webdav

在群晖服务器上设置webdav在群晖服务器上设置webdav在手机上设置群晖服务器地址在手机上设置群晖服务器地址

备份过程中的体验

  • 界面实时显示已上传数量和进度条

  • 文件列表逐条显示上传状态:等待中→上传中→已完成→失败

  • 上传过程中屏幕保持常亮,不会因为熄屏中断

  • 可以随时停止

后台做的一些优化

  • 最多3个文件同时上传,均衡利用带宽又不卡界面

  • 上传前会检查远程是否存在同名且大小相同的文件,自动跳过,避免重复

  • 成功上传一个文件就记录时间点,下次增量同步以此为截止点

  • 支持取消操作,取消后不会残留无效的上传会话

远程的文件组织方式

{远程路径}/{设备型号}/{年份}/{月份}/{文件名}

按设备+年月归档,方便后续查找和管理。

从开发到上架:我为什么要在鸿蒙上写一款NAS播放器

三、说实话,它不是什么都能做

写到这里,我觉得有必要诚实地说明几个目前还不够完美的地方。

1. 只支持WebDAV协议 目前只做了WebDAV,SMB、NFS这些协议还没支持。选择WebDAV作为首发协议是因为它配置简单、穿透性好,大部分NAS都能开。但如果你习惯用SMB连接NAS,现阶段确实用不了。

2. 目前仅在群晖上完整验证 由于我自己的NAS是群晖DS220+,所以整个开发测试都是基于群晖环境完成的。QNAP、NextCloud、fnOS等其他支持WebDAV的服务器理论上可以正常工作,但在这些平台上的实际兼容性还有待验证。后续会根据用户反馈逐步补充对其他品牌的适配和测试。

3. 视频解码依赖系统播放器 ReelNAS本身不做视频解码,用的是鸿蒙系统的AVPlayer。这意味着系统支持什么格式它就播什么格式,不支持的就播不了。目前主流格式(MP4、MOV、MKV)都没问题,但一些冷门编码可能不行。

4. 暂无电视端 目前只适配了手机,没有做鸿蒙平板和智慧屏的适配。用平板大屏看NAS视频的体验其实很好,后续有计划做。

5. 需要一定的网络知识 虽然应用做了很多简化(比如URL自动补全 https:// 前缀),但配置WebDAV本身还是需要一点网络基础知识的——至少要知道自己的NAS IP地址、知道怎么开启WebDAV服务。完全的小白用户可能需要参考一下教程。


四、和官方方案比怎么样

为了让你更直观地判断,我列了个简单的对比表:

对比项 群晖官方App ReelNAS 鸿蒙原生 ❌ 兼容模式运行 ✅ 纯血鸿蒙,Stage模型 视频流播放 ✅ 支持 ✅ 支持 视频播放界面 一般 控制栏、双击快进、宽高比自适应 图片浏览 ✅ 支持 ✅ 支持手势缩放+滑动 相册备份 ✅ DS Photo ✅ 全量/增量可选 备份去重 ✅ 有 ✅ 有 支持多NAS品牌 ❌ 仅群晖 🟡 理论支持,群晖已验证 密码加密存储 ✅ ✅ AES-128-CBC 深色模式 ✅ ✅ 跟随系统 价格 需要购买NAS+授权 完全免费、开源、无广告

群晖官方App在功能全面性上肯定是胜出的,毕竟做了那么多年。但如果你是鸿蒙用户,ReelNAS在原生适配和操作流畅度上反而更有优势——它不是把iOS/Android版简单移植过来,而是从零开始按照鸿蒙的开发规范写的。

另一个差异是跨品牌兼容。如果你用的是QNAP、fnOS、NextCloud或者其他支持WebDAV的NAS,群晖官方App是用不了的,而ReelNAS可以(目前群晖上验证通过,其他品牌待用户反馈逐步验证)。

当然,最根本的区别是——ReelNAS完全开源免费,没有任何广告和内购。一个自己用的工具,没有必要塞广告。


五、适合哪些人

用了一段时间之后,我觉得这几类用户最适合尝试:

NAS老手,想试试鸿蒙新工具 你已经熟悉NAS的各种玩法,配置WebDAV对你来说没什么门槛。这个App可以作为你的文件浏览和视频播放的补充工具。

用了鸿蒙手机,但NAS不想换 你有NAS设备,但鸿蒙手机上找不到好用的客户端工具。ReelNAS可以覆盖日常最常用的几个场景。

相册需要增量备份 你希望手机照片定期自动备份到自己的服务器上,不想经过第三方云。增量同步加上去重机制,基本可以满足「设好之后不用管」的需求。


六、写在最后

写这个App的初衷其实很简单——自己需要一个趁手的工具,市面上没有现成的,那就自己动手。

从搭框架到功能实现,从测试到上架,前后花了一个多月。这个过程里踩了不少坑,也学到不少东西。鸿蒙的开发体系还在快速演进中,文档和社区资源不如Android/ iOS丰富,遇到问题时很多时候要靠翻API文档和反复试错来排查——但也正是这个过程,让我对这个平台的特性有了更深的了解。

目前ReelNAS的版本是1.1.0,后续三个重点方向:

方向一:支持更多品牌的NAS 目前仅在群晖上完整验证,接下来会根据用户反馈逐一覆盖 QNAP、fnOS、NextCloud、华硕等主流 NAS 的 WebDAV 兼容性测试,让更多用户到手即用。

方向二:自研 FFmpeg 解码引擎,支持全能视频格式 当前依赖系统播放器,遇到 DTS、TrueHD、ASS 特效字幕这些「硬骨头」格式就束手无策了。计划通过 NAPI 集成 FFmpeg,在应用层实现软解,真正做到「只要是视频就能播」。

方向三:字幕与音轨切换 配合 FFmpeg 引擎,后续将支持多音轨选择、外挂/内嵌字幕加载、ASS 特效字幕渲染,让 NAS 里的高清电影在手机上也能获得接近播放器的体验。

此外还有平板/折叠屏适配、后台自动备份等基础优化也在排期中。

如果你有什么想法或建议,欢迎在评论区留言——下一版更新什么功能,很大程度上取决于真实用户的需求。毕竟,这个App从一开始就是为「自己用」而写的,大家的反馈会让它变得更好用。


如何获取

方式 说明 鸿蒙应用市场 搜索 ReelNAS,直接安装 Gitee 源码 👉 https://gitee.com/sirix/rnas_oh

再次强调:完全开源、免费、无广告。源码公开透明,不收集任何隐私数据,不会在通知栏推送广告,没有付费功能墙。

欢迎 star、提 issue、参与讨论。开源的意义就在于——你觉得哪里不好用,可以直接改,也可以告诉我我来改。


本文作者为应用开发者,文章内容基于真实开发和使用体验。文中提及的功能和使用感受均为个人观点,仅供参考。

作者提示含AI生成内容。作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
1评论

  • 精彩
  • 最新
  • 有空试试,我忍synology photos无网络连接很久了

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章

有容乃大589

Ta还没有介绍自己

关注 打赏
最新文章 热门文章
5
扫一下,分享更方便,购买更轻松