我有一个对视频有很高依赖性的应用程序,它使用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文件。
我看到some people有这个问题。但是,在他们的情况下,他们根本无法显示任何视频。我能做到这一点。实际上,它的工作时间超过80-90%。
答案 0 :(得分:0)
到目前为止,我没有经历过视频消失。我更新了显卡驱动程序并考虑了@danielovich指出的注意事项。
道德是:避免异步无效。 this video很好地解释了原因。