Silverlight 4 MediaElement源Uri问题

3

我在ASP.NET MVC 2应用中设置Silverlight 4 MediaElement的源属性时遇到了问题。我的开发机是Windows 7,预发布服务器是Windows Server 2008。

本地使用的MediaElement源代码如下:

<MediaElement x:Name="VideoMediaElement" Source="Assets/126.mp4">
...
</MediaElement>

这段代码在我的开发机和测试服务器上都能正常工作,但我发现只有在Google Chrome浏览器中才能正常运行。经过大量的研究和测试,我将应用程序转换为设置源代码如下:

<MediaElement x:Name="VideoMediaElement" Source="http://localhost:40000/ClientBin/Assets/126.mp4">
...
</MediaElement>

使用这种类型的 Uri,我的视频可以在 Internet Explorer 和 Google Chrome 上播放,并且可以在本地服务器上播放。当我将其推送到暂存服务器时,路径被计算为:
<MediaElement x:Name="VideoMediaElement" Source="http://myDomain/MyVirtualDir/ClientBin/Assets/126.mp4">
...
</MediaElement>

我认为这看起来很好,但是在暂存服务器上任何浏览器都无法播放视频。

我在我的开发环境和暂存服务器之间看到的区别是虚拟目录。在设置包含虚拟目录的完整Uri时,是否存在已知问题或技巧?

将视频文件从文件结构加载到Silverlight 4 MediaElement的首选方法是什么?

2个回答

2

我在诊断此问题时的第一步是:

  • 停止使用Chrome。先让所有功能在IE中正常工作,然后再测试其他浏览器。
  • 不要使用完整的URL。既然XAP、主机页面和资源都在同一台服务器上,我们“知道”不需要它,所以不要使用它。
  • 不要使用运行在分期服务器上的浏览器,使用另一台客户端机器进行测试。
  • 按照服务器信息,在客户端机器上安装Fiddler2并查看实际请求内容。

你是否尝试过使用“/assets/126.mp4”而不是“assets/126.mp4”?

如果你从一个看起来很好的URL中得到了404错误,请检查服务器mime映射,是否有.mp4的映射?

还要检查文件访问安全性。


感谢您的帮助。您回答了我的问题,即我是否需要完整路径。因此,明确起见,如果所有内容都存储在同一个ClientBin下,则源中不需要完整路径。此外,我的服务器缺少“video/mpeg”类型的“.mp4”的MIME类型。一旦我添加了这个,相对路径和绝对路径都重新开始工作。现在只有它可以流式传输而不是先下载整个文件再播放它,但这将成为另一个问题的话题。 - Steven Hook
@Steve:对“Silverlight渐进式下载”的一些研究可能有助于解决你的下载问题。 - AnthonyWJones

0

你有检查过Fiddler吗?它可以告诉你实际的HTTP请求/响应内容。也许有一些安全信息(跨域访问),或者至少你可以更详细地了解底层发生了什么...

你可以在这里找到Fiddler:http://www.fiddler2.com/fiddler2/


我一直在使用Fiddler。它显示"/MyVirtualDir/ClientBin/Assets/126.mp4"上的404错误,但我不确定这是否告诉我太多了。我知道它找不到它,这就是为什么我相当确定这是路径问题的原因。如果我使用相对路径,如"Assets/126.mp4",Fiddler不会显示问题;但同样的方法只似乎适用于Google Chrome浏览器。 - Steven Hook
你是否将视频的构建操作设置为资源?这样XAP文件会变大,但你可以相对访问它。 - server info

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接