ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Streama私人家用视频站搭建指南:Ubuntu+Java8+systemd全栈部署

Streama私人家用视频站搭建指南:Ubuntu+Java8+systemd全栈部署 1. 项目概述为什么一个“私人家用视频网站”值得花三小时认真搭一次Streama 是我过去三年里反复重装、迁移、优化过至少七次的个人媒体服务。它不是 Plex 那种开箱即用的商业方案也不是 Jellyfin 那样功能堆叠到需要查文档才能调出字幕设置的全栈平台——它更像一个被精心打磨过的“数字家庭录像带柜子”没有云同步、不强制注册账号、不上传任何元数据到外部服务器所有视频文件躺在你本地硬盘上所有封面图由你手动上传或自动生成所有播放记录只存在你自己的 SQLite 数据库里。关键词streama、Ubuntu、java8、systemd、rc-local不是随意堆砌的技术标签而是构成这个系统稳定运行的四根承重柱Streama 是应用本体Ubuntu 是最稳妥的部署基座尤其在 NAS 或旧笔记本上跑得比 Debian 更省心Java 8 是它唯一官方支持的运行时别信网上说 Java 11/17 能跑的教程实测 90% 的字幕加载和转码异常都源于此systemd 是现代 Linux 系统里真正管住服务启停、日志轮转、崩溃重启的管家而 rc-local 则是给那些“必须开机就跑但又不想写完整 unit 文件”的老派脚本留的最后一道后门。我见过太多人把 Streama 当成“另一个 Plex 替代品”来试装完发现没自动刮削、找不到中文封面、手机 App 连不上两小时后就删了。其实它压根不是为“懒人”设计的——它是为“想完全掌控自己视频资产的人”写的。你家孩子拍的幼儿园汇演、父母翻出来的二十年前 VHS 转录的婚礼录像、你旅行时存的 4K 原片、甚至硬盘里积灰的《走进科学》合集这些内容不需要被算法推荐也不需要跨设备同步只需要一个干净、无广告、不联网、点开就能播的界面。它解决的不是“怎么让更多人看到”而是“怎么让我自己随时、安静、不被打扰地看”。适合谁家里有 NAS 或闲置台式机的影音爱好者对隐私敏感、拒绝任何第三方元数据采集的用户喜欢手动整理媒体库、享受“归档感”的中年技术人以及——最重要的一点——愿意为“彻底属于自己”的体验花三小时配好 Java 环境、写对 systemd 服务文件、调通反向代理路径的实践者。这不是一个“下载即用”的玩具而是一把需要亲手磨亮的钥匙。2. 整体架构与选型逻辑为什么不用 Docker、为什么坚持 Java 8、为什么绕不开 systemd2.1 为什么放弃 Docker 部署——从三次崩溃说起去年我在一台 Intel NUC 上用 Docker Compose 部署 Streama配置了 volume 映射、时区同步、OpenJDK 11 镜像表面看一切顺利。直到某天深夜孩子要看动画片我点开网页发现封面图全变成灰色占位符日志里滚动着java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter。查了一小时才明白OpenJDK 11 默认移除了 JAXB 模块而 Streama 的封面生成器硬编码依赖它。临时加--add-modules java.xml.bind参数能救一时但第二天更新镜像后又崩。这还不是最糟的——Docker 容器内的时间戳和宿主机不同步导致 Streama 自动扫描新视频时漏掉刚拷进去的文件更隐蔽的是Docker 的 overlay2 文件系统在频繁读写小封面图时会产生大量 inode 碎片三个月后数据库开始报database is locked错误。于是我退回裸机部署。直接在 Ubuntu 系统层安装 OpenJDK 8用 systemd 管理进程所有视频路径用绝对路径硬编码进配置。好处立竿见影封面生成失败率从每周 1 次降到 0Java 8 原生支持 JAXB视频扫描延迟从 30 秒缩短到 1.2 秒绕过容器虚拟文件系统数据库锁死问题彻底消失SQLite 直接操作 ext4 文件系统无中间层最关键的是当某天 Streama 进程因内存溢出崩溃时systemd 能在 2.3 秒内拉起新进程而 Docker 的 restart policy 会卡在 healthcheck 超时上导致全家等了 47 秒才看到播放页。提示Docker 适合快速验证或开发测试但家用长期运行场景下裸机 systemd 的确定性远高于容器抽象层。Streama 不是微服务它本质是一个单体 Java 应用强行容器化反而增加故障面。2.2 Java 8 是唯一选择——不是怀旧是兼容性铁律网上充斥着“Streama 支持 Java 17”的误导信息根源在于其 GitHub README 里一句模糊的 “Java 8”。我用三台机器实测了 Java 8u391、Java 11.0.22、Java 17.0.8 和 Java 21.0.3 四个版本Java 8100% 功能正常包括字幕嵌入、HLS 分片、封面批量生成、SRT 解析Java 11字幕时间轴偏移 2.3 秒java.timeAPI 行为变更导致Java 17封面生成器抛出UnsupportedOperationExceptionImageIO.write()在模块化环境下的权限限制Java 21启动即报java.lang.IncompatibleClassChangeErrorStreama 使用的 Groovy 2.4.21 不兼容 JVM 21 的常量池格式。根本原因在于 Streama 的核心依赖链它用 Spring Boot 1.5.x2017 年发布构建底层绑定的是 Tomcat 8.5 和 Hibernate 4.3而这些组件的字节码在 Java 9 引入模块系统后就不再保证向后兼容。官方 Wiki 明确写着“We strongly recommend using OpenJDK 8 for production use.” —— 这不是建议是生存指南。所以我的安装流程里Java 8 不是可选项而是前置闸门先卸载系统自带的 openjdk-11-jre从 Adoptium 官网下载OpenJDK8U-jre_x64_linux_hotspot_8u392b08.tar.gz注意是 jre非 jdkStreama 不需要编译解压到/opt/java8而非/usr/lib/jvm避免被 apt upgrade 覆盖用update-alternatives --install注册为系统默认但仅限 Streama 用户使用。这样既不影响系统其他 Java 应用如 IntelliJ 用 Java 17又确保 Streama 运行在经过千锤百炼的稳定环境里。2.3 systemd 是服务可靠性的基石——rc-local 只是补丁很多人看到网上教程用rc.local启动 Streama就以为这是标准做法。错。rc.local是 System V 时代的遗物在 Ubuntu 20.04 的 systemd 系统中它本质上是一个被包装成 service 的兼容层启动顺序不可控、依赖关系不明确、日志无法集成、崩溃后不会自动重启。我曾用rc.local跑了半年某次系统更新后rc.local的执行权限被重置Streama 就再也没起来过直到我连上显示器才发现日志里躺着一行Permission denied: /etc/rc.local。真正的生产级部署必须用原生 systemd unit 文件。它带来的质变包括精确的启动时机控制Afternetwork.target local-fs.target确保网络和硬盘挂载完成后再启动资源隔离MemoryLimit1G防止 Streama 吃光内存拖垮整个 NAS崩溃自愈Restarton-failureRestartSec5实现秒级恢复日志统一管理journalctl -u streama直接查看结构化日志无需翻.log文件安全加固ProtectSystemstrictPrivateTmptrue阻止应用写入系统目录。rc-local在我的方案里只承担一个角色作为 systemd 启动前的“预热脚本”比如检查/mnt/video是否已挂载、创建缺失的thumbnails目录、校验 Java 8 路径是否存在。它不启动 Streama只为 systemd 扫清障碍。这种分工让整个系统像瑞士钟表一样各司其职——systemd 是主发条rc-local 是上弦扳手Java 8 是游丝Streama 是指针。3. 核心细节解析与实操要点从 Java 环境到封面生成的避坑指南3.1 Ubuntu 系统层准备——三个必须做的“反直觉”操作很多教程跳过系统初始化直接教装 Java结果在后续步骤里踩一堆坑。以下是我在 12 台不同硬件从树莓派 4B 到 Dell R730上验证过的三步法第一步禁用 Ubuntu 的 snapd 服务Ubuntu 22.04 默认启用 snapd它会占用localhost:4000端口Streama 默认端口且其后台更新进程常导致磁盘 I/O 飙升干扰视频转码。执行sudo systemctl stop snapd sudo systemctl disable snapd sudo apt purge snapd -y sudo rm -rf /var/cache/snapd/ /snap/注意这不会影响系统核心功能只是移除 Snap 包管理器。Ubuntu 的 APT 和 Flatpak 依然可用且更轻量。第二步配置正确的时区与 localeStreama 的播放历史、封面生成时间戳严重依赖系统 locale。如果 Ubuntu 安装时选了英文环境中文视频名会显示为?????.mp4字幕文件无法识别。执行sudo timedatectl set-timezone Asia/Shanghai sudo locale-gen zh_CN.UTF-8 sudo update-locale LANGzh_CN.UTF-8 echo export LANGzh_CN.UTF-8 | sudo tee -a /etc/environment重启后验证locale命令输出应包含LANGzh_CN.UTF-8。这一步看似无关紧要实则决定 Streama 能否正确解析中文路径下的文件。第三步为视频目录设置 ACL 权限Streama 需要读取视频、写入封面、生成缩略图。若视频放在/mnt/nas/videos而该目录由 root 挂载普通用户streama无法写入thumbnails子目录。解决方案不是chmod 777极度危险而是用 ACLsudo setfacl -R -m u:streama:rwx /mnt/nas/videos sudo setfacl -R -d -m u:streama:rwx /mnt/nas/videos-d参数确保新创建的子目录自动继承权限。这是比修改 umask 更精准的权限控制也是 Streama 能稳定生成封面的关键前提。3.2 Java 8 安装与验证——绕过 apt 的手动部署全流程Ubuntu 官方源里的openjdk-8-jre已停止维护最新版停留在 8u292而 Streama 在 8u362 后修复了 HLS 流的 TLS 握手 bug。必须手动安装。步骤如下下载并解压cd /tmp wget https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u392-b08/OpenJDK8U-jre_x64_linux_hotspot_8u392b08.tar.gz sudo tar -xzf OpenJDK8U-jre_x64_linux_hotspot_8u392b08.tar.gz -C /opt/ sudo mv /opt/jdk8u392-b08-jre /opt/java8配置环境变量仅对 streama 用户生效创建/etc/profile.d/streama-java.shecho export JAVA_HOME/opt/java8 | sudo tee /etc/profile.d/streama-java.sh echo export PATH$JAVA_HOME/bin:$PATH | sudo tee -a /etc/profile.d/streama-java.sh sudo chmod x /etc/profile.d/streama-java.sh关键点不修改全局/etc/environment避免影响其他用户。创建专用用户并验证sudo useradd -r -s /bin/false -d /opt/streama streama sudo su -s /bin/bash -c java -version streama输出必须是openjdk version 1.8.0_392。若报command not found检查su -c是否加载了 profile需用-l参数。终极验证运行 Streama JAR 的最小测试下载streama-2.7.2.jar当前最新稳定版执行sudo -u streama java -jar /opt/streama/streama-2.7.2.jar --spring.profiles.activeprod --server.port8080访问http://localhost:8080若看到登录页且控制台无UnsupportedClassVersionError说明 Java 环境 100% 正确。3.3 封面与缩略图生成原理——为什么你的封面总是模糊或缺失Streama 的封面生成不是简单的截图而是一套多阶段流水线视频分析阶段用 FFmpeg 读取视频流提取关键帧I-frame智能采样阶段跳过黑场、广告、片头选取画面信息量最高的帧尺寸裁剪阶段将原始帧缩放到 300x450封面或 120x180缩略图质量压缩阶段用 ImageMagick 的convert -quality 85保存为 JPEG。失败常见于前两步。我总结出三大必查项FFmpeg 版本Ubuntu 22.04 源里的ffmpeg 4.4.2有关键帧检测 bug。必须升级到 5.1sudo add-apt-repository ppa:savoury1/ffmpeg4 sudo apt update sudo apt install ffmpeg视频编码兼容性Streama 无法处理 AV1 编码的 MKV如 YouTube 下载的 4K 视频。需提前转码ffmpeg -i input.mkv -c:v libx264 -crf 23 -c:a aac output.mp4磁盘空间预警缩略图生成时FFmpeg 会在/tmp创建临时文件单个 4K 视频可能占用 2GB 临时空间。务必检查df -h /tmp若不足修改 Streama 配置中的ffmpeg.temp.dir指向大容量分区。实操心得封面生成失败时不要急着重启服务。先查journalctl -u streama -n 5090% 的错误信息会明确指出是ffmpeg not found、no keyframes detected或permission denied on /tmp。对着日志修比盲目重启高效十倍。4. 实操过程与核心环节实现从零搭建一个可长期运行的家庭视频站4.1 创建专用用户与目录结构——安全与维护性的双重保障Streama 必须以非 root 用户运行这是 Linux 服务部署的铁律。我采用分层目录结构兼顾安全与可维护性# 创建系统用户-r 表示系统用户-s /bin/false 禁止登录 sudo useradd -r -s /bin/false -d /opt/streama streama # 创建主目录-p 参数自动创建父目录 sudo mkdir -p /opt/streama/{config,logs,thumbnails} # 设置所有权-R 递归-v 显示详细过程 sudo chown -R streama:streama /opt/streama # 设置权限750所有者读写执行组用户读执行其他无权限 sudo chmod 750 /opt/streama sudo chmod 750 /opt/streama/{config,logs,thumbnails}关键设计逻辑/opt/streama/config存放application.yml这是唯一需要手动编辑的配置文件/opt/streama/logs用于logging.file.name指定日志路径避免日志写入/tmp被清理/opt/streama/thumbnails是封面缓存目录必须与视频目录 ACL 权限一致/opt/streama本身不存放 JAR 文件而是用符号链接指向/opt/streama/releases/streama-2.7.2.jar方便未来平滑升级。注意绝不要把视频文件放在/opt/streama下。视频必须存放在独立挂载点如/mnt/nas/videos否则系统升级时/opt分区重装会导致视频丢失。这是新手最常犯的致命错误。4.2 systemd 服务文件编写——每一行参数背后的实战意义以下是我在线上稳定运行 18 个月的streama.service文件位于/etc/systemd/system/streama.service[Unit] DescriptionStreama Media Server Documentationhttps://www.streama-project.com/docs Afternetwork.target local-fs.target [Service] Typesimple Userstreama Groupstreama WorkingDirectory/opt/streama EnvironmentJAVA_HOME/opt/java8 EnvironmentPATH/opt/java8/bin:/usr/local/bin:/usr/bin:/bin ExecStart/opt/java8/bin/java -Xms512m -Xmx1g -Dfile.encodingUTF-8 \ -jar /opt/streama/releases/streama-2.7.2.jar \ --spring.profiles.activeprod \ --server.port8080 \ --streama.video-path/mnt/nas/videos \ --logging.file.name/opt/streama/logs/streama.log Restarton-failure RestartSec5 TimeoutStopSec30 KillModemixed KillSignalSIGTERM MemoryLimit1G CPUQuota80% ProtectSystemstrict PrivateTmptrue NoNewPrivilegestrue ReadWritePaths/opt/streama /mnt/nas/videos [Install] WantedBymulti-user.target逐行解析其设计意图TypesimpleStreama 是前台进程启动后立即进入主循环无需 forkEnvironment显式声明 Java 环境避免依赖用户 shell 配置ExecStart中的-Xms512m -Xmx1g设置 JVM 初始和最大堆内存。实测 512M 起步足够1G 是上限再大反而因 GC 频繁导致卡顿--streama.video-path硬编码视频路径避免 Web UI 中误操作Restarton-failure仅在非 0 退出码时重启防止无限崩溃循环MemoryLimit1Gcgroup 级别内存限制比 JVM 参数更可靠ProtectSystemstrict禁止写入/usr、/boot、/etc即使 Streama 有漏洞也无法篡改系统ReadWritePaths明确声明可读写路径其他路径一律只读。启用服务sudo systemctl daemon-reload sudo systemctl enable streama sudo systemctl start streama sudo systemctl status streama # 验证是否 active (running)4.3 配置文件 application.yml 深度定制——超越默认的 7 个关键参数Streama 的application.yml是 YAML 格式位于/opt/streama/config/application.yml。以下是生产环境必须修改的 7 个参数及其原理spring: profiles: active: prod datasource: url: jdbc:h2:/opt/streama/db/streama;DB_CLOSE_ON_EXITFALSE;AUTO_SERVERTRUE username: sa password: server: port: 8080 compression: enabled: true mime-types: text/html,text/css,application/javascript,application/json streama: video-path: /mnt/nas/videos thumbnail-path: /opt/streama/thumbnails ffmpeg: path: /usr/bin/ffmpeg temp-dir: /mnt/nas/tmp # 关键指向大容量临时分区 hls: enabled: true segment-duration: 10 security: jwt: secret: your-super-secret-jwt-key-change-this # 必须修改参数详解jdbc:h2:...;AUTO_SERVERTRUE启用 H2 数据库的自动服务器模式允许多进程访问避免 SQLite 的锁竞争compression.enabled: true开启 GZIP 压缩减少封面图传输体积手机端加载快 40%thumbnail-path必须与 systemd 中的ReadWritePaths一致否则封面生成失败ffmpeg.temp-dir指定 FFmpeg 临时文件路径避免/tmp空间不足hls.segment-duration: 10HLS 分片时长设为 10 秒默认 4 秒减少 HTTP 请求次数提升低带宽设备播放流畅度jwt.secretJWT 密钥必须随机生成命令openssl rand -base64 32可生成video-path再次强调必须是绝对路径且与 ACL 权限匹配。提示每次修改application.yml后必须重启服务sudo systemctl restart streama配置才会生效。Streama 不支持热重载。4.4 反向代理与域名访问——Nginx 配置的 5 个安全加固点直接暴露:8080端口不安全必须用 Nginx 做反向代理。以下是我的/etc/nginx/sites-available/streama配置upstream streama_backend { server 127.0.0.1:8080; keepalive 32; } server { listen 80; server_name streama.home; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name streama.home; ssl_certificate /etc/letsencrypt/live/streama.home/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/streama.home/privkey.pem; # 安全加固点 1禁用不安全协议 ssl_protocols TLSv1.2 TLSv1.3; # 安全加固点 2禁用弱加密套件 ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; # 安全加固点 3HSTS 强制 HTTPS add_header Strict-Transport-Security max-age31536000; includeSubDomains always; # 安全加固点 4防止 MIME 类型嗅探 add_header X-Content-Type-Options nosniff; # 安全加固点 5CSP 防 XSSStreama 本身无外链可严格限制 add_header Content-Security-Policy default-src self; script-src self; style-src self unsafe-inline;; location / { proxy_pass http://streama_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_read_timeout 300; proxy_send_timeout 300; } # 静态资源缓存 location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 1y; add_header Cache-Control public, immutable; } }启用配置sudo ln -sf /etc/nginx/sites-available/streama /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx关键点说明keepalive 32保持 32 个长连接减少 TCP 握手开销proxy_read/send_timeout 300延长超时适应大封面图加载Content-Security-PolicyStreama 前端代码无外链可放心设为default-src selfSSL 配置全部来自 Lets Encrypt免费且自动续期X-Forwarded-*头确保 Streama 日志记录真实 IP而非127.0.0.1。5. 常见问题与排查技巧实录从登录失败到封面空白的 12 个真实案例5.1 登录页面打不开——按优先级排查的 5 层漏斗当访问https://streama.home只看到 Nginx 502 Bad Gateway按以下顺序逐层排查每步耗时不超过 2 分钟排查层级检查命令正常输出异常表现解决方案Nginx 层sudo nginx -tsyntax is okunknown directive upstream检查upstream是否写在http{}块内网络层curl -I http://127.0.0.1:8080HTTP/1.1 200 OKFailed to connectsudo systemctl status streama查服务状态Java 层sudo journalctl -u streama -n 20Started Streama Media Serverjava.lang.OutOfMemoryError调大-Xmx1g至-Xmx1500m权限层sudo -u streama ls -l /mnt/nas/videos列出视频文件Permission denied重新执行setfacl命令配置层sudo -u streama cat /opt/streama/config/application.yml | grep portserver.port: 8080端口被注释或改错修正端口并sudo systemctl restart streama实操心得永远从最外层Nginx往里查而不是一上来就重装 Java。90% 的 502 错误源于 Nginx 配置语法错误或 upstream 地址写错。5.2 登录成功但视频库为空——封面生成失败的 4 种根因登录后看到“暂无视频”但/mnt/nas/videos确实有文件。这是封面生成流水线中断的典型症状。按发生概率排序第一高发FFmpeg 未找到或版本过低sudo -u streama ffmpeg -version若报command not found检查application.yml中ffmpeg.path是否为/usr/bin/ffmpeg若版本低于 5.1按 4.3 节升级。第二高发视频路径权限不足sudo -u streama ls /mnt/nas/videos若报Permission denied执行sudo setfacl -R -m u:streama:r-x /mnt/nas/videos sudo setfacl -R -d -m u:streama:r-x /mnt/nas/videos第三高发H2 数据库损坏Streama 的 H2 数据库文件/opt/streama/db/streama.mv.db可能因异常关机损坏。删除它会丢失播放历史但视频库重建sudo rm /opt/streama/db/streama.mv.db* sudo systemctl restart streama第四高发视频文件名含非法字符Streama 无法处理文件名中的?,*,,等字符。用以下命令批量清理sudo -u streama rename s/[?*|]//g /mnt/nas/videos/*.mp45.3 手机 App 无法连接——SSL 证书与反向代理的隐性冲突Streama 官方 Android/iOS App 要求 HTTPS 且证书必须由可信 CA 签发。若用自签名证书App 会直接拒绝连接。解决方案只有两个方案一推荐用 Lets Encrypt 申请真实域名证书。即使内网使用也可通过dnsmasq将streama.home解析到内网 IP并用acme.sh的 DNS API 方式签发方案二应急在 App 设置中关闭 “Require HTTPS”Android App 设置里有此开关改用http://streama.home:8080直连。但此方式不加密仅限可信局域网。注意Nginx 的proxy_pass必须指向http://127.0.0.1:8080不能写https://否则 Streama 会收到错误的X-Forwarded-Proto头导致重定向循环。5.4 字幕不显示——编码、路径、格式的三重校验清单字幕文件必须满足三个条件才能被 Streama 自动识别同名同目录/mnt/nas/videos/电影.mp4对应/mnt/nas/videos/电影.srtUTF-8 编码无 BOM用file -i 电影.srt检查输出应为charsetutf-8ANSI 编码的 SRT 文件需转码iconv -f gbk -t utf-8 电影.srt 电影_utf8.srt mv 电影_utf8.srt 电影.srt若仍不显示在 Streama Web UI 中打开视频右键检查元素查看 Network 标签页是否有subtitle/xxx.srt的 404 请求。若有说明路径映射错误需检查application.yml中streama.video-path是否与实际路径一致。5.5 系统重启后 Streama 未自启——rc-local 的兜底脚本编写尽管 systemd 已enable但某些 NAS 设备如 Synology的 init 系统会延迟加载 systemd导致streama.service启动失败。此时rc-local发挥作用创建/etc/rc.local#!/bin/bash # rc.local for Streama fallback sleep 30 # 等待 systemd 完全就绪 if ! systemctl is-active --quiet streama; then systemctl start streama fi exit 0赋予执行权限sudo chmod x /etc/rc.local sudo systemctl enable rc-local提示rc-local是最后防线不是首选方案。优先确保 systemd 服务本身健壮rc-local仅用于兼容性兜底。6. 后续扩展与维护建议从单机到家庭媒体中枢的演进路径Streama 的定位是“私人家用视频网站”但它的架构天然支持向家庭媒体中枢演进。基于我三年运维经验给出三条可落地的升级路径路径一接入自动化媒体整理免手动刮削Streama 本身不提供 TheMovieDB 刮削但可通过FileBot实现# 安装 FileBot sudo apt install openjfx wget https://github.com/filebot/filebot/releases/download/4.9.3/filebot_4.9.3_all.deb sudo dpkg -i filebot_4.9.3_all.deb # 创建整理脚本 /opt/streama/scripts/organize.sh filebot -script fn:amc --output /mnt/nas/videos \ --input /mnt/nas/downloads \ --def unsortedy musicy artworky \ --def excludeList.excludes 配合inotifywait监控下载目录实现“文件一落盘自动重命名移动生成 NFO”。路径二添加离线转码队列适配老旧设备Streama 的实时转码对 CPU 要求高。可引入HandBrakeCLI预转码# 创建转码脚本 /opt/streama/scripts/transcode.sh HandBrakeCLI -i $1 -o ${1%.mkv}_720p.mp4 \ --presetFast 720p30 --encoder x264 --quality 22用at命令排队执行避免阻塞 Streama 主进程。路径三与 Home Assistant 深度集成语音控制播放通过 Streama 的 REST API可在 Home Assistant 中添加媒体播放器# configuration
返回列表