1

我有一个高度依赖视频的应用程序,它使用 MediaElement 来重现它们。

但是,我已经介绍了一个层,它可以从外部文件夹或内部文件夹获取视频。因此,在我的内部文件夹中,我正在加载我的视频,如下所示:

private static async void 
   InitVideo(MediaElement mediaElement, string resourceName)
   {
        try {
            Uri imageUri = 
                new Uri(string.Format("ms-appx:///{0}", resourceName),
                                      UriKind.RelativeOrAbsolute);
            StorageFile file = 
                     await StorageFile.GetFileFromApplicationUriAsync(imageUri);
            var stream = 
                     await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
            mediaElement.SetSource(stream, file.ContentType);

        }
        catch (System.Exception ex)
        {
            Debug.WriteLine("Error loading video ({0})", resourceName);
            Debug.WriteLine(ex.Message);
        }
    }

然后在我的 XAML 中我有这样的东西:

lextensions:MediaElementExtensions.MediaResource="video1.mov"

MediaResource 是一个附加属性,它在更改时调用它:

MediaElement mediaElement = sender as MediaElement;
if (mediaElement != null) {
    mediaElement.Tag = args.NewValue; // pass the new resource name.
    mediaElement.Loaded += LoadVideo;
}

加载 MediaElement 时,将LoadVideo调用它并调用InitVideo.

这很多时候都很好用。但是,在极少数情况下,这不起作用,我不知道为什么。我正在使用带有 H.264 编解码器的 mov 文件。

我看到有些 有这个问题。但是,在他们的情况下,他们根本无法显示任何视频。我可以做到这一点。实际上,它在超过 80-90% 的时间内都有效。

4

1 回答 1

0

到目前为止,我还没有遇到视频消失的情况。我已经更新了显卡驱动程序并考虑了@danielovich 指出的注意事项。

道德是:避免异步无效。这个视频很好地解释了原因。

于 2013-07-04T11:51:07.347 回答