同时播放多个Silverlight媒体元素

本文关键字:Silverlight 媒体 元素 播放 | 更新日期: 2023-09-27 18:09:11

问题如下:

我有一个Silverlight应用程序,我们想在其中同时播放8个Silverlight MediaElements。所有人都在播放.MP4视频。

前6个将几乎立即加载,并在一两秒内打开MediaOpened。剩下的2人有时(并非总是(需要几分钟的时间才能上场/报告他们已经准备好上场。

如果我只打6分或更少,似乎没有问题。

以下是我的发现:

1( 与文件没有关系。我可以切换MediaElements的顺序,我尝试打开的前6个会很好地打开,其余的会阻塞。

2( 不一定有带宽问题(我试着把文件压缩到几乎没有,但同样的事情发生了(。

3( 我不认为这是IIS的问题(我的服务器(,因为我已经达到了同时连接的最大值。

4( 我的客户端机器根本没有固定。网络稳定在25%,所以剩下的2个可能正在挨饿,但第7个和第8个有什么神奇之处?

代码

我的代码似乎不重要,但我会包含它,因为当你这样做时,人们似乎喜欢它:

foreach ( String Uri in UriList )
{
   //For every URI we create a new MediaElement.  In our test case this is 8 always.
   MediaElement newMediaElement = new MediaElement();
   // We use MediaOpened as our 'ready to play' event.  Buffering remains at 0 for the 
   //  two streams that don't work.
   newMediaElement.MediaOpeened += new System.Windows.RoutedEventHandler(stream_MediaOpened);
   //Set the source and add it to some list to be added to a grid later...
   newMediaElement.Source = uri;       
   MediaElementList.Add( newMediaElement );
}

在此之后,MediaElementList被添加到XAML中定义的网格中。

如果人们认为更多的代码会有所帮助,我会添加特定的部分。就像我说的,我不认为代码会有用,但你永远不会知道。。。

其他研究

其他人也有这个问题,但我们还没有找到解决方案。我们已经看到了这个,这个和这个,但除了他们不知道之外,没有人给出任何答案。

编辑:好吧,正如Kevev所指出的,有一个6的限制。有人知道有什么办法吗?

同时播放多个Silverlight媒体元素

Silverlight 4 HTTP网络堆栈限制为6个并发连接。

请参阅此处的客户端HTTP处理部分:

并发连接限制从2 提高到6