none
MediaElement 视频播放 RRS feed

  • 问题

  • <Grid>

            <Canvas Name="canvas1" Visibility="Hidden" Background="Pink"/ >
                       <MediaElement Canvas.Left="362" Canvas.Top="223" Height="120" Name="mediaElement1" Width="160"  Source="1.mpg" >
            </Canvas>

            <Canvas Name="canvas2"  >
                        <MediaElement Canvas.Left="572" Canvas.Top="223" Height="120" Name="mediaElement2" Width="160"   source="2.mpg" MediaEnded="mediaElement_MediaEnded"/>
            </Canvas>

    </Grid>

    这里加载了2个视频,当添加到第8个的时候就不会显示了,每个视频不超过3M,基本都是2M多一点,前7个还是正常播放的,是什么问题呢?

    通过按钮把canvas1的Visibility改成Visible,会先显示canvas1的背景,之后才会出现视频,而且没有播放,这是什么原因啊? 有没有办法同时显示呢?

    视频需要循环播放,添加下面代码没有实现,哪里不对么?

            private void mediaElement_MediaEnded(object sender, RoutedEventArgs e)
            {
                MediaElement mediaElement = (MediaElement)sender;
                mediaElement.Position = new TimeSpan(0);
                mediaElement.Play();
            }


    2011年6月9日 8:52

答案

  • 你好,

    你看到的BufferingTimer属性应该是Silverlight的MediaElement而不是WPF的,两者是不同的。

    在WPF中,并没有这个相对应的属性,这个值会遵照WindowsMediaPlayer的设置。你可以在WindowsMediaPlayer的选项窗口中的性能(Performance)标签下修改NetworkBuffering的值。

    另外,如果你的程序对媒体的播放有比较高的细节上要求的话,我们不建议你使用WPF的MediaElement控件。目前,MediaElement控件存在一些问题而且在短时间内可能不会被修复。据我所知,如果需要在WPF中获得稳定的媒体播放的体验,官方的建议是直接在WPF中host一个Windows Media Player OCX控件,或者使用Winform的Windows Media Player控件。当然,这样会失去一些MediaElement的功能。


    Min Zhu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年6月15日 5:56
    版主

全部回复

  • 我只说循环的,转自MSDN:

     

    <MediaElement Name="myMediaElement" >
      <MediaElement.Triggers>
      <EventTrigger RoutedEvent="MediaElement.Loaded">
       <EventTrigger.Actions>
       <BeginStoryboard>
        <Storyboard>
    
        <!-- The MediaTimeline has a RepeatBehavior="Forever" which makes the media play
          over and over indefinitely.-->
        <MediaTimeline Source="media\tada.wav" Storyboard.TargetName="myMediaElement" 
         RepeatBehavior="Forever" />
    
        </Storyboard>
       </BeginStoryboard>
       </EventTrigger.Actions>
      </EventTrigger>
      </MediaElement.Triggers>
     </MediaElement>

     


    2011年6月9日 9:19
  • 你好,

    WPF的MediaElement在底层使用的还是WindowsMediaPlayer的OCX控件,而WindowsMediaPlayer所能同时播放的实例数量是有限的。据我所知,微软目前支持每个会话可以同时存在4个同时播放的实例。WindowsMediaPlayer本身是很消耗资源的。根据操作系统与硬件的不同,具体环境下可以达到的最高同时播放的实例数量会有所不同。

    在XP系统下,WMP OCX同时播放的实例数量相比Vista与Windows7会受到更大的限制。

     


    Min Zhu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年6月13日 8:08
    版主
  • 现在是重复播放时,会有个短暂的黑屏效果,不知道怎么去掉呢? MediaElement 成员中有个BufferingTime 属性,但我在程序中没有找到此属性
    2011年6月14日 5:58
  • 你好,

    你看到的BufferingTimer属性应该是Silverlight的MediaElement而不是WPF的,两者是不同的。

    在WPF中,并没有这个相对应的属性,这个值会遵照WindowsMediaPlayer的设置。你可以在WindowsMediaPlayer的选项窗口中的性能(Performance)标签下修改NetworkBuffering的值。

    另外,如果你的程序对媒体的播放有比较高的细节上要求的话,我们不建议你使用WPF的MediaElement控件。目前,MediaElement控件存在一些问题而且在短时间内可能不会被修复。据我所知,如果需要在WPF中获得稳定的媒体播放的体验,官方的建议是直接在WPF中host一个Windows Media Player OCX控件,或者使用Winform的Windows Media Player控件。当然,这样会失去一些MediaElement的功能。


    Min Zhu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年6月15日 5:56
    版主
  • 谢谢,只有试试这个办法了

    我做过对比,但需要某些MediaElement的功能,所以没办法,先看看这个

    2011年6月16日 3:43