samuelmaddock/metastream

Implement Metastream as a web app

samuelmaddock opened this issue · 2 comments

Metastream is in the process of deprecating the Electron desktop app in favor of a web app with a required browser extension. See post on Patreon for details regarding reasons for this change.

In-development preview available at https://app.getmetastream.com/

NVIDIA Share_2019-04-22_00-26-20S625

NVIDIA Share_2019-04-21_23-33-10McKL

Todo

  • Compile Metastream for browsers
  • Host using GitHub pages
  • Publish browser extension on Chrome Web Store
  • Publish browser extension on Firefox Add-on Store
  • Re-implement subset of Electron's <webview> features with web extension messaging
    • This is already mostly functioning, needs some more work around history state management
  • Re-implement user identities with libsodium
  • Implement WebRTC signaling server and client for multiplayer sessions
  • Authenticate peers
  • Host backend services
    • Dockerize signal server
    • LetsEncrypt certs for wss://
    • Setup WebRTC TURN server for relaying failed P2P connections (fixes #74)
  • Add support for site-specific scripts in extension
  • Cache bust service worker offline content
  • Network error handling
    • Implement exponential backoff for host reconnecting to signal server
  • App update button
  • Install to desktop main menu button
  • Update git documentation, merge webapp branch
  • Support pasting session URL into join page
  • Change /lobby/:id routes to /join/:id
  • BUG: Chat box extends past bounds in Firefox
  • Public network testing
  • Change website download buttons to launch web app
  • Publish final update to Electron app with deprecation notice
  • Update browser extension description on stores

Post-launch

  • Show error when session already exists in another tab
  • Bind global media playback hotkeys
  • Request current tab URL in Metastream when clicking extension badge
  • Redesign title bar? 🤔
  • Add manual method of connecting to peer in case signal server is down 🤔

Features gained

Features lost

  • Discord Rich Presence support
    • Includes custom avatars via Discord
  • Distributed signalling solution (swarm-peer-server) for WebRTC connections
  • Direct IP connections
    • Will likely be replaced by a dedicated server solution eventually
  • Automatic fullscreening of videos that don't fill the app's viewport
    • I have some ideas for this, but it won't fully work for videos nested in an <iframe>
cedws commented

I can see this architecture being less flexible, but overall it seems like the right way to go. Massive thanks for your hard work that's going into this. I promise I'll send a few bucks your way at some point.

17/24... We are getting there slowly but surely! Well in fact, it's been going lightning speed since you started! So it's quickly but surely!