- 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 ความคิดเห็น
โอ้ แล้วคอมเมนต์ด้านล่างที่เป็นอันนี้ https://tvexplorer.live/channel/EBS1TV.kr.SD/country/KR สะดวกมากเลยครับ ฮ่าๆ
ดูเหมือนว่าในเกาหลีน่าจะถูกบล็อกไว้ แต่ถ้าอยู่ต่างประเทศจะดูได้เลยไหมนะ?
ความคิดเห็นบน Hacker News
มีคนทำ TV Explorer ที่เล่นสตรีม HLS ที่ช่องต่าง ๆ เผยแพร่ไว้ได้โดยตรงในเบราว์เซอร์ โดยไม่ต้องอ้อมผ่านวิธีอื่น ใช้รายการสาธารณะบน GitHub ที่มีช่องฟรีมากกว่า 10,000 ช่อง
https://tvexplorer.live
สงสัยว่าบริการทีวีอื่น ๆ ทำอะไรที่ที่นี่ไม่ได้ทำ
สถานการณ์ที่บอตต้องเปิด headless browser ด้วยโปรไฟล์ใหม่ทุกครั้งมันไร้สาระมาก Cloudflare กันบอตไม่ได้ แต่กลับทำให้ทั้งสองฝ่ายเปลืองทรัพยากร แถมเหมือนส่ง ประวัติการเข้าชมและรหัสผ่าน ให้ NSA อยากกลับไปใช้อินเทอร์เน็ตแบบเดิม
คำอธิบายบอกว่า “สร้างขึ้นเพราะไม่มี Chromecast หรือ AirPlay เลยส่งวิดีโอบนเว็บจากแล็ปท็อปไปทีวีไม่ได้” แต่ ดูเหมือน Claude เป็นคนทำ
เคยเข้าใจว่าแก่นของ Turnstile คือการตรวจจับ headless browser เพื่อให้เลี่ยงได้ยาก เลยสงสัยว่าการแค่เลียนแบบการคลิกเครื่องหมายถูกจะผ่านได้จริงหรือ
ดูเหมือนสิ่งที่สำคัญกว่าความปลอดภัยจริงคือความปลอดภัยปลอม ๆ ที่ Cloudflare ใช้ จำนวนผู้ใช้ที่ถูกบล็อก ซึ่งนับรวมทั้งคนและบอตแบบไม่แยกแยะ ไปทำการตลาด
ช่องทำเครื่องหมายเป็นเพียงส่วนหนึ่งเท่านั้น ก่อนถึงจุดนั้น ระบบจะสังเกตพฤติกรรมทั้งหมดของเบราว์เซอร์และการตอบสนองต่ออีเวนต์ แล้วตัดสินใจว่าจะให้ยืนยันเพิ่มหรือไม่ตาม ความเป็นไปได้ที่จะเป็นบอต
ปกติเครื่องมือสำหรับละเมิดลิขสิทธิ์อย่างน้อยก็ยังเหลือช่องให้ปฏิเสธได้อย่างน่าเชื่อถือบ้าง แต่ที่นี่กลับโฆษณาว่าช่วยสตรีมได้แม้กระทั่ง หนังฟอร์มยักษ์ทุนสร้าง 250 ล้านดอลลาร์ที่จะเข้าฉายสุดสัปดาห์นี้
อีมูเลเตอร์ Azahar กับฟอร์กผิดกฎหมาย Azahar Plus ที่ถอดรหัสเกมอัตโนมัติก็คล้ายกัน แต่พอกลับไปดูอีกที โปรเจกต์นี้ ฝังเว็บสตรีมมิงผิดกฎหมาย ไว้ในตัว
ใช้งานได้ทันทีบนทีวี Samsung ธรรมดาที่อายุมากกว่า 15 ปี สงสัยว่าทางที่ดีที่สุดคือ เขียนฟังก์ชันค้นหาเอง เพื่อวิเคราะห์หน้า JSON ทั้งหมดอย่าง https://vsembed.ru/movies/latest/page-1.json หรือไม่
คำอธิบายขาดบริบท เลยเข้าใจยากว่าเป็นเครื่องมือสำหรับอะไร และ ใช้ละเมิดลิขสิทธิ์หรือไม่
ความยุ่งยาก พอ ๆ กับการใช้ทอร์เรนต์ เลยไม่รู้ว่าจะใช้ทำไม
ในเวอร์ชัน Docker บน macOS อาจ หา TV ไม่เจอ
พออ่านส่วนที่บอกว่า “รัน headless Chrome ที่ซ่อนการทำอัตโนมัติด้วย fingerprint แบบสุ่มและสคริปต์ stealth” ก็ หมดความเชื่อถือ
navigator, Audio API และ Canvas API เท่านั้น เป็นระดับพื้นฐานมาก จึง มีโอกาสถูกตรวจจับได้ง่าย