Silverlight MediaElement拒绝播放音频

时间:2010-12-15 05:03:09

标签: asp.net silverlight asp.net-mvc-2 silverlight-4.0

我正在努力解决这个问题。我有一个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事件。

我不知所措!

1 个答案:

答案 0 :(得分:0)

尝试将MediaElement的ScrubbingEnabled设置为false,框架版本3.5和音频存在一些问题,并且解决方法是将其设置为false。可能值得一试。

还尝试捕获BufferingStarted,BufferingEnded,MediaEnded以及MediaFailed和MediaOpened事件。我很好奇这是否是一个缓冲问题。