C#Silverlight MediaElement不会从网上播放mp3

时间:2011-10-27 19:43:47

标签: silverlight mediaelement

在过去的几天里,我一直把头发拉过来,我在用C#编写的Silverlight应用程序中有一个媒体元素

我试图通过http流式播放MP3并通过silverlight应用播放。虽然它一直在捕捉一个说

的例外
  

AG_E_NETWORK_ERROR

mp3无法播放且MediaElement.MediaOpened事件永远不会触发

在网上搜索后,看起来这个错误是由于一个curropt源,但当我将一个webbrowser指向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();
        }

1 个答案:

答案 0 :(得分:0)

我发现您在示例中使用了实际的网址。我检查了您的网站,但没有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>

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