很简单。使用MediaElement
时,此代码有效:
TestMedia.Source = new Uri("ms-appx:///Assets/Test.mp4");
TestMedia.MediaFailed += TestMedia_MediaFailed;
TestMedia.AutoPlay = true;
此代码不会:
StorageFile fileToTest = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/Test.mp4"));
var stream = await fileToTest.OpenAsync(FileAccessMode.Read);
TestMedia.SetSource(stream, fileToTest.ContentType);
TestMedia.MediaFailed += TestMedia_MediaFailed;
TestMedia.AutoPlay = true;
没有调用任何委托方法,也没有抛出任何异常(我知道我不是在这里分配它们,但即使我这样做也没关系)。它只是空白。为什么SetSource
不会取代Source
?我问的原因是我试图对电影文件进行简单的混淆,以便使用我们的应用程序的人至少必须付出一些努力来窃取受版权保护的内容。这需要在将内容传递到MediaElement
编辑另一条相关信息是媒体元素的状态更改回调在第二个版本中被调用一次(状态立即“关闭”)。