GNU Affero General Public License v3.0

技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

深度技术分析文章:FlyNarwhal 跨平台客户端

项目背景与痛点

FlyNarwhal 是基于 Flutter 框架开发的适用于飞牛影视的跨平台客户端,解决了多平台跨端适配的痛点。我们都知道,跨平台应用通常面临着三难困境:性能、用户体验和访问原生功能。FlyNarwhal 通过 Flutter 的跨平台能力,结合丰富的自定义 UI 组件,实现了一款可以同时运行在 iOS 和 Android 上的高性能应用。这不仅满足了飞牛影视的业务需求,还满足了用户对于流畅使用体验的要求。在多种平台间保持一致的功能和视觉,这对于飞牛影视来说无疑是关键的一环。

核心技术揭秘

架构与实现

FlyNarwhal 的核心架构基于 Flutter 框架,内部设计精细且有条理。下面通过一张架构图进一步深入。

graph TD A[UI 层] --> B[业务逻辑层] B --> C{"数据处理层"} C -->|"获取数据"| D[网络层] C -->|"数据保存"| E[存储层] D --> F{"数据校验"} F -->|"通过"| C F -->|"失败"| G[错误处理]

其中:

  • UI 层由丰富的 Flutter 自定义组件构成,可高度自定义界面和用户体验。
  • 业务逻辑层封装了所有的业务逻辑处理,例如用户管理、权限验证等。
  • 数据处理层负责处理数据的获取、解析、展示和存储,涉及数据流的完整生命周期。
  • 网络层作为数据接口,实现数据的实时交互。
  • 存储层为用户提供离线数据保存功能,保证了应用在断网条件下的可操作性。
  • 错误处理模块确保了应用在遇到问题时能够有效应对,防止崩溃和数据丢失。

此外,设计模式的应用也是本项目的亮点之一,如 MVVM 设计模式为项目提升代码复用性和可维护性。

功能亮点与差异

FlyNarwhal 避开了一些跨平台应用容易出现的性能瓶颈,并利用 Flutter 更加高效地唤醒原生界面的能力。其自定义 UI 组件在性能上能够接近原生应用,这是其与其他跨平台应用的重要差异之一。此外,该应用还提供了多种视频质量选择,满足不同网络环境和用户需求,高度优化了用户体验。同时,其出色的性能支持流畅播放高清视频,并得益于 Flutter 的热点技术,确保了用户体验是畅快无阻的。

应用场景与落地建议

在生产环境使用 FlyNarwhal 时,需要关注性能优化,特别在实际设备上的流畅播放表现。适合的业务场景包括但不限于在线视频点播、视频直播,以及带有视频功能的 SaaS 或本地部署应用。

确保设备与应用版本兼容性、网络环境稳定性,以及优化应用性能是部署的关键环节。特别是在用户量增长后,需要监控该应用的使用情况,确定服务器性能极限,衡量是否可以支持更多用户同时在线。

综合评价

FlyNarwhal 提供了一个强大且高效的跨平台视频播放应用框架,可以显著提升视频访问体验,并增强在线视频平台的竞争力。它的优点在于出色的性能表现、跨平台能力,并且在 Flutter 开发者中获得了高度的认可。

然而,FlyNarwhal 也面临着一些固有的问题,如在构建和部署新的应用版本时可能会遭遇一定的开发成本和学习曲线,而且对于首次接触 Flutter 的团队来说,上手和熟悉这个技术栈可能需要一些时间。此外,如果项目规模足够庞大,则可能需要对具体的性能问题进行进一步优化。

简要分析

热度分
600
价值分
322
活跃状态
活跃

语言占比

C
C++
CMake
Dart
Go
HTML
Inno Setup
JavaScript
Python
Ruby
Swift

Release

README

Fly Narwhal

fnarwhal_home

GitHub stars GitHub forks GitHub issues GitHub license Dart Flutter

面向飞牛影视服务的第三方 Flutter 桌面客户端,当前聚焦 Windows、macOS、Linux 三端体验。

服务端项目:https://github.com/FNOSP/fly-narwhal-server


声明

本项目为飞牛 OS 爱好者开发的第三方影视客户端,与飞牛影视官方无关。使用前请确保遵守相关服务条款。

项目结构

.
├─ lib/                  Flutter 主应用代码
├─ assets/               字体、图片、动画资源
├─ updater/              Windows 自更新器(Go)
├─ scripts/release/      正式发布构建脚本
├─ .github/workflows/    GitHub Actions 发布流程
├─ windows/              Windows Runner / CMake 构建配置
├─ macos/                macOS Runner
└─ linux/                Linux Runner

界面预览

最终效果以实际发布版本为准

image-20251230020234381

image-20251230020717917

image-20251230021217242

使用说明

使用安装包安装

前往 Releases 下载对应平台的安装包或发行产物。

从源码运行

准备环境
  • 安装 Flutter Stable SDK,并确保 flutter --version 可用

  • 启用桌面平台支持

    flutter config --enable-windows-desktop
    flutter config --enable-macos-desktop
    flutter config --enable-linux-desktop
    
  • Windows 开发建议安装 Visual Studio 2022 的“Desktop development with C++”

  • Windows 本地运行与构建还需要 Go 1.23 或以上版本

    • 当前 windows/CMakeLists.txt 会在构建时同步编译 updater.exe
    • 请确保 go version 可在 PATH 中正常执行
  • macOS 需要安装 Xcode 与 Command Line Tools

  • Linux 需要准备常见 Flutter 桌面依赖,例如 clang、cmake、ninja-build、pkg-config、libgtk-3-dev

拉取依赖
git clone https://github.com/FNOSP/FlyNarwhal.git
cd FlyNarwhal
flutter pub get
运行桌面端

Windows:

flutter run -d windows

macOS:

flutter run -d macos

Linux:

flutter run -d linux
生成代码

项目中使用了 Riverpod 与 json_serializable。如果你修改了带注解的模型或 Provider,请重新生成代码:

dart run build_runner build --delete-conflicting-outputs

打包为可执行文件

本地构建

Windows:

flutter build windows --release

macOS:

flutter build macos --release

Linux:

flutter build linux --release

常见产物位置:

  • Windows:build/windows/<arch>/runner/Release/
  • macOS:build/macos/Build/Products/Release/FlyNarwhal.app
  • Linux:build/linux/<arch>/release/bundle/

常见问题

1. 此客户端播放视频是否支持硬解?

播放器基于 media_kit / libmpv,支持 GPU 加速能力,但最终效果取决于平台、驱动、视频格式以及系统环境。HDR、字幕、音轨切换等体验仍在持续优化,具体请以实际版本表现为准。

2. 此客户端是否支持使用 FN ID 或者通过 NAS 登录?

支持,当前登录流程同时覆盖 FN ID 与 NAS 登录场景。

3. 此客户端是否支持使用飞牛 OS 中的自签证书进行 HTTPS 连接?

目前不支持自签证书直连。如启用了 HTTPS,请使用受系统信任的证书。

4. 此客户端是否支持直链播放?

除 DolbyVision Profile 5 之外格式的视频原画质下,默认使用直链播放,并支持在部分播放失败场景下回退到 HLS 。

🙏 特别感谢

本项目使用或参考以下开源项目:

感谢以下飞牛共建团队成员在内测期间提供了宝贵的技术支持和建议:

@玉尺书生 @MR_XIAOBO @汪仔饭 @*观如

感谢 anmoliyang 为此项目 UI 设计做出的贡献

🌟 Star History

Star History Chart #

评论

暂无评论