【问题标题】:Why won't WinRT MediaElement.SetSource do what it should?为什么 WinRT MediaElement.SetSource 不做它应该做的事情?
【发布时间】:2013-04-30 06:32:07
【问题描述】:

非常简单。使用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 上的 status changed 回调被调用了一次(状态立即为“Closed”)。

【问题讨论】:

  • 你调试了吗?
  • @bash.d 我没有关注。我将其归结为这个简单的测试用例,其中预期的行为与我的预期不同。 MediaElement 在第二种情况下似乎默默地失败了,尽管理论上它们使用的是完全相同的文件。除此之外,如果我从MediaElement 中获取信息,我只能调试,这没有任何指示。
  • 我的意思是逐步完成...有时您会得到不同的结果,实际上您可能会遇到时间问题。虽然这确实是一个简单的案例。
  • 是的,我已经完成了它,但是所有相关细节都发生在我无法进入的地方(在 Windows 运行时内)。
  • Status ChangedStream?

标签: c# windows-runtime mediaelement


【解决方案1】:

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

【讨论】:

  • @bash.d 我没看到你在哪里说的,你能指出来吗?
猜你喜欢
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多