4 คะแนน โดย GN⁺ 2024-04-07 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Kyoo คือมีเดียเซิร์ฟเวอร์แบบโฮสต์เองที่เน้นคอนเทนต์วิดีโอ เช่น ภาพยนตร์ ซีรีส์ และอนิเมะ และเป็นทางเลือกแทน Jellyfin หรือ Plex
  • ตั้งเป้าให้ทำงานได้โดยไม่ต้องบังคับโครงสร้างโฟลเดอร์หรือแก้ไขเมทาดาทาด้วยตนเอง และหากสแกนมีเดียไม่ได้อย่างถูกต้องเพราะชื่อไฟล์ประหลาด จะถือว่าเป็น บั๊ก
  • ทิศทางคือไม่ขยายความสามารถด้วยระบบปลั๊กอิน แต่ให้มาเป็น ฟีเจอร์ในตัว รวมถึง dynamic transcoding, พรีวิวภาพขนาดย่อ, การตรวจจับอินโทร/เครดิต, และการรองรับซับไตเติลขั้นสูง
  • ตอนนี้ไคลเอนต์รองรับ Web และ Android ยังไม่มีใน v5 ส่วนการรองรับ iOS และ tvOS ยังไม่มีแผนในตอนนี้ เนื่องจากค่าใช้จ่ายในการซื้อฮาร์ดแวร์และค่าธรรมเนียมนักพัฒนารายปีราว $100
  • ผู้ดูแลเซิร์ฟเวอร์สามารถใช้ไฟล์จากไดเรกทอรีดาวน์โหลดได้โดยไม่ต้องจัดระเบียบเพิ่ม และ Kyoo จำกัดขอบเขตไว้ที่ การสตรีมวิดีโอ ไม่ใช่เพลง อีบุ๊ก หรือเกม

ปัญหาที่ Kyoo ต้องการแก้

  • Kyoo เป็นมีเดียเซิร์ฟเวอร์แบบโฮสต์เองที่ออกแบบมาสำหรับคอนเทนต์วิดีโอโดยเฉพาะ
    • คอนเทนต์เป้าหมายคือ Movies, Series และ Anime
    • ถูกนำเสนอในฐานะทางเลือกแทน Jellyfin หรือ Plex
  • มีเป้าหมายเพื่อลดภาระในการดูแลรักษา
    • ไม่ต้องใช้ โครงสร้างโฟลเดอร์ แบบเฉพาะ
    • ไม่ต้องแก้ไข เมทาดาทา ด้วยตนเอง
    • แม้ชื่อไฟล์จะแปลก ระบบก็ควรสแกนมีเดียได้อย่างถูกต้อง และหากล้มเหลวจะถือว่าเป็นบั๊ก
  • ไม่มีระบบปลั๊กอิน
    • แนวทางคือใส่ความสามารถต่าง ๆ มาเป็น ฟีเจอร์ในตัว ให้มากที่สุด

ฟีเจอร์หลัก

  • Dynamic Transcoding

    • สามารถทรานส์โค้ดมีเดียเป็นคุณภาพตามต้องการได้
    • เปลี่ยนคุณภาพระหว่างเล่นได้ด้วยการสลับคุณภาพอัตโนมัติ
    • ค้นหาตำแหน่งเล่นได้ทันทีโดยไม่ต้องรอ transcoder
  • Video Preview Thumbnails

    • เมื่อเอาเมาส์ไปวางบนแถบความคืบหน้าของวิดีโอ จะเห็นพรีวิววิดีโอได้
  • Intro/Credit detection

    • ตรวจจับอินโทรและเครดิตอัตโนมัติด้วย audio fingerprinting
    • สามารถใช้การจับคู่ชื่อบทได้ด้วย
  • Enhanced Subtitle Support

    • รองรับซับไตเติล PGS/VODSUB และ SSA/ASS
    • ใช้ฟอนต์ที่ฝังมากับวิดีโอเมื่อทำได้
  • Anime Name Parsing

    • สามารถจับคู่ชื่อไฟล์อนิเมะที่ซับซ้อนได้ เช่น [Some-Stuffs] Jojo's Bizarre Adventure Stone Ocean 24 (1920x1080 Blu-Ray Opus) [2750810F].mkv
  • Helm Chart

    • มี Helm chart อย่างเป็นทางการสำหรับนำไป deploy บน Kubernetes cluster
    • รองรับหลาย replica กำลังอยู่ระหว่างพัฒนา
  • OIDC Connection

    • สามารถล็อกอินผ่านบริการที่รองรับ OIDC เช่น Google, Discord และ Authelia

ฟีเจอร์ที่ยังไม่ถูกนำกลับมาใน v5

  • Watch List Scrubbing Support

    • ฟีเจอร์ซิงก์รายการรับชมกับบริการที่เชื่อมต่อแบบอัตโนมัติ ยังไม่ถูกนำกลับมาใน v5
    • เป้าหมายคือ SIMKL และบริการอื่น ๆ ในอนาคต
  • Download and Offline Support

    • ฟีเจอร์ดาวน์โหลดและการใช้งานออฟไลน์สำหรับดูโดยไม่ใช้อินเทอร์เน็ต ก็ยังไม่ถูกนำกลับมาใน v5
    • ระบุว่าจะมีการซิงก์ความคืบหน้าเมื่ออุปกรณ์กลับมาออนไลน์อีกครั้ง

ไคลเอนต์และแพลตฟอร์ม

  • ไคลเอนต์ที่รองรับในตอนนี้คือ Web
  • ไคลเอนต์ Android ยังไม่มีใน v5 และอยู่ในสถานะ “soon”
  • กำลังพิจารณาแพลตฟอร์มเพิ่มเติม
  • ฟรอนต์เอนด์สร้างด้วย React-Native และ Expo
  • ตอนนี้ยังไม่มีแผนรองรับอุปกรณ์ Apple
    • เป้าหมายคือ iOS และ tvOS
    • เหตุผลคือค่าใช้จ่ายในการซื้อฮาร์ดแวร์และค่าธรรมเนียมนักพัฒนารายปีราว $100

ความแตกต่างจาก Jellyfin/Plex

  • Jellyfin และ Plex ถูกอธิบายว่าในเชิงเทคนิคพึ่งพา SQLite และใช้แนวทางรวมทุกอย่างไว้ในคอนเทนเนอร์เดียว
  • Kyoo ใช้แนวทางที่สามารถมีคอนเทนเนอร์เพิ่มเติมได้เมื่อจำเป็น
    • ตัวอย่างคือ transcoder
  • ปรัชญาการใช้งานคือ “ตั้งครั้งเดียวแล้วลืมได้เลย”
    • ไม่บังคับให้เปลี่ยนชื่อไฟล์ด้วยตนเอง
    • ไม่บังคับโครงสร้างโฟลเดอร์แบบเฉพาะ
    • ตั้งเป้าให้ใช้ไฟล์จากไดเรกทอรีดาวน์โหลดได้ตามเดิม
  • ขอบเขตถูกจำกัดไว้ที่การสตรีมภาพยนตร์ รายการทีวี และอนิเมะ
    • ไม่ครอบคลุมเพลง อีบุ๊ก หรือเกม

การเริ่มต้นและแหล่งข้อมูลเชื่อมต่อ

  • API Documentation: เอกสาร API สำหรับเชื่อม Kyoo เข้ากับบริการอื่น
  • Join the discord: Discord สำหรับถามคำถาม พูดคุยการพัฒนา ขอฟีเจอร์ และแชร์บั๊ก
  • weblate: สามารถเพิ่มคำแปลสำหรับภาษาที่ Kyoo ยังไม่รองรับได้
  • kyoo.zoriya.dev: มีไลฟ์เดโมที่ใช้ภาพยนตร์ปลอดลิขสิทธิ์

1 ความคิดเห็น

 
GN⁺ 2024-04-07
ความคิดเห็นบน Hacker News
  • เดโมสวยและทำออกมาได้ดี ในฐานะผู้ใช้ Plex ที่พอใจกับการใช้ Plexamp สำหรับเสียง และแอป Plex บน Apple TV สำหรับวิดีโอ เลยยังไม่คิดจะย้าย แต่เหตุผลที่เริ่มจาก โปรเจกต์แซนด์บ็อกซ์ เพื่อเรียนรู้เทคโนโลยีที่สนใจ แล้วค่อย ๆ โตขึ้นเรื่อย ๆ นั้น ผมมองว่าเป็นแรงจูงใจที่ดีมากในการสร้างอะไรสักอย่าง

    • ถ้าฟังหนังสือเสียงด้วย Bookcamp ก็น่าลองดู ถึง Plexamp ก็น่าจะทำได้ แต่ Bookcamp ให้ความรู้สึกใกล้เคียง Audible มากกว่า
    • อยากรู้ว่าใช้ Plexamp กันอย่างไร เป็นแนวทางดาวน์โหลดอัลบั้มลงมาแล้วสตรีมจากตรงนั้น ใช้เป็นทางเลือกคล้าย Spotify หรือเปล่า?
    • Plexamp เป็นเหตุผลเดียวที่ยังทำให้ผมอยู่กับ Plex ต่อไป
      ผมตั้งค่า Jellyfin ควบคู่ไว้แล้ว เผื่อวันที่ Plex เข้าสู่ช่วง enshittification สักวัน แต่สมาชิกตลอดชีพที่ซื้อไว้ตั้งแต่ปี 2012 ก็ถือว่าคุ้มค่ามากจนถึงตอนนี้
  • เคยพยายามย้ายจาก Plex ไป Jellyfin แต่ข้อจำกัดใหญ่ที่สุดคือ Jellyfin ดูไม่ค่อยสนใจเรื่องการจัดการไลบรารี และตั้งสมมติฐานกับโครงสร้างไฟล์แข็งเกินไป
    ในวิกิมีส่วนแยกต่างหากอธิบายวิธีตั้งชื่อไฟล์ให้ถูกต้อง ซึ่งเป็นเรื่องที่ใน Plex ไม่ต้องไปใส่ใจ เลยสงสัยว่า Kyoo ใช้แนวทางคล้ายกันหรือเป็นมิตรกับผู้ใช้มากกว่า วิธีหารายได้ของ Plex นั้นชวนงง แต่ Jellyfin ยังให้ความรู้สึกว่ายังไม่พร้อมสำหรับการใช้งานจริงจัง

    • ตรงนั้นผมว่าประหลาดจริง ๆ เป้าหมายของ Kyoo คือช่วยจัดระเบียบไลบรารีแทนคุณ และต่อให้ใช้โฟลเดอร์ดาวน์โหลดเป็นโฟลเดอร์ไลบรารีตรง ๆ ก็ควรทำงานได้ทันทีโดยไม่ต้องเปลี่ยนชื่อ
      ตอนนี้ยังมีเคสยกเว้นอยู่ โดยเฉพาะรายการอย่างวิดีโอเสริมที่บางครั้งยังจัดการได้ไม่ดี แต่แม้แต่ชื่อไฟล์อนิเมะแปลก ๆ อย่าง "[SomeGroup] Jojo's bizzare adventure - golden wings 12.mkv" ก็ยังจัดการได้
    • สงสัยว่าทำไมมีเดียเซิร์ฟเวอร์ถึงควร ยึดติดกับโครงสร้างให้น้อยลง ผมชอบที่ใน Jellyfin กดปุ่มไม่กี่ปุ่มก็จัดการให้เองได้ และสะดวกที่ไม่ต้องคิดเรื่องโครงสร้างเอง
    • ผมใช้ Jellyfin แต่จัดการไฟล์ด้วย TMM(tiny media manager) Jellyfin ค่อนข้างรับผลลัพธ์ที่ TMM สร้างออกมาได้ดี
      พูดตรง ๆ ก็อยากเห็น Jellyfin แบบเบาที่ไม่มีโค้ดจัดการสื่อเลย มีแค่สตรีมมิงอย่างเดียว
    • แน่นอนว่าขึ้นอยู่กับแต่ละสภาพแวดล้อม แต่ Jellyfin รองรับ การแท็กแบบแมนนวล ได้ดีพอ ไม่จำเป็นต้องทำลายโครงสร้างโฟลเดอร์ที่จัดไว้ให้ดูสะดวกในไฟล์เบราว์เซอร์ หรือเปลี่ยนชื่อไฟล์ แค่กด "Identify" ที่ไฟล์หรือโฟลเดอร์ แล้วค้นหาฐานข้อมูลที่เปิดใช้งานไว้ด้วยชื่อเรื่องหรือหมายเลข IMDB ก็พอ
      พอกำหนดครั้งหนึ่งว่าโฟลเดอร์นั้นเป็นทีวีโชว์เรื่องไหน ดูเหมือนตอนต่าง ๆ จะถูกรู้จำโดยอัตโนมัติ สิ่งที่ไม่ทำงานอัตโนมัติก็แค่ขั้นตอนแรกเมื่อชื่อโฟลเดอร์ไม่ได้ตั้งมา "ถูกต้อง" และน่าจะเลี่ยงได้ด้วยการสร้างไฟล์ NFO จำนวนมากด้วย Tiny Media Manager
    • สงสัยว่าทำไมการหารายได้ของ Plex ถึงชวนงง แม้ โมเดล freemium แบบมีพรีเมียม จะดูไม่อุดมคติเท่าโอเพนซอร์ส แต่ผมเต็มใจซื้อ Plex Pass แบบตลอดชีพเมื่อ 4 ปีก่อน และจนถึงตอนนี้ก็ไม่เคยเสียใจเลย
  • ดูดี น่าสนใจที่โปรเจกต์มีเดียเซิร์ฟเวอร์ดูเหมือนมีแนวโน้มชอบ C# เป็นพิเศษ สงสัยว่ามีเหตุผลทางเทคนิคหรือเป็นผลจากโปรเจกต์ใหญ่ ๆ สร้างมาตรฐานไว้มากกว่า

    • ซอฟต์แวร์ที่เกี่ยวข้องส่วนใหญ่ โดยเฉพาะตระกูล *arr ก็เขียนด้วย .NET เป็นแพลตฟอร์มที่ประสิทธิภาพดีโดยไม่ต้องแลกกับประสบการณ์นักพัฒนามากนัก
    • C# โดดเด่นในฝั่งเว็บเซิร์ฟเวอร์ จึงไม่แปลกนัก แต่โดยส่วนตัวผมชอบมันน้อยลงเรื่อย ๆ
      Kyoo เองก็ใช้ Python และ Go ในบางคอมโพเนนต์ และใช้ TypeScript สำหรับฟรอนต์เอนด์
    • โปรเจกต์นี้ดูเหมือนเขียนด้วยหลายภาษา เห็น C#, Go, Python และอาจมีโค้ดฟรอนต์เอนด์ด้วย แต่ผมแพ้ทางฝั่งนั้น
  • การใช้ทั้ง Postgres และ RabbitMQ ดูจะเกินความจำเป็นไปหน่อย สงสัยว่าจะรับ PR ที่รวมให้เหลือ Postgres อย่างเดียวเพื่อลดภาระการดูแลระบบไหม
    กลับไปที่เดสก์ท็อปแล้วคงต้องดูว่า RabbitMQ ทำอะไรในมีเดียเซิร์ฟเวอร์กันแน่

    • RabbitMQ ใช้สำหรับการสื่อสารระหว่างบริการ เพิ่งนำเข้ามาใช้ แต่ต่อไปจะใช้กับการสื่อสารผ่าน WebSocket กับไคลเอนต์, คิวงานสำหรับการสร้างรายการใหม่และคำขอสแกนซ้ำ, การซิงก์รายการที่ดูไว้กับบริการภายนอก และการซิงก์ระหว่าง replica หลายตัวเมื่อ deploy บน Kubernetes
      แต่ฝั่งการซิงก์บน Kubernetes ยังต้องทำงานเพิ่มอีก
    • RabbitMQ ยอดเยี่ยมมาก มีประโยชน์เป็นพิเศษเมื่อบางส่วนของโปรแกรมช้ากว่าส่วนอื่นโดยธรรมชาติ
      มันให้ระบบคิวที่แข็งแรงมากและพิสูจน์ตัวเองแล้ว ขณะเดียวกันภาระในการรันก็ต่ำ ทำให้คงโครงสร้างให้เรียบง่ายได้
  • เป็นโปรเจกต์ที่น่าสนใจ แต่สงสัยตรงส่วนที่บอกว่า "เลื่อนหาได้อย่างง่ายดายโดยไม่ต้องรอทรานส์โคดเดอร์"
    เรื่องนี้เป็นปัญหาเสมอขึ้นอยู่กับคอนเทนเนอร์และโคเดก อยากรู้ว่าแก้ได้อย่างไร หรือไม่ได้ใช้ libav หรือเปล่า

    • รัน ffmpeg สำหรับช่วงวิดีโอเล็ก ๆ แต่ละช่วง และถ้าเลื่อนไปไกลจากตำแหน่งที่กำลังทรานส์โค้ดอยู่มากเกินไป ก็จะสร้างโปรเซส ffmpeg ใหม่
      ส่วนที่ยากคือทำให้ช่วงเหล่านั้นดูต่อเนื่องได้โดยไม่สะดุดหรือมีปัญหา และรับประกันว่าไม่มีช่วงเสียงหรือวิดีโอซ้ำกัน ถ้ามีคนสนใจพอ อาจเขียนบล็อกโพสต์อธิบายละเอียดได้
  • เสียดายที่ไม่จัดการเพลง เหตุผลหลักที่ใช้ Plex คือ การจัดการไลบรารีเพลง แม้ใน Plex เอง เพลงจะรู้สึกเหมือนเป็นจุดสนใจรอง แต่ก็ยังใช้งานได้ดีพอ

  • เมื่อไม่กี่วันก่อนผมตั้งค่า Jellyfin กับ tailscale บน n100
    ในเครือข่ายโลคัลมันทำงานได้ดี แต่พอแชร์ให้ครอบครัวที่อยู่อีกซีกโลกผ่าน tailscale ก็มีบางอย่างพัง แม้ความเร็วอัปโหลดจะเร็วพอ แต่กว่าสตรีมจะเริ่มใช้เวลาประมาณ 1 นาที อาจเกี่ยวกับ latency ก็ได้ เดี๋ยวจะลองใช้ตัวนี้ดู

    • เคยเจอปัญหาคล้ายกัน ผมวาง Jellyfin ไว้หลัง reverse proxy บน WireGuard แล้วพอเป็นผู้ชมที่ latency สูง เช่น อยู่คนละทวีป ตอนแรกความเร็วส่งข้อมูลพุ่งขึ้นมาพอใช้ได้ แต่ภายในไม่กี่วินาทีก็ช้าจนใช้ไม่ได้ ใช้เวลานานกว่าจะยืนยันได้ว่าปัญหาเกี่ยวกับ packet congestion
      แนะนำให้ลองเปลี่ยน congestion control เริ่มต้นของ Linux (net.ipv4.tcp_congestion_control) บนเซิร์ฟเวอร์ Jellyfin และ reverse proxy เป็น bbr รายละเอียดผมก็ไม่ค่อยรู้ และอาจมีผลข้างเคียง [1] หรืออาจมีอัลกอริทึม congestion control ที่ดีกว่านี้ แต่ในกรณีของผม วิธีนี้แก้ปัญหาได้หมด ก่อนหน้านี้แม้ในสภาพเครือข่ายที่เงียบและเหมาะสม การเชื่อมต่อก็ตันอยู่ที่ต่ำกว่า 10% ของความเร็วสาย บางครั้งเหลือถึง 1%
      นอกจากนี้ Caddy เปิด HTTP/3 เป็นค่าเริ่มต้น ผมเลยบังคับให้ใช้ HTTP/2 แทน ไว้ภายหลังคงต้องดู bbr เวอร์ชันใหม่กว่านี้ด้วย
      [1] https://news.ycombinator.com/item?id=37408406
  • ดูดีมาก สงสัยว่าสามารถ cast ไปยังทีวีได้ไหม นี่เป็นเหตุผลเดียวที่ทำให้ผมยังติดอยู่กับ Plex นอกนั้นผมไม่ได้ชอบ Plex เลย

    • ตอนนี้ยังไม่ได้ เป็นฟีเจอร์ที่ค่อนข้างสำคัญ เลยมีแผนจะทำให้ใช้ได้ภายใน 6 เดือน ข้างหน้า แต่ก่อนหน้านั้นอยากปิดงานฟีเจอร์ฝั่งไคลเอนต์ส่วนใหญ่ให้เสร็จก่อน
    • การ cast ของ Jellyfin เมื่อก่อนค่อนข้างแย่ แต่ช่วงนี้ดีขึ้นมากแล้ว ถึงขั้นจำไม่ได้แล้วว่าครั้งล่าสุดที่รู้สึกลำบากคือเมื่อไหร่
    • เปิดในเบราว์เซอร์บน Mac แล้วส่งไป Apple TV ด้วย AirPlay ก็ได้ บน Windows ก็น่าจะทำคล้าย ๆ กันผ่านพวกการ cast ได้
  • ดูทิศทางที่ Plex กำลังไปแล้ว ดีใจที่มีตัวเลือกเพิ่มขึ้น อยากให้ทำ hook ที่เชื่อมกับ SONARR/RADARR ได้โดยตรง เพื่อให้คลิกรายการในปฏิทินแล้วไปยัง player ได้ทันที
    อาจไม่อยากทำเองเพราะประเด็นทางกฎหมาย แต่ถ้ารวมสื่อแบบ self-hosted กับฟีเจอร์จัดการสื่อเถื่อนไว้ในอินเทอร์เฟซเดียวก็น่าจะสะดวก

  • ดูดี ผมลองกดหนังสองสามเรื่องในหน้าเดโมแล้วสุ่มสำรวจดู ทุกอย่างทำงานได้สมบูรณ์
    สงสัยเรื่อง scalability อยากรู้ว่าเซิร์ฟเวอร์หนึ่งเครื่องรองรับผู้ใช้ได้ประมาณกี่คน และต้องใช้เซิร์ฟเวอร์แบบไหน หน้าเดโมรันอยู่บนอะไร และถ้าผู้ใช้เพิ่มขึ้นถึงระดับไหนจึงจะโอเวอร์โหลด

    • เดโมเป็นการรัน docker-compose จาก README บน Oracle VPS Always Free tier
      ยังไม่เคย benchmark เซิร์ฟเวอร์ แต่คอขวดแทบจะแน่นอนว่าเป็นความเร็วในการเข้ารหัสของเครื่อง ถ้าไคลเอนต์ทุกตัวต้อง transcode หนัง h265 8K คนละเรื่องพร้อมกัน ก็ต้องใช้ประสิทธิภาพ GPU/CPU คนละระดับโดยสิ้นเชิงกับกรณีที่ผู้ใช้จำนวนเท่ากันเล่นแบบ direct play