我在程序中嵌入media player控件进行网络文件的播放,播新电影时,如果以前在播放就先停止在播放,这个流程应该没错吧。便是当我不停的点新片进行播放时发现它在停止时出错了,就是调用m_pWmpControls->stop() 时不是每次都会成功,有时会出错,而且而还捕获不了这个异常,查看详细信息时发现有时是 wmnetmgr.dll 出错,有时是wmvcore.dll出错。大家帮忙看一看。

解决方案 »

  1.   

    受你其它代码的影响?不过这些一般都用DirectShow来做了。
      

  2.   

    to:jun_01(无名小卒)
    同感同感...呜呼哀哉......
      

  3.   

    media player内部是ds实现的!通过filter来构建Graph实现文件的播放!在播放网络文件的时候,除了source filter外其他和播放本地文件没大的区别,出现楼主说的问题,如果不是机器反映太慢,可能用于网络播放的source filter有问题,是系统原来带的还是安装了其他的播放器,象影音风暴什么的.多次点击是相同格式的多媒体文件吗?还有很大可能象1楼说的,程序其他地方操作太消耗资源,影响了释放,其他地方什么都不做试试
      

  4.   

    在网络播放过程中,出了client使用的接收source filter,服务器端需要有发送线程的(它需要连接filter正确识别多媒体文件的格式),在停止的时候,你首先是要向服务器发送指定的命令(这里可能会做些记录),让它停止发送,服务器端成功停止后本地graph才成功停止,一般多媒体数据使用不可靠的udp而命令使用可靠的tcp,当然不知道ms是怎么做的.所以网络状况也可能影响到结果
      

  5.   

    如果没有安装其他的播放器(这样可能添加了有问题的filter),我觉得media player控件本身问题不大,毕竟很多人用都没问题,还是需要楼主好好调试,特别是其他操作的影响
      

  6.   

    debug 了一天,终于找到问题了, 原来是CreateStreamOnHGlobal的第二个参惹的祸,设为TRUE时当pStream调用Release()以后,它就自动把hHTMLText指向的内存释放了,而它却没有将hHTMLText 赋值为 NULL, 调用GlobalFree(hHTMLText)后就出错了。因此要么设为TRUE,不再调用
    GlobalFree() 要么设为FALSE,自已调用GlobalFree();hHTMLText = GlobalAlloc(GMEM_FIXED, 1024);
    memset(hHTMLText,0x00,1024);
    CreateStreamOnHGlobal(hHTMLText, FALSE, &pStream); 
    pPSI->Save(pStream, FALSE); 
    szData.Format("%s",(char*)hHTMLText);
    pStream->Release();
    pPSI->Release();
    GlobalFree(hHTMLText);