avalonia 推荐使用 libvlcsharp + libvlc 实现跨平台音视频播放,支持主流格式、网络流、字幕与硬件加速;轻量音频可选 naudio;ffmpeginterop+skia 适用于深度定制场景;system.media.soundplayer 和 process.start 不推荐。

Avalonia 本身不内置音视频播放控件,但可通过集成成熟第三方库实现跨平台音频/视频播放。关键在于选对方案——不是“能不能播”,而是“用哪个库播得稳、适配好、维护省”。
推荐方案:LibVLCSharp + LibVLC(首选跨平台)
这是目前 Avalonia 生态中兼容性最广、功能最全、更新最活跃的方案,支持 Windows / Linux / macOS(含信创环境),能播 MP4、MKV、AVI、MP3、FLAC 等主流格式,还支持网络流、字幕、硬件加速。
- 安装 NuGet 包(以 .NET 8 + Avalonia 11.x 为例):
LibVLCSharp(核心封装)LibVLCSharp.Avalonia(Avalonia 绑定控件)
对应平台原生库(如VideoLAN.LibVLC.Windows或VideoLAN.LibVLC.Linux) - 在
Program.cs中启用:.UseVideoView()(仅 Avalonia.Extensions.Media 方案需此步;LibVLCSharp 不需要) - XAML 中直接使用:
<videoview name="videoView"></videoview>
支持绑定播放地址、控制播放/暂停/音量,也提供截图、全屏等 API - C# 播放示例:
videoView.MediaPlayer.Play(new Media(LibVLC, "test.mp4"));
轻量音频播放:NAudio(适合本地音效、提示音)
若只需播放 WAV、MP3 等本地音频文件(如按钮音、通知音),无需视频能力,NAudio 是更轻量、线程安全的选择,且完全托管,无平台依赖。
本文档主要讲述的是android rtsp流媒体播放介绍;实时流协议(RTSP)是应用级协议,控制实时数据的发送。RTSP提供了一个可扩展框架,使实时数据,如音频与视频,的受控、点播成为可能。数据源包括现场数据与存储在剪辑中数据。该协议目的在于控制多个数据发送连接,为选择发送通道,如UDP、组播UDP与TCP,提供途径,并为选择基于RTP上发送机制提供方法。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
- 安装:
NAudio 2.2.1+ - 封装一个简单播放器即可复用:
使用AudioFileReader+WaveOutEvent,支持异步播放、停止、释放资源 - 注意:MP3 需额外引用
NAudio.Lame或确保系统有解码器;WAV 最稳妥
进阶/定制需求:FFmpegInterop + Skia 渲染
适用于需要深度控制解码流程、自定义滤镜、帧级处理或规避 VLC 许可限制的场景。但开发成本高、跨平台适配复杂(尤其 Linux/macOS 需自行编译 FFmpeg)、调试难度大。
- 核心链路:FFmpeg 解码 → 输出 SKBitmap → Avalonia Skia 后端渲染
- 需手动管理帧同步、音频输出(常搭配 NAudio 实现音画同步)
- 适合已有 FFmpeg 工程经验、或对播放器内核有定制要求的团队
不建议方案:System.Media.SoundPlayer 或 Process.Start
前者仅支持 PCM/WAV,不支持 MP3;后者调用系统默认播放器,无法嵌入界面、无控制权、无事件反馈,不适合集成式 UI 场景。









