摘要: 將本機開發的 360° 全景影片播放器納入版控,同時把執行環境從 Windows 切換到 Synology NAS,改以 Docker 部署。 根本原因: 專案原本只在有 NVIDIA 顯卡的 Windows 機器上跑,config.json 寫死了 Windows 磁碟機路徑 W:/photo/Badminton,NAS 上無法直接啟動。 另外 DSM 內建的 ffmpeg 拿掉了 VAAPI 編碼器,裸跑只能走 libx264, Celeron J4025 雙核轉 4K 360 影片的速度無法接受。 影響: - 在 NAS 上 npm start 會因為找不到影片資料夾而列不出任何影片 - 即使把路徑改對,轉檔仍只能用 CPU,82 分鐘的 4K 360 影片要跑十幾小時 修法: - config.json 的 videoDir 改為 NAS 實際路徑 /volume1/photo/Badminton - docker-compose.yml 啟用 devices: /dev/dri,讓容器取得 Intel UHD 600 的 render node;容器內 Alpine 版 ffmpeg 保有完整 VAAPI 支援,啟動時 會自動偵測成 vaapi 模式,並保留 libx264 當備援 - .env(不進版控)提供 VIDEO_DIR / CACHE_DIR 等 NAS 路徑給 compose 使用 驗證: 容器啟動 log 顯示「轉檔引擎:VAAPI 硬體編碼(Intel/AMD,/dev/dri)」, /api/config 回傳 modes: ["vaapi","cpu"],/api/videos 正確辨識來源影片為 3840x1920 equirectangular。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
31 lines
855 B
Docker
31 lines
855 B
Docker
FROM node:22-alpine
|
||
|
||
# ffmpeg / ffprobe:偵測 360 metadata 與轉檔。
|
||
# intel-media-driver / libva-intel-driver:NAS 有 Intel 內顯並把 /dev/dri 掛進來時,可用 VAAPI 硬體轉檔。
|
||
# tini:正確回收 ffmpeg 子程序、把 docker stop 的 SIGTERM 轉給 node。
|
||
RUN apk add --no-cache ffmpeg intel-media-driver libva-intel-driver tini
|
||
|
||
WORKDIR /app
|
||
|
||
ENV NODE_ENV=production \
|
||
PORT=8360 \
|
||
HOST=0.0.0.0 \
|
||
VIDEO_DIR=/videos \
|
||
CACHE_DIR=/cache
|
||
|
||
COPY package*.json ./
|
||
RUN npm ci --omit=dev && npm cache clean --force
|
||
|
||
COPY server.js config.json ./
|
||
COPY lib ./lib
|
||
COPY public ./public
|
||
|
||
VOLUME ["/videos", "/cache"]
|
||
EXPOSE 8360
|
||
|
||
HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
|
||
CMD wget -qO- http://127.0.0.1:8360/api/config >/dev/null || exit 1
|
||
|
||
ENTRYPOINT ["tini", "--"]
|
||
CMD ["node", "server.js"]
|