gpt4 book ai didi

c# - 当源是 https uri 时如何播放 wpf MediaElement

转载 作者:太空狗 更新时间:2023-10-29 21:33:45 25 4
gpt4 key购买 nike

在 wpf 独立应用程序 (.exe) 中,我在主窗口中包含了一个 MediaElement

<Window x:Class="Media.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Main Window" Height="350" Width="525">
<Grid>
<MediaElement x:Name="Player" Stretch="Uniform" LoadedBehavior="Manual" UnloadedBehavior="Stop"/>
</Grid>
</Window>

从后面的代码中,我将其 Source 设置为任何 https Uri:

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();

var source = new Uri("https://stream_which_can_be_opened_with_windows_media_player.com", UriKind.Absolute);
Player.Source = source;
Player.Play();
}
}

当调用 Play() 方法时,将抛出 NullReferenceException 而不是播放媒体内容。 MediaElement 已初始化,NullReferenceExceptionPlay() 方法中抛出,见下文。

视频的相同 Uri 可以在 Windows Media Player 中打开(文件 -> 打开 Url)。

问题似乎出在 MediaPlayerState.OpenMedia 方法(MediaElement 内部使用的对象)中,该方法尝试检查是否从 SecurityHelper.ExtractUriForClickOnceDeployedApp 检索到 appDeploymentUri 具有 HTTPS 方案。应用程序未使用 ClickOnce 部署(它有一个独立的安装程序)并且 appDeploymentUri 为 null,因此出现 NullReferenceException

这是来自PresentationFramework.dll,System.Windows.Media.MediaPlayerState.OpenMedia

    if (SecurityHelper.AreStringTypesEqual(uriToOpen.Scheme, Uri.UriSchemeHttps))
{
// target is HTTPS. Then, elevate ONLY if we are NOT coming from HTTPS (=XDomain HTTPS app to HTTPS media disallowed)

//source of the issue
Uri appDeploymentUri = SecurityHelper.ExtractUriForClickOnceDeployedApp();
//appDeploymentUri is null
if (!SecurityHelper.AreStringTypesEqual(appDeploymentUri.Scheme, Uri.UriSchemeHttps))

有没有人有任何解决方法/解决方案来使其工作?

最佳答案

我已经使用 MediaElement 好几次了,老实说,它很烂,而且 bug 比我遇到的任何其他 WPF 组件都多。它不仅有错误,而且还缺少 Silverlight 拥有的许多功能。 HTTPS 与 Silverlight 配合使用。

我检查了代码,但没有看到更改它的方法。也许有一些 MAD 反射 hack 可以让你这样做,但那是 hacking,我不建议这样做。 Ps,这似乎是一个真正的错误,也许让微软的人知道吧。

最简单的解决方案是使用 OWIN 制作一个“内存网络服务器”。然后,您可以流式传输 http://localhost:1337 并包装底层的 https://内容。 https 内容仍然是安全的,因为您是从“内存网络服务器”流式传输它并且从未发出过“真正的”网络请求。它应该仍然高效且安全。

关于c# - 当源是 https uri 时如何播放 wpf MediaElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25081956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com