4 điểm bởi GN⁺ 2024-04-07 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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
  • 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-NativeExpo
  • 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

 
GN⁺ 2024-04-07
Ý 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ì đó

    • Nếu bạn cũng nghe audiobook thì Bookcamp cũng đáng để xem thử. Có thể Plexamp cũng làm được, nhưng Bookcamp mang cảm giác gần với Audible hơn
    • Tôi tò mò mọi người dùng Plexamp như thế nào. Có phải là tải album xuống rồi phát trực tuyến từ đó, dùng như một phương án thay thế kiểu Spotify không?
    • Plexamp là lý do duy nhất khiến tôi vẫn ở lại với Plex
      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

    • Tôi cũng thấy điều đó thật sự kỳ lạ. Mục tiêu của Kyoo là sắp xếp thư viện thay cho bạn, và nó phải hoạt động ngay cả khi dùng nguyên thư mục tải xuống làm thư mục thư viện mà không cần đổi tên gì 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"
    • Tôi không hiểu vì sao máy chủ media lại không nên quá cứng nhắc về cấu trúc. Tôi thích việc trong Jellyfin chỉ cần bấm vài nút là nó tự xử lý, không phải tự mình nghĩ cách tổ chức cấu trúc
    • Tôi dùng Jellyfin nhưng quản lý tệp bằng TMM(tiny media manager). Jellyfin khá giỏi trong việc tiếp nhận đầu ra do TMM tạo ra
      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
    • Tất nhiên còn tùy môi trường, nhưng Jellyfin hỗ trợ gắn thẻ thủ công đủ tốt để dùng được. Bạn không cần phá vỡ cấu trúc thư mục đã sắp cho dễ nhìn trong trình duyệt tệp hay đổi tên tệp, chỉ cần bấm "Identify" trên tệp hoặc thư mục rồi tìm trong cơ sở dữ liệu đã bật bằng tiêu đề hoặc mã IMDB
      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
    • Tôi tò mò vì sao cách kiếm tiền của Plex lại bị xem là vô lý. So với mã nguồn mở thì mô hình freemium đúng là kém lý tưởng hơn, nhưng tôi đã sẵn sàng mua Plex Pass trọn đời từ 4 năm trước và đến giờ chưa hề hối hận
  • 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

    • Phần lớn phần mềm liên quan, nhất là *arr cũng được viết bằng .NET. Đây là một nền tảng có hiệu năng khá tốt mà không phải hy sinh trải nghiệm lập trình viên
    • C# tỏa sáng ở mảng web server nên cũng không có gì lạ. Chỉ là cá nhân tôi ngày càng ít thích nó hơn
      Kyoo cũng dùng Python và Go cho một số thành phần, còn frontend thì dùng TypeScript
    • Dự án này có vẻ được viết bằng nhiều ngôn ngữ. Tôi thấy có C#, Go, Python, và chắc còn có cả mã frontend nữa, nhưng mảng đó thì tôi bị dị ứng
  • 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

    • RabbitMQ được dùng để giao tiếp giữa các dịch vụ. Nó mới được đưa vào, nhưng sau này sẽ dùng cho giao tiếp websocket với client, hàng đợi công việc để tạo mục mới và yêu cầu quét lại, đồng bộ danh sách đã xem với dịch vụ bên ngoài, và đồng bộ giữa nhiều replica khi triển khai trên Kubernetes
      Tuy vậy phần đồng bộ phía Kubernetes vẫn còn cần làm thêm
    • RabbitMQ rất tuyệt. Nó đặc biệt hữu ích khi một số phần của chương trình vốn chậm hơn hẳn các phần khác
      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

    • Họ chạy ffmpeg cho từng đoạn video nhỏ, và nếu tua đến vị trí quá xa so với điểm đang transcoding thì sẽ tạo một tiến trình ffmpeg mới
      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 cũng từng gặp vấn đề tương tự. Tôi đặt Jellyfin phía sau reverse proxy chạy trên WireGuard, và khi có người truy cập với độ trễ cao như từ châu lục khác, lúc đầu tốc độ truyền tăng khá tốt nhưng chỉ trong vài giây đã chậm đến mức gần như không dùng được. Tôi mất khá lâu mới xác định được vấn đề liên quan đến tắc nghẽn gói tin
      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) sang bbr trê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

    • Hiện tại thì chưa. Đây là tính năng khá quan trọng nên chúng tôi dự định cung cấp trong 6 tháng tới, nhưng trước đó tôi muốn hoàn thiện hầu hết các tính năng phía client trước
    • Tính năng cast của Jellyfin trước đây khá tệ, nhưng dạo này đã tốt hơn nhiều. Tốt đến mức tôi không còn nhớ lần gần nhất gặp phiền toái là khi nào
    • Chỉ cần mở từ trình duyệt trên Mac rồi dùng AirPlay để gửi sang Apple TV. Trên Windows cũng có thể làm tương tự bằng các tính năng kiểu cast
  • 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

    • Bản demo là cấu hình chạy docker-compose trong README trên Oracle VPS Always Free tier
      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