A lightweight video player built with WPF, GStreamer, and the WPF-UI framework featuring a modern Fluent Design interface.
- Video playback via GStreamer pipeline
- Multiple audio track switching
- Subtitle support with track selection
- Volume control with mute toggle
- Seek with progress bar
- Fullscreen mode (hides taskbar)
- Fluent Design with Mica backdrop (Windows 11)
- Auto-hide controls during playback
All formats supported by GStreamer - including mp4, mkv, avi, mov, wmv, flv, webm and more.
- Windows 10/11
- .NET 10
- GStreamer 1.x (with
d3dvideosinkplugin)
- Download and install GStreamer runtime from the official site
- Make sure to select Complete installation - not Typical
- Add GStreamer to your
PATH:C:\gstreamer\1.0\msvc_x86_64\bin
git clone https://github.com/Ledrunning/TinyPlayer
cd TinyPlayer
dotnet restore
dotnet build
dotnet run --project TinyPlayer.Desktop## Project Structure
TinyPlayer/
├── TinyPlayer.Core/ # GStreamer core library (framework-agnostic)
│ ├── Abstractions/ # Interfaces (IVideoPlayerCore, IVideoPlayerFactory)
│ ├── Enums/ # AvFlagsType
│ ├── Events/ # StreamsAnalysedEventArgs
│ ├── Extensions/ # TrackResolver, IsoToLanguageName
│ └── Models/ # MetadataModel, StreamItem
│
├── TinyPlayer.Desktop/ # WPF UI application
│ ├── Assets/ # Icons, images
│ ├── Controls/ # VideoHost (HwndHost)
│ ├── View/ # MainWindow.xaml
│ ├── ViewModel/ # MainViewModel
│ └── Properties/
│ └── PublishProfiles/
│
└── TinyPlayer.Tests/ # xUnit 3 test project
├── Core/ # Tests for TinyPlayer.Core
└── Desktop/ # Tests for ViewModels
TinyPlayer follows MVVM pattern using CommunityToolkit.Mvvm.
The core library (TinyPlayer.Core) has no UI dependencies - it communicates with the ViewModel through events:
| Event | Description |
|---|---|
PositionChanged |
Current playback position & duration |
StreamsAnalysed |
Audio/subtitle track metadata |
StateChanged |
Pipeline state (Playing, Paused, Ready) |
ErrorOccurred |
Playback errors |
EndOfStream |
Playback finished |
| Key | Action |
|---|---|
Double Click |
Toggle fullscreen |
Escape |
Exit fullscreen |
| Package | Purpose |
|---|---|
| WPF-UI | Fluent Design UI framework |
| CommunityToolkit.Mvvm | MVVM source generators |
| GtkSharp / GstreamerSharp | GStreamer .NET bindings |
Good sources for testing multiple audio tracks and subtitles:
- Sintel - Blender Open Movie, multiple subtitle languages
- Tears of Steel - Blender Open Movie
This project is licensed under the MIT License. See the LICENSE file for details.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions...

