diff options
| author | Christophe Besson <cbesson@gmail.com> | 2026-08-21 13:52:11 +0200 |
|---|---|---|
| committer | Christophe Besson <cbesson@gmail.com> | 2026-08-21 13:52:11 +0200 |
| commit | 8730281d739d9ed1d6f2d366772582eea8ba0294 (patch) | |
| tree | 4df2f3c8d42dc17147bcdec23109aa9c0f1b5b35 /packages/meshbay-hub/src/meshbay_hub/static/locales | |
| parent | ae52b69b14a6997d01aad66f49fbea7b5ca2dfe6 (diff) | |
| download | meshbay-8730281d739d9ed1d6f2d366772582eea8ba0294.tar.gz | |
feat: LAN Wi-Fi casting to Chromecast via local HTTP relay
Re-serve decrypted fMP4 video over HTTP on the LAN so a Chromecast can
play the stream. The relay runs in the Electron main process — same trust
boundary as downloads and MSE playback.
- cast-relay.js: HTTP server with BoxAccumulator (reassembles WebRTC
chunks into moof+mdat pairs), ring buffer, backpressure, finish() for
clean end-of-stream, fixed port range 19550-19553
- cast-chromecast.js: mDNS discovery (bonjour-service) + CASTV2 protocol
(castv2-client), connect/reload/disconnect lifecycle
- Seek-aware: relay restarts on every seek, Chromecast reloads new URL;
generation counter prevents stale async errors from killing active
restarts; landingPlayheadRef suppresses programmatic seeking events
- Device picker in video top bar with scan, device selection, copy-URL
fallback, and cast status indicator
- IPC bridge (main/preload/platform) for start/push/stop/finish/status/
discover/chromecastConnect/chromecastReload/chromecastDisconnect
- Phase 3 design doc for DLNA/Smart TV in docs/cast-smart-tv.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'packages/meshbay-hub/src/meshbay_hub/static/locales')
10 files changed, 80 insertions, 0 deletions
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js index ec56f03..e309834 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/de.js @@ -154,6 +154,14 @@ export default { 'video.err_transport': 'Transport nicht verbunden', 'video.err_mse': 'Codec wird für das Streaming nicht unterstützt: {codec}', + // LAN-Cast + 'cast.start': 'Auf Gerät übertragen', + 'cast.stop': 'Übertragung beenden', + 'cast.copy_url': 'Stream-URL kopieren', + 'cast.copied': 'URL kopiert', + 'cast.scanning': 'Suche nach Geräten…', + 'cast.no_devices': 'Keine Geräte gefunden', + // Settings 'settings.title': 'Einstellungen', 'settings.coming_soon': 'Demnächst verfügbar.', diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js index a8392c7..9a5058e 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js @@ -152,6 +152,14 @@ export default { 'video.err_transport': 'Transport not connected', 'video.err_mse': 'Codec not supported for streaming: {codec}', + // LAN cast + 'cast.start': 'Cast to device', + 'cast.stop': 'Stop casting', + 'cast.copy_url': 'Copy stream URL', + 'cast.copied': 'URL copied', + 'cast.scanning': 'Scanning for devices…', + 'cast.no_devices': 'No devices found', + // Settings 'settings.title': 'Settings', 'settings.coming_soon': 'Coming soon.', diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js index 5afb3c3..5a95347 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/es.js @@ -152,6 +152,14 @@ export default { 'video.err_transport': 'Transporte no conectado', 'video.err_mse': 'Códec no compatible con la reproducción en continuo: {codec}', + // LAN cast + 'cast.start': 'Enviar a dispositivo', + 'cast.stop': 'Detener envío', + 'cast.copy_url': 'Copiar URL del stream', + 'cast.copied': 'URL copiada', + 'cast.scanning': 'Buscando dispositivos…', + 'cast.no_devices': 'No se encontraron dispositivos', + // Settings 'settings.title': 'Ajustes', 'settings.coming_soon': 'Próximamente.', diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js index 9eb2f30..4139fc9 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/fr.js @@ -153,6 +153,14 @@ export default { 'video.err_transport': 'Transport non connecté', 'video.err_mse': 'Codec non pris en charge pour la diffusion : {codec}', + // LAN cast + 'cast.start': 'Diffuser sur un appareil', + 'cast.stop': 'Arrêter la diffusion', + 'cast.copy_url': "Copier l'URL du flux", + 'cast.copied': 'URL copiée', + 'cast.scanning': "Recherche d'appareils…", + 'cast.no_devices': 'Aucun appareil trouvé', + // Settings 'settings.title': 'Paramètres', 'settings.coming_soon': 'Bientôt disponible.', diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js index 5653ec0..531c8f7 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/it.js @@ -153,6 +153,14 @@ export default { 'video.err_transport': 'Trasporto non connesso', 'video.err_mse': 'Codec non supportato per lo streaming: {codec}', + // LAN cast + 'cast.start': 'Trasmetti al dispositivo', + 'cast.stop': 'Interrompi trasmissione', + 'cast.copy_url': 'Copia URL dello stream', + 'cast.copied': 'URL copiato', + 'cast.scanning': 'Ricerca dispositivi…', + 'cast.no_devices': 'Nessun dispositivo trovato', + // Settings 'settings.title': 'Impostazioni', 'settings.coming_soon': 'Prossimamente.', diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js index aa3899d..1a68827 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js @@ -150,6 +150,14 @@ export default { 'video.err_transport': 'トランスポートが接続されていません', 'video.err_mse': 'ストリーミング再生に対応していないコーデックです:{codec}', + // LAN cast + 'cast.start': 'デバイスにキャスト', + 'cast.stop': 'キャストを停止', + 'cast.copy_url': 'ストリームURLをコピー', + 'cast.copied': 'URLをコピーしました', + 'cast.scanning': 'デバイスを検索中…', + 'cast.no_devices': 'デバイスが見つかりません', + // Settings 'settings.title': '設定', 'settings.coming_soon': '近日公開。', diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js index c5841dd..d0c9649 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/nl.js @@ -154,6 +154,14 @@ export default { 'video.err_transport': 'Transport niet verbonden', 'video.err_mse': 'Codec wordt niet ondersteund voor streamen: {codec}', + // LAN cast + 'cast.start': 'Naar apparaat casten', + 'cast.stop': 'Casten stoppen', + 'cast.copy_url': 'Stream-URL kopiëren', + 'cast.copied': 'URL gekopieerd', + 'cast.scanning': 'Apparaten zoeken…', + 'cast.no_devices': 'Geen apparaten gevonden', + // Settings 'settings.title': 'Instellingen', 'settings.coming_soon': 'Binnenkort beschikbaar.', diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js index eec144b..630548b 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/pl.js @@ -159,6 +159,14 @@ export default { 'video.err_transport': 'Transport nie jest połączony', 'video.err_mse': 'Kodek nieobsługiwany przy odtwarzaniu strumieniowym: {codec}', + // LAN cast + 'cast.start': 'Przesyłaj na urządzenie', + 'cast.stop': 'Zatrzymaj przesyłanie', + 'cast.copy_url': 'Kopiuj URL strumienia', + 'cast.copied': 'URL skopiowany', + 'cast.scanning': 'Wyszukiwanie urządzeń…', + 'cast.no_devices': 'Nie znaleziono urządzeń', + // Settings 'settings.title': 'Ustawienia', 'settings.coming_soon': 'Wkrótce.', diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js index ce2adf2..9a6809a 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/pt-BR.js @@ -154,6 +154,14 @@ export default { 'video.err_transport': 'Transporte não conectado', 'video.err_mse': 'Codec sem suporte para transmissão: {codec}', + // LAN cast + 'cast.start': 'Transmitir para dispositivo', + 'cast.stop': 'Parar transmissão', + 'cast.copy_url': 'Copiar URL do stream', + 'cast.copied': 'URL copiada', + 'cast.scanning': 'Procurando dispositivos…', + 'cast.no_devices': 'Nenhum dispositivo encontrado', + // Settings 'settings.title': 'Configurações', 'settings.coming_soon': 'Em breve.', diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js index f249835..549b77e 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/zh-CN.js @@ -147,6 +147,14 @@ export default { 'video.err_transport': '传输未连接', 'video.err_mse': '该编解码器不支持流式播放:{codec}', + // LAN cast + 'cast.start': '投射到设备', + 'cast.stop': '停止投射', + 'cast.copy_url': '复制流媒体链接', + 'cast.copied': '链接已复制', + 'cast.scanning': '正在搜索设备…', + 'cast.no_devices': '未找到设备', + // Settings 'settings.title': '设置', 'settings.coming_soon': '即将推出。', |