| Doc | What it covers |
|---|---|
| Quickstart | Registry → MediaPlayer → audio/video output in a few lines |
| Architecture | Layering, core ideas, ownership/threading rules |
| Packages | The NuGet surface: entry packages vs feature modules vs low-level bindings |
| Native dependencies | Which natives each feature needs, pins, and acceptance policies |
| Release tiers | What full/core/minimal artifacts promise and the gates that enforce it |
| NativeAOT | AOT rules, what CI enforces, publishing the C ABI |
| Control guides | HaPlay show control setup, scripting reference, X32/BCF2000/X-Touch layouts |
Platform policy: Linux first, Windows supported, macOS currently unsupported (best-effort code paths only).
There is currently a basic test build on the Releases page for Windows and Linux to find bugs:
https://github.com/Sekoree/MFPlayer/releases/tag/v1.0.0
On Linux systems where the GLX driver can stall during a window/dialog close, launch HaPlayer with
--safe-ui (or set HAPLAY_SAFE_UI=1). This keeps the Avalonia UI on its software renderer while
video outputs and visualizers continue to use their dedicated rendering paths. The selected mode is
recorded in the startup log.
Initially this started as a silly way of adding an FFmpeg decoder to OwnAudioSharp which then lead to a hacked together addon that made it play video as well.
Realizing that was a bad idea but liking OwnAudioSharps overall structure this came to be.
Decoding is done via FFmpeg and then fed through various syncing layers to either PortAudio for audio or SDL3, Avalonia or NDI outputs for video (Yes I know NDI audio too).
A bit of mixing functionality for (mostly audio) to route N amount of channel to M amount of outputs.
- See the Media Player and Cue Player of the HaPlayer demo app
Mainly the composition things. Helpful when just displaying one type of media at a time isnt enough, supporting layers, images, text inculding positioning.
See Cue Player stuff in the HaPlayer demo app
Aka. the OSC and MIDI library. Why? I'm forsed to use tablet mixers at work currently, so these are for gluing random MIDI controllers to mixer OSC commands.
Also I love Mond, an extremely cool scripting runtime for .Net that does support NativeAOT.
- See the Control parts of the HaPlayer demo app
Started out as a quick and dirty way to test playback and all sorts of functions.
The UI and UX is a crime against humanity, but I also havent spent much time at it yet as I still focus on core framework stability.
(most parts were mostly a claude or codex "I need to test this, can you add X")
I did use a lot of AI tools for this, mainly to experiemnt to see whats possible (or the usual ffmpeg boilerplate to get stream data etc. or OpenGL shaders).
(I'll probably forget something)
Avalonia (for the UI)
FFmpeg(.AutoGen)
SkiaSharp (inherited from Avalonia, used for text stuff)
SDL3-CS (for video output, so things arent strictly tied to the Avalonia dispatcher)
Mond (for the scripting parts of the "Control" area)
YoutubeExplode (for the YouTube source stuff)
XRAnimator and blender_mmd_tools (to understand how to read model and motion data)
libASS (for fancy subtitles)
Mond (for the scripting parts of the "Control" area)
NDI (to professionally™ send audio and video over the network)