【问题标题】:C# Silverlight MediaElement wont play mp3 from webC# Silverlight MediaElement 不会从网络播放 mp3
【发布时间】:2011-10-27 19:43:46
【问题描述】:

嗨,过去几天我一直在为此烦恼,我在一个用 C# 编写的 Silverlight 应用程序中有一个媒体元素

我正在尝试通过 http 流式传输 MP3 并通过 silverlight 应用程序播放。虽然它一直在捕获一个异常,上面写着

AG_E_NETWORK_ERROR

mp3 不会播放,MediaElement.MediaOpened 事件永远不会触发

在网上搜索后,这个错误似乎是由于一个错误的来源,但是当我将网络浏览器指向 mp3 时,mp3 可以正常播放。

这是代码

private void button1_Click(object sender, RoutedEventArgs e)
        {

            Uri source = new Uri("http://www.sm-testing.co.uk/mixes/youdontknow.mp3");
            mediaElement1.Source = source;
            mediaElement1.MediaFailed += new EventHandler<ExceptionRoutedEventArgs>(mediaElement1_MediaFailed);
            mediaElement1.MediaOpened +=new RoutedEventHandler(mediaElement1_MediaOpened);


        }


        void mediaElement1_MediaFailed(object sender, ExceptionRoutedEventArgs e)
        {
            MessageBox.Show( e.ErrorException.ToString());
        }

        private void mediaElement1_MediaOpened(object sender, RoutedEventArgs e)
        {

            mediaElement1.Play();
        }

【问题讨论】:

  • MP3 的大小是多少?您确定以正确的格式接收整个流(MP3)吗?
  • @AllanChua 嗨,是的,mp3 很好,我刚刚用 windows 示例 wma 尝试过,我得到了同样的结果,异常是即时的,我看不到应用程序试图建立连接查看 netstat 的网站
  • 我想问的是,如果播放器的来源被完全接收,您是否尝试使用快速观看?
  • 您是否从与您的 Silverlight 应用程序相同的域加载它?如果没有,您是否在 www.sm-testing.co.uk 的根目录中设置了跨域策略文件?
  • +1 用于提供实时链接和代码(使其易于检查,但对您的安全而言并不是一件好事)。您可能还想关闭网站上的文件夹浏览:)

标签: silverlight mediaelement


【解决方案1】:

我看到您在示例中使用了实际的 URL。我检查了您的网站,没有http://www.sm-testing.co.uk/ClientAccessPolicy.xml 文件或http://www.sm-testing.co.uk/crossdomain.xml 文件。

如果没有这些文件中的任何一个(preferably ClientAccessPolicy.xml,因为另一个是旧的 Flash 兼容格式并且缺少一些功能)Silverlight 将仅从其托管的域中检索文件。这是一项安全功能,可阻止 Silverlight 应用在未经许可的情况下从任何地方获取数据或图像。

下面的示例 ClientAccessPolicy.xml 允许对任何 http 或 https 请求进行任何访问:

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
      <cross-domain-access>
        <policy>
          <allow-from http-request-headers="*">
            <domain uri="http://*" />
            <domain uri="https://*" />
          </allow-from>
          <grant-to>
            <resource path="/" include-subpaths="true"/>
          </grant-to>
        </policy>
      </cross-domain-access>
</access-policy>

您也不需要 crossdomain.xml,除非您也想打开对 Flash 应用程序的访问权限:)

【讨论】:

  • 您好,感谢您的帮助,我按照 msdn 的说明添加了 2 个文件,但是仍然无法播放,这两个文件的大小写重要吗?我已将它们添加为小写,因为 msdn 有这种方式。
  • @Shutupsquare:您只需要 ClientAccessPolicy.xml 但为什么只为 SOAPAction 配置它?让它allow-from http-request-headers="*"。请参阅上面的更新示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多