Thiết Lập Jellyfin / Emby + Alist Với 302 Direct Stream Proxy (Phần 2)

Dragon Knight

Member
19/05/2026
178
1
18

🎬 [THỦ THUẬT] THIẾT LẬP JELLYFIN / EMBY + ALIST VỚI 302 DIRECT STREAM PROXY (PHẦN 2)
Xây dựng rạp chiếu phim tại gia đỉnh cao từ Google Drive: Xem 4K mượt mà, không tốn băng thông và không đầy ổ cứng máy chủ

Ở bài viết trước, chúng ta đã biến chiếc máy chủ Armbian thành trung tâm Alist lưu trữ Google Drive tốc độ cao qua Cloudflare Worker. Tiếp nối giải pháp đó, bài viết này sẽ hướng dẫn bạn cách tích hợp trực tiếp kho phim Alist vào Jellyfin hoặc Emby. Nhờ cơ chế 302 Direct Stream Proxy, Client của bạn sẽ phát luồng video trực tiếp từ CDN máy chủ đám mây, giúp CPU máy chủ luôn mát mẻ và băng thông truyền tải video thực tế trên Server hoàn toàn bằng 0!

👉 Bài viết liên quan: [Phần 1] Hướng dẫn tạo Server Alist + Cloudflare Worker tăng tốc tải file


Jellyfin-Alist-Cloudflare-darktina-com.png

🌐 I. NGUYÊN LÝ HOẠT ĐỘNG: KIẾN TRÚC 302 REDIRECT PROXY​


Trong mô hình Jellyfin truyền thống, khi xem phim, máy chủ sẽ phải tải toàn bộ file video từ bộ nhớ đám mây về rồi stream lại cho Client, khiến đường truyền mạng gia đình bị chiếm dụng và ổ đĩa server rất dễ bị tràn cache. Giải pháp 302 Direct Stream giải quyết triệt để vấn đề này theo sơ đồ sau:



📺
1. Client Yêu Cầu Phát
Thiết bị (Smart TV, Điện thoại, Web) kết nối vào cổng Proxy 8097 thay vì cổng Jellyfin gốc 8096 để yêu cầu xem phim.



🔄
2. Điều Hướng HTTP 302
Proxy tra cứu đường dẫn phim trên Jellyfin, lấy Direct Link từ Alist/Cloudflare Worker rồi gửi phản hồi HTTP 302 (Redirect) ngay lập tức cho Client.



🚀
3. Phát Video Trực Tiếp
Trình phát nhận mã 302 và kéo luồng phim thẳng từ Cloudflare Worker. Server Armbian hoàn toàn rảnh rỗi và tiêu thụ 0 Mbps băng thông stream.



Mã:
                                  +------------------------------+
                                  |     Cloudflare Worker        |
                                  | (Cung cấp Direct Link Video) |
                                  +---------------+--------------+
                                                  ^
                                                  | (3. Tải Video trực tiếp)
                                                  |
+-------------------+ (1. Bấm Xem / Tải Phim)    |
|   CLIENT DEVICE   |------------------------+    |
| (TV / Phone / Web)|                        |    |
+-------------------+                        v    |
   |                               +---------+----+---------+
   | (Truy cập Cổng 8097)          |    302 REDIRECT PROXY  |
   +------------------------------>|      (Port: 8097)      |
                                   +----+--------------+----+
                                        |              |
                    (Tra cứu Path Item) |              | (2. Lấy Direct Link)
                                        v              v
                           +------------+----+   +-----+------+
                           | Jellyfin Server |   |    Alist   |
                           |   (Port: 8096)  |   | (Port: 5244|
                           |  (Mount WebDAV) |   +------------+
                           +-----------------+



⚙️ II. CÁC BƯỚC THIẾT LẬP HỆ THỐNG CHI TIẾT​


Bước 1: Mount Alist WebDAV vào Hệ Thống bằng Rclone​

Jellyfin cần nhìn thấy file dưới dạng thư mục để quét metadata, poster và phụ đề. Chúng ta dùng Rclone để mount giao thức WebDAV từ Alist vào máy chủ:

1. Cấu hình file rclone.conf:

INI:
[Alist]
type = webdav
url = http://127.0.0.1:5244/dav
vendor = other
user = YOUR_ALIST_USERNAME
pass = YOUR_ENCRYPTED_PASSWORD
(Lưu ý: Mật khẩu cần được mã hóa thông qua lệnh rclone obscure "mat_khau_cua_ban").

2. Lệnh Mount chuẩn tối ưu (Ngăn tuyệt đối việc làm đầy ổ đĩa):
Bash:
rclone mount Alist: /mnt/gdrive_1 \
  --allow-other \
  --dir-cache-time=72h \
  --poll-interval=15s \
  --vfs-cache-mode=off \
  --buffer-size=64M \
  --umask=002

💡 Bí quyết chống tràn ổ đĩa: Thiết lập cờ --vfs-cache-mode=off giúp Rclone không ghi đệm dữ liệu video vào phân vùng hệ thống (/ hoặc ổ C:), loại bỏ hoàn toàn nguy cơ đầy ổ đĩa khi phát các file phim 4K dung lượng lớn!



Bước 2: Cấu hình Thư viện Media trên Jellyfin / Emby​

Truy cập Dashboard quản trị Jellyfin (http://<IP_May_Chu>:8096) và thiết lập các thông số sau:
  • Thêm Library: Trỏ đường dẫn phim về thư mục mount của Rclone (ví dụ: /mnt/gdrive_1/Movies hoặc D:\Rclone\Alist\Movies).
  • Tắt tính năng giải mã nặng (Transcoding): Vào Users > Edit User > Playback, bỏ chọn tất cả mục Enable Video Playback Transcoding và Enable Audio Playback Transcoding. Thiết lập mục tiêu phát là Direct Play 100%.
  • Tắt tạo ảnh xem trước (Trickplay / Chapter Images): Khi dùng dữ liệu đám mây, hãy tắt tính năng trích xuất thumbnail tự động để CPU của máy chủ không bị vắt kiệt.



Bước 3: Cấu hình 302 Redirect Proxy (Node.js Port 8097)​

File trung gian proxy.js (chạy trên Node 20+) sẽ lắng nghe ở cổng 8097, xử lý điều hướng thông minh giữa Jellyfin và Alist:

JavaScript:
// Cấu hình kết nối nội bộ
const CONFIG = {
    PROXY_PORT: 8097,
    JELLYFIN_HOST: '127.0.0.1',
    JELLYFIN_PORT: 8096,
    ALIST_BASE_URL: 'http://127.0.0.1:5244',
    ALIST_USER: 'YOUR_ALIST_USER',
    ALIST_PASS: 'YOUR_ALIST_PASSWORD',
    CACHE_DB_PATH: './jellyfin_alist_cache.db'
};

// Khi Client yêu cầu Play video:
// 1. Proxy trích xuất ItemID từ Jellyfin API
// 2. Tra cứu đường dẫn file tương ứng trên Alist
// 3. Trả về mã điều hướng HTTP 302 với Direct Link từ Cloudflare Worker:
//    res.writeHead(302, { 'Location': directDownloadUrl });
//    res.end();



Bước 4: Kết nối Thiết bị Client (Smart TV / Phone / PC)​

  • Trong mạng nội bộ (LAN / Wi-Fi):
    Mở ứng dụng Jellyfin / Emby (trên TV, iOS, Android, Infuse, VidHub...), điền địa chỉ máy chủ là cổng Proxy:
    Mã:
    http://192.168.10.15:8097
  • Xem từ xa ngoài mạng (WAN qua Cloudflare Tunnel):
    Nếu sử dụng Cloudflare Tunnel, chỉ cần trỏ Public Hostname (ví dụ jellyfin.yourdomain.com) về localhost:8097. Nhờ luồng phim đã được điều hướng 302 trực tiếp sang Worker, bạn hoàn toàn không lo bị vi phạm điều khoản (ToS) về truyền tải media của Cloudflare Tunnel!




⚠️ NHƯỢC ĐIỂM QUAN TRỌNG CẦN BIẾT & CÁCH XỬ LÝ

Hiện tượng "Phim bị đơ sau 60 phút":
Khi đang xem một bộ phim chiếu rạp có thời lượng dài hơn 1 tiếng, đến khoảng phút thứ 60, video thường bất ngờ bị dừng lại, xoay vòng tải liên tục và không thể phát tiếp được.

Nguyên nhân kỹ thuật:
Google Drive OAuth Access Token chỉ có thời hạn hiệu lực tối đa là 60 phút (3600 giây). Khi Client bắt đầu phát phim, link video được ký kèm Access Token lúc đó. Khi thời gian xem vượt qua mốc 60 phút, mã Token cũ này sẽ tự động hết hạn trên máy chủ Google, khiến yêu cầu tải các phân đoạn tiếp theo bị từ chối (401 Unauthorized / Token Expired).

Cách khắc phục cực kỳ đơn giản cho người xem:
  1. Thoát phim ra ngoài (Nhấn nút Back): Khi thấy phim ngừng load ở phút 60, bạn chỉ cần bấm nút Back để thoát ra màn hình giới thiệu phim trên Jellyfin/Emby.
  2. Bấm Xem tiếp (Resume): Nhấn lại nút Xem tiếp tại vị trí vừa dừng.
👉 Lúc này, Proxy và Cloudflare Worker sẽ tự động cấp một luồng phát mới với Token mới tinh vừa được làm mới, phim sẽ tiếp tục chạy mượt mà đến hết mà không bị lỗi nữa!




🌟 III. TỔNG KẾT​


Mô hình kết hợp Jellyfin + Alist + Cloudflare Worker + 302 Proxy là giải pháp hoàn hảo cho những bạn đam mê tự dựng rạp phim tại nhà:
  • ✔ Tiết kiệm tối đa chi phí phần cứng (chạy tốt trên box Armbian, Raspberry Pi giá rẻ).
  • ✔ Giải phóng 100% băng thông tải lên (Upload) của đường truyền mạng gia đình.
  • ✔ Dung lượng phim vô tận nhờ tận dụng kho lưu trữ đám mây.


📖 ĐỌC LẠI BÀI VIẾT PHẦN 1
Nếu bạn chưa thiết lập kho Alist và Cloudflare Worker, hãy xem lại hướng dẫn chi tiết tại đây:

👉 [Phần 1] Hướng dẫn tạo Server Alist + Cloudflare Worker tăng tốc tải file Google Drive (0% Băng Thông)