- Castor là một công cụ terminal tìm luồng video thực từ trang web hoặc URL stream trực tiếp, chuyển đổi cho phù hợp với TV và truyền theo thời gian thực với chất lượng gốc mà không cần phản chiếu màn hình
- Công cụ quan sát lưu lượng mạng bằng Chrome headless và Chrome DevTools Protocol, trích xuất stream sau khi thực hiện nhấp trang, vào iframe lớn nhất và nhấp lại; tuy nhiên có thể không hoạt động trên các trang không cho phép tự động phát
- Có thể dùng với smart TV hỗ trợ DLNA/UPnP và Kodi, VLC, Plex; hỗ trợ Chromecast đã được triển khai nhưng vẫn còn thử nghiệm và chưa được kiểm chứng
- Video H.264 có thể phát được sẽ được truyền không cần mã hóa lại; khi cần, công cụ chuyển đổi bằng bộ mã hóa phần cứng hoặc
libx264, và cũng có thể chèn phụ đề được tạo bằng whisper vào video
- Không cung cấp video, catalog, nguồn hay vượt qua DRM; được thiết kế để chỉ truyền các trang và stream do người dùng tự chỉ định và có quyền sử dụng
Truyền video web thành stream thực
- Castor thay thế việc phản chiếu màn hình vốn có độ trễ và giảm độ phân giải, cũng như các smart TV không thể truyền trực tiếp video web tùy ý, bằng cách truyền stream video thực ở chất lượng đầy đủ
- Khi nhập trang web hoặc URL stream trực tiếp, công cụ sẽ tìm video, trích xuất stream, rồi chuyển mã phù hợp với TV và truyền theo thời gian thực
- Có thể tra cứu IMDB/TMDB ID từ nguồn do người dùng cấu hình hoặc chèn phụ đề tự động tạo vào video
- Chạy
castor cast để duyệt tác phẩm và truyền từ trình duyệt tương tác trên terminal
Cách trích xuất stream và giới hạn
- Chạy Chrome headless và quan sát lưu lượng mạng bằng Chrome DevTools Protocol để tìm stream
- Thực hiện một pipeline thao tác ngắn để bắt đầu phát
- Nhấp vào trang
- Di chuyển vào iframe lớn nhất
- Nhấp lại như thao tác thay thế
- Hoạt động trên các trang cho phép tự động phát và không hỗ trợ mọi trang web
Cài đặt và yêu cầu chạy
- Cách khuyến nghị là dùng binary native chạy trong cùng mạng với TV
- Môi trường chạy cần có các công cụ sau trong
PATH
- Chrome hoặc Chromium: trích xuất stream headless
ffmpeg: chuyển mã
ffprobe: phát hiện định dạng media
- Trên macOS có thể cài bằng Homebrew
brew install --cask stupside/tap/castor
- Build từ source cần Go 1.26+ và CMake
- Binding whisper.cpp dùng cgo và liên kết với
libwhisper.a được build cục bộ
- Vì cần
replace cục bộ và thư viện tĩnh đã build sẵn, go install sẽ không hoạt động
git clone --recurse-submodules https://github.com/stupside/castor.git
cd castor
make
Luồng sử dụng cơ bản
- Tìm tên TV bằng
castor scan, rồi chỉ định chính xác tên và loại thiết bị trong mục device của config.yaml
device:
name: "Living Room TV"
type: dlna
- Gửi trang web hoặc URL stream trực tiếp bằng
cast player
castor cast player https://example.com/watch/some-video
- Tìm kiếm tác phẩm tương tác cần khóa TMDB API và nguồn do người dùng cấu hình; có thể xem toàn bộ lệnh và flag bằng
castor --help
Cấu hình và nguồn do người dùng cung cấp
config.yaml được đọc từ thư mục hiện tại hoặc đường dẫn chỉ định bằng --config; mục bắt buộc duy nhất là thiết lập thiết bị đích truyền
- Có giá trị mặc định cho timeout, duyệt tìm, capture, chuyển mã, giao diện mạng và điều hướng Chrome
- Giá trị bí mật có thể được ghi đè bằng
config.local.yaml đã loại khỏi Git, hoặc chỉ định bằng biến môi trường theo dạng CASTOR_SECTION__FIELD
cast movie, cast episode và trình duyệt tương tác sẽ thế ID tác phẩm vào nguồn do người dùng cấu hình
- Bản thân Castor không bao gồm nguồn, catalog hay chức năng tra cứu
- Công cụ thế ID vào
templates do người dùng viết, thêm từng proxies vào phía trước để mở trang, rồi trích xuất stream theo cùng cách như cast player
- Nhiều proxy sẽ được thử theo thứ tự đã chỉ định
sources:
- proxies: ["https://your-source.example"]
templates:
movie: "/embed/movie/{itemID}"
episode: "/embed/tv/{itemID}/{season}-{episode}"
Tìm kiếm TMDB và phụ đề tự động
- Trình duyệt tương tác dùng khóa TMDB API để tìm kiếm tác phẩm
- Có thể lấy khóa tại themoviedb.org
- Các lệnh trực tiếp như
cast movie <id> không cần khóa TMDB
- Phụ đề tự động được tạo bằng cách dùng whisper chuyển lời nói thành văn bản rồi chèn vào video; mặc định bị tắt
- Ngôn ngữ mặc định là tiếng Anh
- Model mặc định là
ggml-tiny.en khoảng 75MB và sẽ được tự động tải xuống
Thiết bị hỗ trợ
- Hỗ trợ TV triển khai profile DLNA/UPnP
MediaRenderer:1
- Samsung đã được kiểm thử; LG, Sony Bravia, Panasonic Viera, Philips, Hisense, TCL, VIZIO, Sharp nằm trong nhóm được hỗ trợ
- Cũng có thể dùng các trình phát mạng như Kodi, VLC, Plex
- Dùng
castor scan để tra cứu thiết bị trong cùng mạng
- Hỗ trợ Chromecast đã được triển khai nhưng còn thử nghiệm và chưa được kiểm thử
Ràng buộc Docker và cấu hình mạng
- Image Docker chỉ dành cho Linux đi kèm Chrome,
ffmpeg, ffprobe
- Trong Docker cần host Linux cùng LAN với TV, và phải dùng
--network host để tìm kiếm multicast SSDP cũng như kết nối tới máy chủ phát của Castor
- Trên macOS và Windows của Docker Desktop,
--network host không kết nối ra LAN
- Container được đặt trong subnet VM nội bộ của Docker Desktop, khiến
scan không tìm thấy thiết bị và truyền cũng thất bại
- Trên macOS và Windows, hãy dùng binary native hoặc bridge một VM Linux vào LAN
- Có thể mount
/config.yaml để cung cấp cấu hình, và bảo toàn model whisper được tự động tải xuống trong volume
- Dùng tag release thay vì
latest để cố định phiên bản
Media passthrough và mã hóa
- Nếu TV đã có thể phát video H.264 ở profile và level được phép, công cụ dùng sao chép stream để giảm mức dùng CPU gần như về 0
- Nếu TV từ chối codec hoặc cần chèn phụ đề, video sẽ được mã hóa lại
- Ưu tiên bộ mã hóa H.264 phần cứng thực sự hoạt động, như VA-API trên Linux hoặc VideoToolbox trong binary native macOS
- Nếu không dùng được thì thay bằng
libx264 phần mềm
- Để dùng VA-API của GPU Intel trong container Docker, cần
--device /dev/dri; chỉ --network host không làm GPU lộ ra
Mục đích sử dụng và giới hạn
- Castor là công cụ truyền đa dụng, không phải dịch vụ gắn với một trang cụ thể
- Không host hay đóng gói video, catalog, nguồn; chỉ xử lý các trang, stream và nguồn mà người dùng chỉ định và có quyền sử dụng
- Không giải mã hay vượt qua DRM, và không thể truyền dịch vụ được bảo vệ bằng DRM
- Người dùng chịu trách nhiệm tuân thủ điều khoản sử dụng của trang web và luật địa phương; công cụ được cung cấp nguyên trạng cho mục đích cá nhân và giáo dục hợp pháp
2 bình luận
Và đường dẫn này ở bình luận bên dưới nữa: https://tvexplorer.live/channel/EBS1TV.kr.SD/country/KR tiện thật đấy. Haha.
Có vẻ ở Hàn Quốc thì bị chặn, không biết ở nước ngoài có xem được ngay không nhỉ?
Ý kiến trên Hacker News
Đã tạo TV Explorer, công cụ phát trực tiếp trong trình duyệt các luồng HLS mà từng kênh công khai, không cần vòng tránh riêng. Nó tận dụng danh sách GitHub công khai chứa hơn 10.000 kênh miễn phí
https://tvexplorer.live
Tò mò không biết các dịch vụ TV khác còn làm gì mà chỗ này lại không làm
Việc bot lúc nào cũng phải chạy trình duyệt headless với hồ sơ mới mỗi lần là vô lý. Cloudflare không chặn được bot mà chỉ lãng phí tài nguyên của cả hai bên, lại còn như thể giao nhật ký truy cập và mật khẩu cho NSA, nên tôi muốn quay lại Internet ngày xưa
Phần mô tả nói rằng “được làm ra vì không có Chromecast hay AirPlay nên không thể truyền video web từ laptop lên TV”, nhưng nó trông như do Claude tạo ra
Tôi tưởng cốt lõi của Turnstile là phát hiện trình duyệt headless để khiến việc vượt qua trở nên khó hơn, nên không rõ liệu chỉ bắt chước thao tác nhấp dấu check mà thật sự qua được hay không
Có vẻ thứ quan trọng hơn bảo mật thực tế là thứ bảo mật giả để Cloudflare dùng số người dùng bị chặn mà họ thống kê không phân biệt người hay bot vào mục đích marketing
Checkbox chỉ là một phần; trước đó họ quan sát toàn bộ hành vi của trình duyệt và phản ứng với sự kiện để quyết định có cần xác thực thêm hay không dựa trên khả năng là bot
Thường thì công cụ vi phạm bản quyền ít nhất cũng để lại chút khả năng chối bỏ hợp lý, nhưng ở đây họ còn khoe là giúp stream cả bom tấn kinh phí 250 triệu USD sẽ ra rạp cuối tuần này
Trình giả lập Azahar và bản fork bất hợp pháp Azahar Plus tự động giải mã game cũng tương tự, nhưng xem lại thì dự án này đang tích hợp sẵn các trang stream lậu
Nó hoạt động ngay lập tức trên chiếc Samsung TV bình thường đã hơn 15 năm tuổi của tôi. Không rõ liệu cách tốt nhất có phải là tự viết chức năng tìm kiếm để phân tích mọi trang JSON như https://vsembed.ru/movies/latest/page-1.json hay không
Phần mô tả thiếu ngữ cảnh nên khó biết đây là công cụ dùng để làm gì, và có phải để vi phạm bản quyền hay không
So với dùng torrent thì công sức bỏ ra cũng tương tự, nên tôi không hiểu lý do để dùng nó
Trên bản Docker của macOS, có thể không tìm thấy TV
Tôi đã mất niềm tin ở đoạn “chạy Chrome headless để che giấu tự động hóa bằng dấu vân tay ngẫu nhiên và stealth script”
navigator, Audio API và Canvas API. Mức đó rất cơ bản nên khả năng cao sẽ dễ bị phát hiện