← 返回首页

🎬 nowen-video
私人家庭影音中心 · 轻量级 Go + React 媒体服务器

项目介绍

nowen-video 是一个基于 Go + React 构建的轻量级家庭媒体服务器,类似 Emby / Jellyfin,但专为 NAS 部署 深度优化:单二进制 + SQLite,Docker 一键启动,零配置即可使用。

🎯 设计目标:让家里的每部电影、每集番剧,都能像 Netflix 一样优雅呈现 —— 完全属于你自己。

🖥️ PC 桌面客户端 已上线!支持 MKV / HEVC / HDR / 杜比视界 / DTS / Atmos 零转码播放

核心特性

🎬 媒体库管理

  • 自动扫描 MKV / MP4 / AVI / MOV / WebM / TS / RMVB 等格式
  • FFprobe 自动提取视频/音频完整元数据
  • 完整 NFO 文件解析(兼容 Kodi / Emby / Jellyfin)
  • fsnotify 实时监控,新增/修改/删除自动同步
  • 重复媒体智能检测与标记

📺 智能播放

直接播放

MP4/WebM/M4V 浏览器原生播放 + Range 断点续传

🔁

HLS 自适应流

MKV/AVI 按需转码,360p~原画多码率切换

📊

ABR 自适应码率

根据网络带宽自动切换清晰度,无缝播放

🎮

全功能控制

快捷键 / 书签 / 画中画 / 倍速 / 全屏

⚡ 硬件加速转码

自动检测并启用最优硬件加速方案:

支持的硬件加速
# Intel 核显 — 群晖 Celeron/Pentium/Core
qsv    → h264_qsv

# Linux 通用 — Intel/AMD GPU
vaapi  → h264_vaapi

# NVIDIA 独显
nvenc  → h264_nvenc

# 兜底 — 纯软件编码
none   → libx264

🎨 多数据源元数据刮削(Provider Chain)

按优先级自动调度 6 大数据源,失败自动回落:

Provider Chain
10TMDb        # 主数据源,电影/剧集
20豆瓣        # 补充源,中文友好
25TheTVDB     # 剧集增强
30Bangumi     # 动画专项
50Fanart.tv   # 高清图片
100AI          # 兜底生成

🧠 AI 智能功能

集成 LLM,支持 OpenAI / DeepSeek / 通义千问 / Ollama 等 OpenAI 兼容 API:

  • AI 智能搜索 — 自然语言转结构化查询("找一部关于太空的科幻片")
  • AI 推荐理由 — 为推荐结果生成个性化文案
  • AI 文件重命名 — 智能规范化文件名
  • AI 助手 — 管理后台对话式媒体库管理
  • AI 场景识别(V3) — 自动章节、精彩片段、封面候选
  • ASR 语音识别 — 自动生成字幕

📡 Emby / Jellyfin 兼容

完整实现 Emby Server API(15 个模块,140+ 接口),让 Infuse / Kodi / Emby 原生客户端 无缝接入:

  • JWT 复用 —— Emby AccessToken 直接是 nowen JWT,单点登录
  • 虚拟 Season —— 通过 SeasonNum 聚合 + ID 编码 uuid|season|N
  • UUID ↔ 数字 ID 稳定映射(SHA-1 派生)
  • 视频流直通 + Remux + HLS,支持 Range / HEAD
  • 外挂字幕 + 内嵌字幕提取

架构概览

分层架构
┌─────────────────────────────────────────────────┐
│  浏览器:React 18 + TS + Tailwind + HLS.js      │
└────────────────────┬────────────────────────────┘
                     │ HTTP / WebSocket
                     ▼
┌─────────────────────────────────────────────────┐
│  Gin HTTP Server (:8080)                        │
│  ├─ Handler(33+ 文件)                          │
│  ├─ Service(67+ 文件,含 Provider Chain)       │
│  ├─ Repository(14+ 文件,GORM 数据访问)        │
│  └─ SQLite (WAL 模式, 30+ 张表)                 │
└─────────────────────────────────────────────────┘

技术栈

🐹

后端

Go 1.22 · Gin · GORM · SQLite (WAL) · Zap · FFmpeg

⚛️

前端

React 18 · TS 5.4 · Vite 5 · Tailwind · Zustand · HLS.js

🐳

部署

Docker (Alpine 3.19) · Compose · 多阶段构建

🌐

国际化

中文 / English / 日本語

快速开始

🐳 Docker 部署(推荐)

Terminal
# 1. 克隆项目
$ git clone https://github.com/cropflre/nowen-video.git
$ cd nowen-video

# 2. 修改 docker-compose.yml
#    - 媒体目录挂载路径(如 /volume1/Media)
#    - NOWEN_SECRETS_JWT_SECRET(必改!)
#    - PUID/PGID 匹配宿主机(通过 `id` 命令查看)

# 3. 启动
$ docker-compose up -d

# 访问 http://你的NAS地址:8080
# 默认管理员: admin / admin123

💻 本地开发

Makefile 命令
# 前置要求: Go 1.22+, Node.js 20+, FFmpeg

$ make dev       # 开发模式运行后端
$ make dev-web   # 开发模式运行前端
$ make build     # 一键构建前端 + 后端
$ make docker    # Docker 构建并启动

🔧 硬件加速(可选)

docker-compose.yml
devices:
  # Intel QSV / VAAPI / AMD GPU
  - /dev/dri:/dev/dri

未来规划(v1.0 ~ v1.2)

对标 Emby 的三大核心演进方向:

  • 无缝动态码率(ABR) — Master Playlist + hls.js 基于带宽在切片边界自动切换
  • 节流策略(Throttling) — 转码超前播放 N× 时暂停 FFmpeg,降低 GPU 空载功耗 > 40%
  • 分段按需转码 — 跳转时按需启动对应起点转码(-ss N*6),秒开 Seek
🎯 v1.0 验收指标:首帧时间 < 3s · 码率切换 < 2s · 单 GPU 并发 ≥ 4 路 1080p · 缓存命中率 > 70%

相关链接

📂 源码仓库: github.com/cropflre/nowen-video
💬 QQ 交流群: 1093473044
📜 开源协议: GPL-3.0