none
MediaElement播放视频卡死闪退是怎么回事 RRS feed

  • 问题

  • 用MediaElement控件播放视频,播放视频时点击返回按钮回到视频列表,再点击另一个视频播放。如此反复操作2~3次就会使程序卡死闪退。我想可能是资源没有释放掉的原因。因为我在资源监视器查看磁盘活动,不播放视频的时候刚刚的播放的视频磁盘进程还在,播放一个视频就会多一个视频的磁盘进程。视频的磁盘进程到2~3条时,程序就卡死闪退了。请问有什么办法解决吗?
    2014年7月29日 3:54

答案

  • 用鼠标没问题,用触屏的出问题?很奇怪,用鼠标和用手触摸的区别在哪里呢?按常理来说不应该会有问题啊,你是导航到第二个页面去,跟第一个页面不会有什么关系。

    你可以把 NavigationCacheMode enumeration 设为Diasable来试试看是否资源还是被占着。还可以在播放页面的OnNavigateFrom里面释放掉资源,比如说吧MediaElement的Source设为空之类的。

    --James


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.



    2014年7月31日 8:13
    版主

全部回复

  • 是你页面没有释放吧

    2014年7月29日 6:12
  • 请问怎么释放掉页面呢?
    2014年7月29日 7:35
  • 有没有代码分享一下,让我也重现一下这个问题啊?

    关于资源释放的话,Windows商店应用里面没有其他什么办法,把MediaElement的所有事件都删掉,然后把视频停止,把MediaElement从VisualTree中删除就好啦。

    --James


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2014年7月30日 3:25
    版主
  • 代码其实也就几句,视频列表界面是调用一个解析JSON文件的方法。JSON里面就存可视频的路径,缩略图之类的。

    点击视频跳转到播放界面,同时把这个视频的一些信息集合传过去。

    void ItemView_ItemClick(object sender, ItemClickEventArgs e)
            {
                var itemId = ((VideoDataItem)e.ClickedItem).uniqueId;
                this.Frame.Navigate(typeof(ItemDetailPage), itemId);
            }

    播放界面代码

     private async void navigationHelper_LoadState(object sender, LoadStateEventArgs e)
    {
    StorageFile file = item.imgePath;
                        IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read);
                        string filetype = file.ContentType;
                        this.mediaElement.SetSource(stream, filetype);
    }

    现在不知怎么的。用鼠标操作没出现问题了。但是用触屏操作就会出现问题。试过很多台触屏设备都会出现这样的问题。

    2014年7月30日 14:55
  • 用鼠标没问题,用触屏的出问题?很奇怪,用鼠标和用手触摸的区别在哪里呢?按常理来说不应该会有问题啊,你是导航到第二个页面去,跟第一个页面不会有什么关系。

    你可以把 NavigationCacheMode enumeration 设为Diasable来试试看是否资源还是被占着。还可以在播放页面的OnNavigateFrom里面释放掉资源,比如说吧MediaElement的Source设为空之类的。

    --James


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.



    2014年7月31日 8:13
    版主