Show HN: Kyoo – trình duyệt media tự host (thay thế Jellyfin/Plex)
(github.com/zoriya)- Kyoo là máy chủ media tự host tập trung vào nội dung video như phim, series và anime, đồng thời là lựa chọn thay thế cho Jellyfin hoặc Plex
- Dự án hướng tới việc hoạt động mà không cần ép buộc cấu trúc thư mục hay chỉnh sửa metadata thủ công; nếu media không được quét đúng vì tên file kỳ lạ thì điều đó được xem là lỗi
- Các tính năng sẽ không được mở rộng bằng hệ thống plugin mà theo hướng cung cấp dưới dạng tính năng tích hợp sẵn, bao gồm transcoding động, thumbnail xem trước, phát hiện intro/credit và hỗ trợ phụ đề nâng cao
- Hiện tại client hỗ trợ Web; Android vẫn chưa có trong v5, còn hỗ trợ iOS và tvOS hiện chưa có kế hoạch do chi phí mua phần cứng và phí nhà phát triển hằng năm khoảng $100
- Quản trị viên máy chủ có thể dùng các file trong thư mục tải xuống mà không cần sắp xếp riêng, và Kyoo thu hẹp phạm vi vào streaming video thay vì nhạc, sách điện tử hay game
Vấn đề mà Kyoo muốn giải quyết
- Kyoo là máy chủ media tự host chuyên cho nội dung video
- Nội dung mục tiêu là Movies, Series, Anime
- Được giới thiệu là lựa chọn thay thế cho Jellyfin hoặc Plex
- Mục tiêu là giảm gánh nặng bảo trì
- Không cần cấu trúc thư mục cụ thể
- Không cần chỉnh sửa metadata thủ công
- Media phải được quét đúng ngay cả với tên file kỳ lạ; nếu thất bại thì được xem là lỗi
- Không cung cấp hệ thống plugin
- Định hướng là tích hợp sẵn càng nhiều tính năng càng tốt
Các tính năng chính
-
Dynamic Transcoding
- Có thể transcoding media sang chất lượng mong muốn
- Có thể đổi chất lượng trong lúc phát nhờ chuyển đổi chất lượng tự động
- Có thể tua và duyệt ngay lập tức mà không cần chờ transcoder
-
Video Preview Thumbnails
- Có thể xem trước video khi rê chuột lên thanh tiến trình
-
Intro/Credit detection
- Tự động phát hiện intro và credit bằng audio fingerprinting
- Cũng có thể dùng đối sánh tiêu đề chapter
-
Enhanced Subtitle Support
- Hỗ trợ phụ đề PGS/VODSUB và SSA/ASS
- Dùng font nhúng trong video khi có thể
-
Anime Name Parsing
- Có thể đối sánh cả những tên file anime phức tạp như
[Some-Stuffs] Jojo's Bizarre Adventure Stone Ocean 24 (1920x1080 Blu-Ray Opus) [2750810F].mkv
- Có thể đối sánh cả những tên file anime phức tạp như
-
Helm Chart
- Có Helm chart chính thức để triển khai lên cụm Kubernetes
- Hỗ trợ nhiều replica vẫn đang được thực hiện
-
OIDC Connection
- Có thể đăng nhập bằng các dịch vụ tương thích OIDC như Google, Discord, Authelia
Các tính năng vẫn chưa được triển khai lại trong v5
-
Watch List Scrubbing Support
- Tính năng tự động đồng bộ danh sách xem với các dịch vụ đã kết nối vẫn chưa được triển khai lại trong v5
- Hiện nhắm tới SIMKL và các dịch vụ khác trong tương lai
-
Download and Offline Support
- Tải xuống và hỗ trợ offline để xem khi không có Internet cũng vẫn chưa được triển khai lại trong v5
- Được giới thiệu là sẽ có tính năng đồng bộ tiến trình khi thiết bị lên mạng trở lại
Client và nền tảng
- Client hiện được hỗ trợ là Web
- Client Android vẫn chưa có trong v5 và đang ở trạng thái “soon”
- Các nền tảng bổ sung đang được xem xét
- Frontend được xây dựng bằng React-Native và Expo
- Hỗ trợ thiết bị Apple hiện chưa được lên kế hoạch
- Đối tượng là iOS và tvOS
- Lý do là chi phí mua phần cứng và phí nhà phát triển hằng năm khoảng $100
Khác biệt so với Jellyfin/Plex
- Jellyfin và Plex được mô tả là phụ thuộc về mặt kỹ thuật vào SQLite và đặt mọi thứ trong một container duy nhất
- Kyoo dùng cách tiếp cận có thể thêm container riêng khi cần
- Ví dụ được đưa ra là transcoder
- Triết lý vận hành là “thiết lập một lần rồi quên đi”
- Không yêu cầu đổi tên file thủ công
- Không yêu cầu cấu trúc thư mục cụ thể
- Hướng tới việc dùng nguyên trạng các file trong thư mục tải xuống
- Phạm vi được giới hạn vào streaming phim, TV show và anime
- Không xử lý nhạc, sách điện tử hay game
Bắt đầu và tài liệu tích hợp
- API Documentation: Tài liệu API để tích hợp Kyoo với các dịch vụ khác
- Join the discord: Discord để đặt câu hỏi, thảo luận phát triển, yêu cầu tính năng và chia sẻ lỗi
- weblate: Có thể thêm bản dịch cho các ngôn ngữ mà Kyoo chưa hỗ trợ
- kyoo.zoriya.dev: Cung cấp bản demo trực tiếp với các bộ phim không có bản quyền
1 bình luận
Ý kiến trên Hacker News
Bản demo đẹp và được làm rất tốt. Tôi là một người dùng Plex hài lòng, dùng Plexamp cho âm thanh và ứng dụng Plex trên Apple TV cho video nên không có ý định chuyển sang, nhưng việc bắt đầu từ một dự án sandbox để học công nghệ mình quan tâm rồi dần phát triển lớn hơn là một động lực rất tuyệt để tạo ra thứ gì đó
Tôi cũng đã dựng song song Jellyfin để đề phòng lúc Plex bước vào giai đoạn enshittification, nhưng gói thành viên trọn đời mua từ năm 2012 đến giờ đã quá đáng tiền
Tôi từng định chuyển từ Plex sang Jellyfin, nhưng hạn chế lớn nhất của Jellyfin là có vẻ không mấy quan tâm đến việc quản lý thư viện và đặt ra những giả định quá cứng về cấu trúc tệp
Wiki thậm chí còn có hẳn một mục riêng giải thích cách đặt tên tệp cho đúng, trong khi với Plex thì không cần bận tâm đến chuyện đó. Tôi tò mò không biết Kyoo cũng tiếp cận theo kiểu đó hay thân thiện với người dùng hơn. Cách kiếm tiền của Plex thì thật vô lý, nhưng Jellyfin vẫn cho cảm giác chưa thật sự sẵn sàng để dùng nghiêm túc
Hiện vẫn còn một số trường hợp ngoại lệ, đặc biệt là các mục như video bổ sung đôi khi xử lý chưa tốt. Dù vậy, nó vẫn xử lý được cả những tên tệp anime kỳ quặc như "[SomeGroup] Jojo's bizzare adventure - golden wings 12.mkv"
Thành thật mà nói, tôi cũng muốn thấy một Jellyfin thật nhẹ chỉ để stream, hoàn toàn không có phần mã quản lý media
Có vẻ chỉ cần chỉ định một lần thư mục đó là TV show nào thì các tập sẽ được nhận diện tự động. Vấn đề chỉ là bước đầu tiên sẽ không tự động nếu tên thư mục không "đúng chuẩn", và có lẽ cũng có thể lách qua bằng cách dùng Tiny Media Manager để tạo hàng loạt tệp NFO
Trông khá ổn. Tôi thấy thú vị khi các dự án media server dường như đặc biệt chuộng C#. Không rõ là có lý do kỹ thuật nào không, hay chỉ là vì các dự án lớn đã vô tình tạo thành chuẩn
Kyoo cũng dùng Python và Go cho một số thành phần, còn frontend thì dùng TypeScript
Việc dùng cả Postgres và RabbitMQ có vẻ hơi quá tay. Tôi tò mò liệu họ có nhận PR để gom về chỉ dùng Postgres nhằm giảm gánh nặng vận hành hay không
Khi quay lại máy bàn tôi sẽ xem thử chính xác RabbitMQ làm gì trong một media server
Tuy vậy phần đồng bộ phía Kubernetes vẫn còn cần làm thêm
Nó cung cấp một hệ thống hàng đợi rất vững chắc và đã được kiểm chứng, trong khi chi phí vận hành lại thấp. Nhờ đó có thể giữ kiến trúc đơn giản
Dự án khá thú vị. Tuy nhiên tôi tò mò về phần "dễ dàng tua tìm mà không phải chờ transcoder"
Tùy container và codec thì đây luôn là vấn đề. Tôi muốn biết họ giải quyết thế nào, có phải là không dùng libav hay không
Phần khó là làm sao để xem các đoạn đó liền mạch, không lỗi, và bảo đảm đoạn âm thanh hay video không bị lặp lại. Nếu đủ người quan tâm thì có thể họ sẽ viết một bài blog giải thích chi tiết hơn
Hơi tiếc là nó không xử lý nhạc. Lý do chính tôi dùng Plex là để quản lý thư viện nhạc, và dù ngay trong Plex thì phần nhạc cũng có cảm giác như trọng tâm phụ, nó vẫn đủ dùng tốt
Vài ngày trước tôi đã thiết lập Jellyfin và Tailscale trên chiếc n100
Ở mạng nội bộ thì chạy tốt, nhưng khi chia sẻ qua Tailscale cho người nhà ở nửa bên kia địa cầu thì có gì đó bị lỗi. Tốc độ upload đủ nhanh nhưng phải mất khoảng 1 phút mới bắt đầu phát stream, nên có thể liên quan đến độ trễ. Tôi định sẽ thử cái này
Tôi khuyên nên thử đổi cơ chế kiểm soát tắc nghẽn mặc định của Linux (
net.ipv4.tcp_congestion_control) sangbbrtrên cả Jellyfin lẫn máy chủ reverse proxy. Tôi không nắm rõ mọi chi tiết và có thể có tác dụng phụ [1], cũng có thể có thuật toán kiểm soát tắc nghẽn tốt hơn, nhưng trong trường hợp của tôi thì cách này đã giải quyết hoàn toàn vấn đề. Trước đó, ngay cả trong điều kiện mạng yên tĩnh và tối ưu, kết nối cũng bị kẹt dưới 10% tốc độ đường truyền, đôi khi chỉ còn 1%Ngoài ra, Caddy mặc định bật HTTP/3 nên tôi đã ép dùng HTTP/2. Có lẽ sau này cũng nên xem thêm các phiên bản bbr mới hơn
[1] https://news.ycombinator.com/item?id=37408406
Trông thực sự rất ổn. Tôi muốn biết có thể cast lên TV không. Đây là lý do duy nhất khiến tôi còn gắn với Plex, ngoài ra thì tôi không thích Plex
Nhìn hướng đi của Plex thì thật vui khi có thêm lựa chọn. Sẽ rất hay nếu có hook kết nối trực tiếp với SONARR/RADARR để chỉ cần bấm vào mục lịch là nhảy thẳng sang trình phát
Có thể họ ngại tự làm vì vấn đề pháp lý, nhưng nếu gộp media self-hosted và các tính năng quản lý nội dung vi phạm bản quyền vào cùng một giao diện thì sẽ rất tiện
Trông khá tốt. Tôi đã bấm thử vài bộ phim trên trang demo và duyệt ngẫu nhiên, mọi thứ đều hoạt động hoàn hảo
Tôi tò mò về khả năng mở rộng. Muốn biết một máy chủ có thể phục vụ khoảng bao nhiêu người dùng và cần loại máy chủ nào. Cũng muốn biết trang demo đang chạy trên hạ tầng gì và đến mức người dùng nào thì sẽ bị quá tải
Tôi chưa từng benchmark máy chủ, nhưng yếu tố giới hạn gần như chắc chắn sẽ là tốc độ mã hóa của máy. Nếu mọi client đều phải đồng thời transcode các phim h265 8K khác nhau, thì nhu cầu GPU/CPU sẽ ở mức hoàn toàn khác so với trường hợp cùng số người dùng nhưng phát trực tiếp