Skip to content

Ledrunning/TinyPlayer

Repository files navigation

TinyPlayer

A lightweight video player built with WPF, GStreamer, and the WPF-UI framework featuring a modern Fluent Design interface.

Build License: MIT .NET

TinyPlayer Screenshot

TinyPlayer Screenshot

Features

  • 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

Supported Formats

All formats supported by GStreamer - including mp4, mkv, avi, mov, wmv, flv, webm and more.

Requirements

GStreamer Installation

  1. Download and install GStreamer runtime from the official site
  2. Make sure to select Complete installation - not Typical
  3. Add GStreamer to your PATH:
    C:\gstreamer\1.0\msvc_x86_64\bin
    

Getting Started

git clone https://github.com/Ledrunning/TinyPlayer
cd TinyPlayer
dotnet restore
dotnet build
dotnet run --project TinyPlayer.Desktop

Project Structure

## Project Structure

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

Architecture

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

Keyboard Shortcuts

Key Action
Double Click Toggle fullscreen
Escape Exit fullscreen

Dependencies

Package Purpose
WPF-UI Fluent Design UI framework
CommunityToolkit.Mvvm MVVM source generators
GtkSharp / GstreamerSharp GStreamer .NET bindings

Test Videos

Good sources for testing multiple audio tracks and subtitles:

License

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...


About

A lightweight video player built with WPF, GStreamer, and the WPF-UI framework featuring a modern Fluent Design interface.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages