1.怎么判断文件播放完毕了或者文件播放完毕时产生了什么事件
2.怎样得到当前播放位置
谢谢!!!

解决方案 »

  1.   

    WMP控件有PlayStateChange事件可以捕捉,可以得到当前的播放已停止的状态
      

  2.   

    如何判断当前媒体是否处于播放状态?
    IWMPCore::get_playState
    The get_playState method retrieves an enumeration value indicating the operating state of Windows Media Player.SyntaxHRESULT get_playState(
      WMPPlayState*  pwmpps
    );判断pwmpps是否为wmppsPlaying       = 3,
    如何得到当前媒体播放了多长时间(进度)?
    IWMPControls::get_currentPosition
    The get_currentPosition method retrieves the current position in the media item in seconds from the beginning.SyntaxHRESULT get_currentPosition(
      double*  pdCurrentPosition
    );如何得到一个媒体文件的总播放时间(总长度)?
    IWMPMedia::get_duration
    The get_duration method retrieves the duration in seconds of the current media item..SyntaxHRESULT get_duration(
      double*  pDuration
    );
      

  3.   

    我的是网络文件 流媒体 也就是通过HTTP传输的 不是磁盘上的文件 get_duration不可用
    还是 没解决怎么判断文件播放完毕了 (注意 不是播放停止 播放停止 不代表播放完毕)
      

  4.   

    判断完毕的话,可以试一下EndOfStream事件。至于流媒体,获取当前位置,用IWMPControls接口的get_currentPosition,应当可以获得当前的位置,但是,可能无法获得duration,不过也要看你用的是直播流,还是仅仅是以MMS方式或rtsp方式传输的媒体文件,如果是媒体文件方式的话,duration应当是写在文件头里的,包括码流,是可以获取的。你在做文件的时候,加入duration属性即可。然后通过IWMPMedia的Attributelist来获取。
      

  5.   

    设置MediaPlayer的自动播放属性应当就可以实现。
      

  6.   

    litaoye 谢谢你的回答  
    这么说吧  磁盘上有个WMV的文件  我通过"读"的方式(具体的也就是用CFile类来读),读出数据来后我通过HTTP的方式把读出的数据发送给播放器 然后播放器开始播放我需要得到下面的信息
    1.播放器播放完了文件(前提当然是我把WMV的文件的全部数据发给播放器了)
    2.某一时刻播放器播放到了什么位置 最好是用字节数来表示.get_currentPosition函数是可以用的 但get_currentPosition得到的是秒数 为了得到字节数 我就需要得到比特率 这时就有一个问题 怎样得到比特率
    这个问题其实上是我想得到当前播放量占总的播放播放量的百分比
    3.我发现一个问题,就是有的WMV文件要等数据全部发给播放器后 播放器才开始播放 而有的WMV文件就可以做到发一部分数据时播放器就能播放
      

  7.   

    第一个问题:你用EndOfStream事件试一下把,wmp本身对于所有媒体文件,应当都是采用流的方式来处理的。第二个问题:bitrate也是写在头文件里的,你可以通过IWMPMedia接口的getItemInfo来获取。或者通过formatsdk里面的IWMHeaderInfo接口来获取。你的wmv压缩采用的是vbr方式还是cbr方式,如果是cbr方式,时间和字节是成正比的,currentPosition * 码流(bitrate) = 字节数 如果是vbr方式,你可以先算出总的字节数,还是通过currentPosition * 码流,然后对比已经下载的字节数,可以求出百分比。第三点我没有研究过,不知道是不是跟文件的索引有关系。你可以看看FormatSdk中,关于asf文件的部分,可能会有帮助。
      

  8.   

    非常感谢litaoye 问题解决的差不多了 播放完毕EndOfStream好像没反应  不过我用其他的方式解决了还有一个比较重要的问题就是我怎么从某一时刻开始播放  比如我要从第5分钟开始播放 这个问题还没研究 如果不能解决的话 还要请教你  呵呵
      

  9.   

    use the currentPosition property to Specifies the current position in the media item in seconds
      

  10.   

    用IWMPControls的put_currentPosition可以直接从某一时间开始播。呵呵,可以给分了么?
      

  11.   

    good good study, day day up