8 คะแนน โดย GN⁺ 1 일 전 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • Castor เป็นเครื่องมือบนเทอร์มินัลที่ค้นหาสตรีมวิดีโอจริงจากเว็บเพจหรือ URL สตรีมโดยตรง แปลงให้เหมาะกับทีวี และส่งแบบเรียลไทม์ด้วยคุณภาพต้นฉบับโดยไม่ต้องมิเรอร์หน้าจอ
  • ใช้ Chrome แบบ headless และ Chrome DevTools Protocol เพื่อสังเกตทราฟฟิกเครือข่าย และสกัดสตรีมผ่านขั้นตอนคลิกหน้าเว็บ เข้า iframe ที่ใหญ่ที่สุด และคลิกซ้ำ แต่อาจไม่ทำงานกับหน้าที่ไม่อนุญาตให้เล่นอัตโนมัติ
  • ใช้ได้กับสมาร์ตทีวีที่รองรับ DLNA/UPnP รวมถึง Kodi, VLC, Plex ส่วนการรองรับ Chromecast ได้ implement แล้วแต่ยังเป็นเชิงทดลองและยังไม่ได้ทดสอบ
  • วิดีโอ H.264 ที่เล่นได้จะถูกส่งต่อโดยไม่ re-encode และหากจำเป็นจะแปลงด้วย hardware encoder หรือ libx264 อีกทั้งยังสามารถฝังซับไตเติลที่สร้างด้วย whisper ลงในวิดีโอได้
  • ไม่จัดหาวิดีโอ แค็ตตาล็อก แหล่งที่มา หรือหลบเลี่ยง DRM และออกแบบมาให้ส่งเฉพาะหน้าและสตรีมที่ผู้ใช้ระบุเองและมีสิทธิ์ใช้งานเท่านั้น

ส่งวิดีโอบนเว็บเป็นสตรีมจริง

  • Castor ส่ง สตรีมวิดีโอจริง ด้วยคุณภาพเต็มแทนการมิเรอร์หน้าจอที่มีความหน่วงและคุณภาพความละเอียดลดลง และแทนกรณีที่สมาร์ตทีวีไม่สามารถส่งวิดีโอบนเว็บใด ๆ ได้โดยตรง
  • เมื่อป้อนเว็บเพจหรือ URL สตรีมโดยตรง ระบบจะค้นหาวิดีโอ สกัดสตรีม จากนั้น transcode ให้เหมาะกับทีวีและส่งแบบเรียลไทม์
  • สามารถค้นหา IMDB/TMDB ID จากแหล่งที่ผู้ใช้ตั้งค่าไว้ หรือฝังซับไตเติลที่สร้างอัตโนมัติลงในวิดีโอได้
  • เมื่อรัน castor cast จะสามารถค้นหาผลงานและส่งผ่านเบราว์เซอร์แบบโต้ตอบบนเทอร์มินัลได้

วิธีสกัดสตรีมและข้อจำกัด

  • รัน Chrome แบบ headless และใช้ Chrome DevTools Protocol สังเกตทราฟฟิกเครือข่ายเพื่อค้นหาสตรีม
  • ทำ pipeline การกระทำสั้น ๆ เพื่อเริ่มเล่น
    • คลิกหน้าเว็บ
    • ย้ายไปยัง iframe ที่ใหญ่ที่สุด
    • คลิกอีกครั้งเป็นทางเลือกสำรอง
  • ทำงานกับหน้าที่อนุญาตให้เล่นอัตโนมัติ และไม่ได้รองรับทุกเว็บไซต์

ข้อกำหนดในการติดตั้งและรัน

  • วิธีที่แนะนำคือใช้ native binary ที่รันบนเครือข่ายเดียวกับทีวี
  • ต้องมีเครื่องมือต่อไปนี้อยู่ใน PATH ของสภาพแวดล้อมที่รัน
    • Chrome หรือ Chromium: สกัดสตรีมแบบ headless
    • ffmpeg: transcode
    • ffprobe: ตรวจจับรูปแบบสื่อ
  • บน macOS สามารถติดตั้งด้วย Homebrew ได้
brew install --cask stupside/tap/castor
  • การ build จากซอร์สต้องใช้ Go 1.26+ และ CMake
    • binding ของ whisper.cpp ใช้ cgo และลิงก์กับ libwhisper.a ที่ build ในเครื่อง
    • เนื่องจากต้องใช้ replace ในเครื่องและไลบรารี static ที่ build ไว้ล่วงหน้า go install จึงใช้ไม่ได้
git clone --recurse-submodules https://github.com/stupside/castor.git
cd castor
make

ขั้นตอนการใช้งานพื้นฐาน

  • ใช้ castor scan เพื่อค้นหาชื่อทีวี แล้วระบุชื่อที่ถูกต้องและประเภทอุปกรณ์ใน device ของ config.yaml
device:
  name: "Living Room TV"
  type: dlna
  • ส่งเว็บเพจหรือ URL สตรีมโดยตรงด้วย cast player
castor cast player https://example.com/watch/some-video
  • การค้นหาผลงานแบบโต้ตอบต้องใช้ TMDB API key และแหล่งที่ผู้ใช้ตั้งค่าไว้ ส่วนคำสั่งและ flag ทั้งหมดดูได้ที่ castor --help

การตั้งค่าและแหล่งที่ผู้ใช้จัดหา

  • config.yaml จะถูกอ่านจากไดเรกทอรีปัจจุบันหรือพาธที่ระบุด้วย --config และรายการที่จำเป็นมีเพียง การตั้งค่าอุปกรณ์ ปลายทางสำหรับส่งเท่านั้น
  • มีค่าเริ่มต้นให้สำหรับ timeout, การค้นหา, capture, transcoding, network interface และการนำทางของ Chrome
  • ค่าลับสามารถ override ด้วย config.local.yaml ที่แยกออกจาก Git หรือกำหนดเป็น environment variable รูปแบบ CASTOR_SECTION__FIELD ได้
  • cast movie, cast episode และเบราว์เซอร์แบบโต้ตอบจะใส่ ID ของผลงานลงในแหล่งที่ผู้ใช้ตั้งค่าไว้
    • Castor เองไม่มีแหล่งที่มา แค็ตตาล็อก หรือฟังก์ชันค้นหาในตัว
    • ใส่ ID ลงใน templates ที่ผู้ใช้เขียน เติม proxies แต่ละรายการไว้ข้างหน้า เปิดหน้าเว็บ แล้วสกัดสตรีมด้วยวิธีเดียวกับ cast player
    • หากมีหลาย proxy จะลองตามลำดับที่ระบุ
sources:
  - proxies: ["https://your-source.example";]
    templates:
      movie: "/embed/movie/{itemID}"
      episode: "/embed/tv/{itemID}/{season}-{episode}"

การค้นหา TMDB และซับไตเติลอัตโนมัติ

  • เบราว์เซอร์แบบโต้ตอบใช้ TMDB API key สำหรับค้นหาผลงาน
    • สามารถขอ key ได้จาก themoviedb.org
    • คำสั่งโดยตรงอย่าง cast movie <id> ไม่ต้องใช้ TMDB key
  • ซับไตเติลอัตโนมัติจะถอดเสียงพูดด้วย whisper และฝังลงในวิดีโอ โดยค่าเริ่มต้นจะปิดอยู่
    • ภาษาเริ่มต้นคืออังกฤษ
    • โมเดลเริ่มต้นคือ ggml-tiny.en ขนาดประมาณ 75MB และจะดาวน์โหลดให้อัตโนมัติ

อุปกรณ์ที่รองรับ

  • รองรับทีวีที่ implement โปรไฟล์ DLNA/UPnP MediaRenderer:1
    • Samsung ผ่านการทดสอบแล้ว และมี LG, Sony Bravia, Panasonic Viera, Philips, Hisense, TCL, VIZIO, Sharp เป็นเป้าหมายที่รองรับ
    • สามารถใช้ network player อย่าง Kodi, VLC, Plex ได้ด้วย
  • ใช้ castor scan เพื่อค้นหาอุปกรณ์ในเครือข่ายเดียวกัน
  • การรองรับ Chromecast ได้ implement แล้วแต่ ยังเป็นเชิงทดลองและยังไม่ได้ทดสอบ

ข้อจำกัดของ Docker และการตั้งค่าเครือข่าย

  • Docker image สำหรับ Linux เท่านั้นมี Chrome, ffmpeg, ffprobe มาให้ด้วย
  • ใน Docker ต้องมี โฮสต์ Linux ที่อยู่บน LAN เดียวกับทีวี และต้องใช้ --network host เพื่อการค้นหาแบบ SSDP multicast และการเชื่อมต่อกับเซิร์ฟเวอร์เล่นของ Castor
  • บน macOS และ Windows ของ Docker Desktop นั้น --network host จะไม่เชื่อมต่อไปยัง LAN
    • คอนเทนเนอร์ถูกวางไว้ใน subnet ของ VM ภายใน Docker Desktop ทำให้ scan หาอุปกรณ์ไม่เจอและส่งไม่สำเร็จ
    • บน macOS และ Windows ควรใช้ native binary หรือ bridge Linux VM เข้ากับ LAN
  • สามารถ mount /config.yaml เพื่อจัดเตรียมการตั้งค่า และเก็บโมเดล whisper ที่ดาวน์โหลดอัตโนมัติไว้ใน volume ได้
  • หากใช้ release tag แทน latest จะสามารถตรึงเวอร์ชันได้

Media passthrough และการเข้ารหัส

  • หากทีวีเล่นวิดีโอ H.264 ที่อยู่ในโปรไฟล์และเลเวลที่รองรับได้อยู่แล้ว จะใช้ stream copy เพื่อลดการใช้ CPU ลงจนแทบเป็น 0
  • หากทีวีปฏิเสธ codec หรือจำเป็นต้องฝังซับไตเติล จะทำการ re-encode
    • เลือกใช้ hardware H.264 encoder ที่ใช้งานได้จริงก่อน เช่น VA-API บน Linux หรือ VideoToolbox ของ native macOS binary
    • หากใช้ไม่ได้ จะ fallback เป็นซอฟต์แวร์ libx264
  • หากต้องการใช้ VA-API ของ Intel GPU ใน Docker container ต้องมี --device /dev/dri และ --network host เพียงอย่างเดียวจะไม่ expose GPU

วัตถุประสงค์และข้อจำกัด

  • Castor เป็น เครื่องมือส่งทั่วไป ไม่ใช่บริการที่ผูกกับเว็บไซต์เฉพาะ
  • ไม่โฮสต์หรือ bundle วิดีโอ แค็ตตาล็อก หรือแหล่งที่มา และประมวลผลเฉพาะหน้า สตรีม และแหล่งที่ผู้ใช้ระบุและมีสิทธิ์ใช้งานเท่านั้น
  • ไม่ถอดรหัสหรือหลบเลี่ยง DRM และไม่สามารถส่ง บริการที่ป้องกันด้วย DRM ได้
  • ผู้ใช้มีหน้าที่ปฏิบัติตามข้อกำหนดการใช้งานของเว็บไซต์และกฎหมายท้องถิ่น โดย提供ให้ตามสภาพสำหรับการใช้งานส่วนบุคคลและเพื่อการศึกษาที่ถูกกฎหมาย

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

 
xguru 1 일 전

โอ้ แล้วคอมเมนต์ด้านล่างที่เป็นอันนี้ https://tvexplorer.live/channel/EBS1TV.kr.SD/country/KR สะดวกมากเลยครับ ฮ่าๆ
ดูเหมือนว่าในเกาหลีน่าจะถูกบล็อกไว้ แต่ถ้าอยู่ต่างประเทศจะดูได้เลยไหมนะ?

 
GN⁺ 1 일 전
ความคิดเห็นบน Hacker News
  • มีคนทำ TV Explorer ที่เล่นสตรีม HLS ที่ช่องต่าง ๆ เผยแพร่ไว้ได้โดยตรงในเบราว์เซอร์ โดยไม่ต้องอ้อมผ่านวิธีอื่น ใช้รายการสาธารณะบน GitHub ที่มีช่องฟรีมากกว่า 10,000 ช่อง
    https://tvexplorer.live

    • ลื่นและเบาอย่างน่าทึ่ง ตอบสนองแทบจะทันที และปุ่มย้อนกลับก็ทำงานถูกต้อง มีป็อปอัปซับไตเติลบางส่วนซ้อนทับกับองค์ประกอบบนหน้าจอ แต่แม้บนเดสก์ท็อปธรรมดา การเปลี่ยนช่องก็เร็ว พอ ๆ กับสมัยหมุนช่องยุคอนาล็อก NTSC
      สงสัยว่าบริการทีวีอื่น ๆ ทำอะไรที่ที่นี่ไม่ได้ทำ
    • โดยเฉพาะถ้าดูช่องญี่ปุ่น ดูเหมือนฝั่ง https://tv.garden/ จะมี ช่องมากกว่า
    • โหลดเร็วมากแม้บนมือถือ และดูช่องจากทั่วโลกได้ น่าจะ คู่ควรกับการนำไปเขียนแนะนำแยกต่างหาก
    • อยากให้มีออกมาเป็น ปลั๊กอิน Jellyfin
    • ดูเหมือนเป็น เว็บ IPTV ที่สมบูรณ์ที่สุด เท่าที่เคยเห็นมา
  • สถานการณ์ที่บอตต้องเปิด headless browser ด้วยโปรไฟล์ใหม่ทุกครั้งมันไร้สาระมาก Cloudflare กันบอตไม่ได้ แต่กลับทำให้ทั้งสองฝ่ายเปลืองทรัพยากร แถมเหมือนส่ง ประวัติการเข้าชมและรหัสผ่าน ให้ NSA อยากกลับไปใช้อินเทอร์เน็ตแบบเดิม

  • คำอธิบายบอกว่า “สร้างขึ้นเพราะไม่มี Chromecast หรือ AirPlay เลยส่งวิดีโอบนเว็บจากแล็ปท็อปไปทีวีไม่ได้” แต่ ดูเหมือน Claude เป็นคนทำ

    • ใช่ ได้ความช่วยเหลือจาก Claude และผมก็ไม่ใช่ผู้เชี่ยวชาญ DLNA หรือ FFMPEG แต่สิ่งสำคัญคือมันแก้ปัญหาที่ผมเจออยู่ได้ ถ้าแก้ปัญหาของคนอื่นได้ด้วยก็ยิ่งดี
    • จะพูดก็ได้ว่าคอมไพเลอร์สร้างมันขึ้นมาโดยใช้ไลบรารีของ Google และที่อื่น ๆ จนกว่า Claude จะพ่น machine code ที่นำไปแจกจ่ายได้โดยตรง มันก็เป็นแค่ ชั้นตัวกลางอีกชั้นหนึ่ง ระหว่างเจตนาของมนุษย์กับผลลัพธ์สุดท้าย
  • เคยเข้าใจว่าแก่นของ Turnstile คือการตรวจจับ headless browser เพื่อให้เลี่ยงได้ยาก เลยสงสัยว่าการแค่เลียนแบบการคลิกเครื่องหมายถูกจะผ่านได้จริงหรือ

    • Turnstile คล้ายเครื่องมือที่ขายความรู้สึกปลอดภัยแบบคลุมเครือให้ผู้ดูแลเว็บ บล็อกผู้ใช้ Tor ที่ปิด JavaScript และชักจูงให้ส่งสำเนาทราฟฟิกทั้งหมดไปให้ Cloudflare
      ดูเหมือนสิ่งที่สำคัญกว่าความปลอดภัยจริงคือความปลอดภัยปลอม ๆ ที่ Cloudflare ใช้ จำนวนผู้ใช้ที่ถูกบล็อก ซึ่งนับรวมทั้งคนและบอตแบบไม่แยกแยะ ไปทำการตลาด
    • ถ้าเลียนแบบอีเวนต์ที่เหมาะสมได้ หากไม่มีการตรวจจับแพลตฟอร์ม ก็แยก headless browser ออกจากเบราว์เซอร์จริงได้ยาก อย่างไรก็ตาม การมองหา software renderer บน Linux ไม่ใช่เรื่องยาก ถ้าการเลี่ยงแบบนี้ดำเนินต่อไป ก็เป็นไปได้ว่าจะบังคับผู้ใช้ Linux ให้ยืนยันตัวตนเพิ่มอย่างน้อยหนึ่งขั้น
      ช่องทำเครื่องหมายเป็นเพียงส่วนหนึ่งเท่านั้น ก่อนถึงจุดนั้น ระบบจะสังเกตพฤติกรรมทั้งหมดของเบราว์เซอร์และการตอบสนองต่ออีเวนต์ แล้วตัดสินใจว่าจะให้ยืนยันเพิ่มหรือไม่ตาม ความเป็นไปได้ที่จะเป็นบอต
    • ไม่ได้แค่เลียนแบบการคลิกช่องทำเครื่องหมาย แต่ยังปลอม คุณสมบัติต่าง ๆ ของเบราว์เซอร์ ด้วย ถ้าเป็น headless browser ทั่วไปก็น่าจะถูกตรวจพบสูง
    • ต่อให้มีระบบป้องกันมูลค่าหลายล้านดอลลาร์ ผู้คนก็ทำอัตโนมัติใน WoW มานานด้วยวิธีอย่างการติดอุปกรณ์ต่อพ่วงกับพัดลมที่สั่นด้วยเทป การทำอัตโนมัติด้วย headless browser ก็เหมือนการโกงในเกม FPS คือ ฝ่ายโจมตีเป็นฝ่ายกุมความได้เปรียบ และถ้ามีเวลาและเงินมากพอ สุดท้ายก็ชนะได้
    • ถ้าสร้างเบราว์เซอร์ให้ผ่านการตรวจอื่น ๆ ทั้งหมดที่ทำงานอยู่เบื้องหลังได้ สิ่งสุดท้ายที่เหลือก็มีแค่ การคลิกเครื่องหมายถูก
  • ปกติเครื่องมือสำหรับละเมิดลิขสิทธิ์อย่างน้อยก็ยังเหลือช่องให้ปฏิเสธได้อย่างน่าเชื่อถือบ้าง แต่ที่นี่กลับโฆษณาว่าช่วยสตรีมได้แม้กระทั่ง หนังฟอร์มยักษ์ทุนสร้าง 250 ล้านดอลลาร์ที่จะเข้าฉายสุดสัปดาห์นี้

    • คิดว่าโครงสร้างคือค้นหาหนังจากแหล่งที่ตั้งไว้ และถ้าไม่เจอก็คืนค่า “ไม่พบ” Stremio ก็เป็นแอปถูกกฎหมาย แต่ถ้าเพิ่มปลั๊กอิน Torrentio ที่ผิดกฎหมาย ก็ละเมิดลิขสิทธิ์สื่อได้โดยอัตโนมัติ ทำให้การพัฒนาหลักทำแบบสาธารณะได้
      อีมูเลเตอร์ Azahar กับฟอร์กผิดกฎหมาย Azahar Plus ที่ถอดรหัสเกมอัตโนมัติก็คล้ายกัน แต่พอกลับไปดูอีกที โปรเจกต์นี้ ฝังเว็บสตรีมมิงผิดกฎหมาย ไว้ในตัว
    • อินเทอร์เฟซแสดง หนังยอดนิยมขณะนี้ จาก https://www.themoviedb.org/
    • ตอนแรกดูเหมือนเป็นเครื่องมือส่งวิดีโอจากเว็บไซต์ที่เข้าถึงได้อยู่แล้ว จากแล็ปท็อปไปทีวี แต่คำอธิบายแบบเหมือน AI สร้างว่า “เว็บไซต์แบบสุ่ม” กับตัวเลือกคีย์ TVDB API ทำให้ สับสนว่าเป้าหมายจริงคืออะไร
    • อาจเป็นการเล่นแค่ ตัวอย่างภาพยนตร์ ไม่ใช่หนังจริงก็ได้
  • ใช้งานได้ทันทีบนทีวี Samsung ธรรมดาที่อายุมากกว่า 15 ปี สงสัยว่าทางที่ดีที่สุดคือ เขียนฟังก์ชันค้นหาเอง เพื่อวิเคราะห์หน้า JSON ทั้งหมดอย่าง https://vsembed.ru/movies/latest/page-1.json หรือไม่

  • คำอธิบายขาดบริบท เลยเข้าใจยากว่าเป็นเครื่องมือสำหรับอะไร และ ใช้ละเมิดลิขสิทธิ์หรือไม่

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

  • ในเวอร์ชัน Docker บน macOS อาจ หา TV ไม่เจอ

    • หากจะใช้ UPnP ผ่าน virtual machine ที่ Docker ต้องใช้บน macOS มีความเป็นไปได้สูงว่าต้องตั้งค่าให้ เปิดเผยเครือข่ายที่เกี่ยวข้องออกไปภายนอก
  • พออ่านส่วนที่บอกว่า “รัน headless Chrome ที่ซ่อนการทำอัตโนมัติด้วย fingerprint แบบสุ่มและสคริปต์ stealth” ก็ หมดความเชื่อถือ

    • ทำงานด้าน browser fingerprint แล้วลองดูใน repository ดูเหมือนจะแก้แค่ navigator, Audio API และ Canvas API เท่านั้น เป็นระดับพื้นฐานมาก จึง มีโอกาสถูกตรวจจับได้ง่าย