在过去的几天里,我一直把头发拉过来,我在用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();
}
答案 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:)