为什么不使用WinRT MediaElement ?SetSource做它应该做的

本文关键字:SetSource WinRT MediaElement 为什么不 | 更新日期: 2023-09-27 18:11:23

非常简单。当使用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

之前更改内存中的流。

EDIT另一个相关信息是,Media Element上的状态更改回调在第二个版本中被调用一次(状态立即为"Closed")。

为什么不使用WinRT MediaElement ?SetSource做它应该做的

根据这个链接,SetSource之后是TestMedia.AutoPlay = true;。似乎这两种方法之间应该有一些延迟