很简单。使用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
编辑另一条相关信息是,媒体元素上的状态更改回调在第二个版本中被调用一次(状态立即为“关闭”)。