C# Avalonia怎么播放音频或视频 Avalonia多媒体播放

3次阅读

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

C# Avalonia怎么播放音频或视频 Avalonia多媒体播放

Avalonia 本身不内置音视频播放控件,但可通过集成成熟第三方库实现跨平台音频/视频播放。关键在于选对方案——不是“能不能播”,而是“用哪个库播得稳、适配好、维护省”。

推荐方案:LibVLCSharp + LibVLC(首选跨平台)

这是目前 Avalonia 生态中兼容性最广、功能最全、更新最活跃的方案,支持 windows / linux / macos(含信创环境),能播 MP4、MKV、AVI、MP3、FLAC 等主流格式,还支持网络流、字幕、硬件加速。

  • 安装 NuGet 包(以 .NET 8 + Avalonia 11.x 为例):
    LibVLCSharp(核心封装
    LibVLCSharp.Avalonia(Avalonia 绑定控件)
    对应平台原生库(如 VideoLAN.LibVLC.WindowsVideoLAN.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 是更轻量、线程安全的选择,且完全托管,无平台依赖。

  • 安装: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 场景。

text=ZqhQzanResources