MultiStreamVlc is a cross-platform desktop application built with Avalonia 12 and LibVLCSharp that displays and controls multiple video streams (HLS/m3u8) simultaneously. Originally created to watch multiple streams at once during collab streams.
- Dashboard: Central hub for managing all streams. Add, remove, and control streams from one window.
- Floating Windows: Pop out any stream into its own resizable window with volume control.
- Grid View: 2x3 grid displaying up to 6 pinned streams simultaneously.
- Grid Slot Selector: Assign streams to specific grid slots (1-6) via dropdown — freely mix and match which streams appear in the grid.
- Quick-Create From Clipboard: Instantly create a new stream from a URL copied to your clipboard.
- Companion Listener: Built-in HTTP server receives streams from the MultiStreamVlc-Companion Firefox extension automatically.
- Granular Audio Control: Individual volume sliders on the dashboard and in each floating window.
- Independent Playback: Play, Stop, and Reconnect each stream independently.
- URL Editing: Change any stream's URL on the fly.
- Cross-Platform: Runs on Linux and Windows (via Avalonia 12 / .NET 8.0).
MultiStreamVlc Companion — Detects .m3u8 stream URLs and sends them directly to the app via the companion listener. Right-click any page → "Send to MultiStreamVlc" (Ctrl+Shift+S). Available for Firefox and Chromium. See browser-extensions/README.md for full details.
M3U8 Sniffer — Archived predecessor. Captures .m3u8 URLs to clipboard via right-click (Ctrl+Shift+L). Does not send to the desktop app. (Firefox Add-ons)
sudo pacman -S dotnet-sdk-8.0 vlc- Windows 10/11
- .NET 8.0 SDK (or Runtime)
VLC binaries are provided automatically via the VideoLAN.LibVLC.Windows NuGet package.
On Wayland systems, the app runs under XWayland for video embedding compatibility (LibVLCSharp's VideoView requires X11 window handles). This is handled automatically — no manual configuration needed.
-
Clone the repository:
git clone https://github.com/mgenc2077/MultiStreamVlc.git cd MultiStreamVlc -
Restore NuGet Packages:
dotnet restore
-
Run:
dotnet run
- Dashboard: The main window. Add streams with "New Stream" or "Quick-Create From Clipboard", then set URLs and control playback.
- Grid Slot Selector: Each stream has a "Grid:" dropdown. Select a slot number (1-6) to pin the stream to that grid position, or select "—" to unpin. The grid window opens automatically when the first stream is pinned.
- Floating Windows: Click "Float" to pop out a stream into its own window. If the stream was in the grid, it is automatically unpinned.
- Change URL: Click "URL" for a popup to update the stream URL.
- Volume: Use the volume slider on each dashboard row or in each floating window.
- Reconnecting: If a stream stalls or disconnects, click "Reconnect".
- Companion Listener: Click "Settings" to configure the HTTP listener (host and port). The companion Firefox extension sends stream URLs to this endpoint.
The app listens for POST requests from the MultiStreamVlc-Companion Firefox extension.
Endpoint: POST http://{host}:{port}/
Request:
{"name": "Stream Name", "url": "https://example.com/stream.m3u8"}Responses:
200—{"status":"ok"}— Stream added to dashboard400—{"error":"..."}— Invalid JSON or unsupported URL405— Method not allowed (non-POST)
Configure host and port via the Settings button on the dashboard. Port defaults to a random number in the 49152-65535 range.
- .NET 8.0 — target framework
- Avalonia 12 — cross-platform UI framework
- LibVLCSharp 3.9 — VLC media player bindings
- LibVLCSharp.Avalonia —
VideoViewcontrol for embedding VLC video in Avalonia - System.Net.HttpListener — built-in HTTP server for companion extension

