You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C# WPF应用程序中嵌入视频到窗口的实现问题

WPF中播放嵌入项目视频的解决办法

核心问题说明

WPF的MediaElement控件依赖Windows Media Player底层引擎,该引擎无法直接读取嵌入到程序集(BuildAction设为Resource/Embedded Resource)中的视频文件,这就是你测试时GIF正常、视频失效的原因——GIF是由WPF的Image控件直接解码处理,逻辑和视频完全不同。

可行解决方案

方案1:将视频设为Content资源(推荐,无需额外代码)

  • 右键项目中的视频文件,设置:
    • BuildAction: Content
    • Copy to Output Directory: Copy if newer
  • 在XAML中使用相对路径或pack://siteoforigin路径指定MediaElement的Source:
    <!-- 相对路径示例,假设视频在项目根目录的Videos文件夹下 -->
    <MediaElement Source="/Videos/demo.mp4" LoadedBehavior="Play" />
    
    <!-- pack路径写法 -->
    <MediaElement Source="pack://siteoforigin:,,,/Videos/demo.mp4" LoadedBehavior="Play" />
    

方案2:嵌入资源转临时文件播放(必须嵌入到程序集时用)

如果必须将视频嵌入到程序集(比如不想让用户轻易找到视频文件),可以先把嵌入的资源读取为流,写入临时文件后再播放:

  1. 设置视频文件的BuildAction: Embedded Resource
  2. 在窗口加载或播放触发时,添加以下C#代码:
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        // 资源名称格式:项目命名空间.文件夹路径.文件名(注意大小写匹配)
        string resourceName = "YourProjectNamespace.Videos.demo.mp4";
        using var resourceStream = System.Reflection.Assembly.GetExecutingAssembly()
            .GetManifestResourceStream(resourceName);
        
        if (resourceStream == null) return;
    
        // 创建临时文件
        string tempVideoPath = Path.Combine(Path.GetTempPath(), $"temp_{Guid.NewGuid()}.mp4");
        using var fileStream = new FileStream(tempVideoPath, FileMode.Create, FileAccess.Write);
        resourceStream.CopyTo(fileStream);
    
        // 播放临时文件
        mediaElement.Source = new Uri(tempVideoPath);
        // 播放完成后删除临时文件
        mediaElement.MediaEnded += (s, args) =>
        {
            try { File.Delete(tempVideoPath); } 
            catch { /* 忽略删除失败的情况,比如文件被占用 */ }
        };
    }
    

替代方案

如果不想依赖Windows Media Player的限制,可以考虑:

  • 使用WPF MediaPlayer类配合DrawingVisual自行渲染视频流(需要处理帧更新,代码复杂度较高)
  • 集成第三方视频控件,比如VLC的WPF绑定库(需额外安装NuGet包,兼容性更好)

内容的提问来源于stack exchange,提问作者Mojtabah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 10:35:24