我正在努力解决这个问题。我有一个Silverlight 4应用程序,可以从URL加载音频和视频文件。这些URL与托管应用程序的域名相同,非常适合视频。
URL实际上是asp.net mvc控制器,负责从服务器上的共享位置读取文件并服务回文件流。 URL看起来像这样:
http://localhost:31479/CourseMedia?path= \ omnisandbox1 \ ILMSShare2 \演示-火+行为\媒体\ Disclaim.wma&安培;加密=假和ID = 00000000-0000-0000-0000-000000000000
如果我将URL直接放入浏览器中,文件加载并在Windows媒体播放器中播放就好了,如果我使用单独的测试silverlight项目来加载url它也可以,但对于我的生活,我不能让它在我的主项目中正常工作。
这是我用来实际进行源设置的例程:
protected void SetPlayerURL(MediaElement player, string url)
{
if (player != null && url.Length > 0)
{
player.ClearValue(MediaElement.SourceProperty);
player.Source = new Uri(this.Packet.GetMediaUrl(url, false, Guid.Empty));
}
}
并且GetMediaURL函数只是构建上面看到的URL格式:
public string GetMediaUrl(
string path,
bool encrypted,
Guid key)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat("http://{0}/CourseMedia?path={1}&encrypted={2}&id={3}",
this.Host,
System.Windows.Browser.HttpUtility.UrlEncode(path),
encrypted,
key);
return builder.ToString();
}
当媒体是音频时,永远不会向媒体发出对控制器的请求。对我来说似乎很奇怪,因为这个确切的代码适用于视频。 MediaElement状态永远不会离开“已关闭”,并且永远不会触发CurrentStateChanged,MediaOpened和MediaFailed事件。
我不知所措!
答案 0 :(得分:0)
尝试将MediaElement的ScrubbingEnabled设置为false,框架版本3.5和音频存在一些问题,并且解决方法是将其设置为false。可能值得一试。
还尝试捕获BufferingStarted,BufferingEnded,MediaEnded以及MediaFailed和MediaOpened事件。我很好奇这是否是一个缓冲问题。