C#媒体元素 - 没有视频

时间:2013-12-15 13:51:09

标签: c# wpf video wpf-controls media-player

我创建了一个专为Windows应用商店设计的媒体播放器,以及音乐和音频文件,它工作得很完美,但它不播放视频文件。

这是XAML页面中媒体元素的代码:

 <ContentControl x:Name="MediaContainer"

                        HorizontalContentAlignment="Right"
                        VerticalContentAlignment="Center"
                        Height="405" Width="720" HorizontalAlignment="Right"
                        KeyUp="MediaContainer_KeyUp"
                        Grid.Column="0" >

        <MediaElement Name="CoreMediaElement"
                      AudioCategory="BackgroundCapableMedia"
                      MediaOpened="CoreElement_MediaOpened"
                      MediaEnded="CoreMediaElement_MediaEnded"
                      MediaFailed="CoreMediaElement_MediaFailed"
                      CurrentStateChanged="CoreMediaElement_CurrentStateChanged"
                      AutoPlay="True"

                      />

    </ContentControl>

这是我设置文件来源的方式:

        var file = MediaList[IndexOfMediaFileToBeLoaded].FileData;

        try
        {
            var stream = await file.OpenAsync(FileAccessMode.Read);
            CoreMediaElement.SetSource(stream, file.ContentType);
        }
        catch
        {
        }

其中FileData是StorageFile()对象,而MediaList是包含播放列表中所有文件的List()。

在我逐步调试之后,我观察到当我加载视频时,MediaElement.MediaFailed事件被触发并且它发出下一个错误:“MF_MEDIA_ENGINE_ERR_SRC_NOT_SUPPORTED:HRESULT - 0xC00D36C4”。

观察:在撰写这篇文章时,我决定尝试加载不同类型的文件,希望这可以解决问题。但在我加载了近10部不起作用的视频之后,我看了一下延伸:“。MKV”。我拿了我的视频转换器,我将它们转换为“.MP4”并且它们工作了。那问题到底是什么?我安装了所有的编解码器。我使用K-Lite Codec Pack

编辑:“。AVI”文件也正常工作。

1 个答案:

答案 0 :(得分:1)

MediaElement是一个只能播放某些文件类型的控件。它基于Windows的媒体播放器,但仅限于其核心编码器 - 它不会使用额外的编解码器/插件。因此,如果一个简单的媒体播放器无法播放您的文件,MediaElelment也不会。

解决方案通常是使用不同的控件进行播放。

其中一个是基于VLC的VideoLan DotNet。它速度快,功能强大,可以播放virtually any media file。但是:

  1. IIRC,它将要求您的用户在他们的机器上安装VLC(可能会集成到安装过程中)。
  2. 它使用“奇怪的”xaml - 你创建控件(没有显示任何内容),然后你创建一个从上面的控件获取其源代码的图像。 See here(阅读替代实施的第一条评论)。