8 điểm bởi GN⁺ 1 ngày trước | 2 bình luận | Chia sẻ qua WhatsApp
  • 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

    • Mượt, nhẹ và phản hồi gần như tức thì đến mức đáng ngạc nhiên, nút quay lại cũng hoạt động đúng. Popup phụ đề có chồng lên một số thành phần màn hình, nhưng ngay cả trên desktop bình thường thì chuyển kênh nhanh gần như thời kỳ xoay kênh TV analog NTSC
      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
    • Đặc biệt nếu xem các kênh Nhật thì bên https://tv.garden/ có vẻ nhiều kênh hơn
    • Tải rất nhanh cả trên di động và có thể xem kênh từ khắp nơi trên thế giới, nên đáng để giới thiệu thành một bài riêng
    • Sẽ hay nếu có dưới dạng plugin Jellyfin
    • Có vẻ là trang IPTV hoàn thiện nhất mà tôi từng thấy đến nay
  • 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

    • Đúng là có nhờ Claude hỗ trợ, và tôi cũng không phải chuyên gia DLNA hay FFMPEG, nhưng điều quan trọng là nó đã giải quyết vấn đề tôi gặp phải. Nếu còn giải quyết được cả vấn đề của người khác thì càng tốt
    • Cũng có thể nói trình biên dịch được tạo ra nhờ thư viện của Google hay nơi khác. Cho đến khi Claude trực tiếp xuất ra mã máy có thể phát hành được thì nó chỉ là một lớp trung gian nữa nằm giữa ý định của con người và sản phẩm cuối cùng
  • 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

    • Turnstile gần giống một công cụ bán cho quản trị viên website cảm giác an toàn mơ hồ, chặn người dùng Tor tắt JavaScript, và khiến họ cung cấp bản sao của toàn bộ lưu lượng cho Cloudflare hơn là một công cụ bảo mật thực sự
      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
    • Nếu giả lập đúng các sự kiện thì, nếu không có phát hiện ở cấp nền tảng, rất khó phân biệt trình duyệt headless với trình duyệt thật. Tuy vậy việc tìm bộ render phần mềm trên Linux không khó, nên nếu kiểu lách này tiếp diễn thì có thể họ sẽ ép người dùng Linux làm thêm một hoặc nhiều bước xác thực
      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
    • Không chỉ giả lập cú nhấp vào dấu check mà còn giả mạo nhiều thuộc tính trình duyệt. Nếu là trình duyệt headless thông thường thì khả năng cao sẽ bị phát hiện
    • Dù có hệ thống phòng thủ trị giá hàng triệu USD, người ta vẫn đã tự động hóa WoW suốt thời gian dài bằng kiểu dán thiết bị ngoại vi vào quạt đang rung. Tự động hóa bằng trình duyệt headless cũng giống gian lận FPS, nghĩa là bên tấn công nắm thế chủ động và nếu có đủ thời gian lẫn tiền thì cuối cùng vẫn có thể thắng
    • Nếu có thể tạo một trình duyệt vượt qua mọi kiểm tra khác chạy ở nền, thì thứ còn lại cuối cùng chỉ là nhấp vào dấu check
  • 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

    • Tôi tưởng cấu trúc của nó là tìm phim trong các nguồn đã cấu hình và nếu không có thì trả về “không tìm thấy”. Stremio cũng là ứng dụng hợp pháp, nhưng nếu thêm plugin Torrentio bất hợp pháp thì có thể tự động vi phạm bản quyền media, nên phần phát triển cốt lõi vẫn có thể diễn ra công khai
      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
    • Giao diện đang hiển thị các phim hiện phổ biến từ https://www.themoviedb.org/
    • Ban đầu nó trông giống công cụ truyền video từ những website đã có thể truy cập sẵn từ laptop lên TV. Nhưng cách mô tả kiểu sản phẩm AI là “website ngẫu nhiên” cùng tùy chọn khóa API TVDB khiến tôi bối rối về trọng tâm thực sự của nó
    • Cũng có thể nó không phát phim thật mà chỉ phát trailer
  • 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

    • Đây là công cụ dòng lệnh: khi chọn phim, nó tìm video khớp trên các trang stream, transcoding, chèn phụ đề theo thời gian thực rồi ra lệnh cho TV phát
    • Nó chỉ phát các luồng mà bạn vốn đã truy cập được, cũng không bẻ khóa mã hóa, nên không rõ nó giúp cho vi phạm bản quyền theo cách nào
    • Đây là một cách truyền thay thế để trích xuất video stream từ website hay dịch vụ rồi gửi lên TV
    • Các dịch vụ lớn hiện có sẵn đã hỗ trợ cast màn hình, nên tôi tự hỏi rốt cuộc mục đích thực tế có phải là các luồng thể thao lậu kiểu đó 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

    • Để dùng UPnP qua máy ảo mà Docker cần trên macOS, có khả năng bạn sẽ phải cấu hình để phơi bày mạng liên quan ra bên ngoài
  • 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”

    • Tôi làm việc trong lĩnh vực browser fingerprinting nên đã xem kho mã, và có vẻ nó chỉ sửa 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