我希望通过p2p共享歌曲,可是用media player控件播放歌曲时,总是播开始缓冲的数据可以,后面的数据就无法播放了。谁有好的办法来解决这个问题,或者更好的用media player控件播放p2p歌曲的方案啊,十分感谢。

解决方案 »

  1.   

    MediaPlayer本身应该不支持P2P协议,但是你可以自己写一个P2P层,将流数据写在本地文件里,用MediaPlayer播放就行了,只要写文件进度比播放进度快就行了
      

  2.   

    CWMPPlayer4 m_ocx_mpe;
    CWMPMedia m_media;
    CWMPPlaylist m_playlist;
    CWMPSettings m_set;m_media = static_cast <CWMPMedia>(m_ocx_mpe.newMedia("g:\\__心太软.mp3"));
    m_playlist.insertItem(0, m_media);
    m_ocx_mpe.SetCurrentPlaylist(m_playlist);
    m_set = (CWMPSettings)m_ocx_mpe.GetSettings();
    m_set.SetAutoStart(true); 
    我设置接收到1分钟的数据时开始播放,并继续接收数据,可是每次播放到1分钟就自动停了,后面的数据无法播放,选择重新开始播放,才会把完整的歌曲播放完毕。
    是不是media player控件一开始就初始化读取歌曲的长度,以后即使有新数据,也不自动更新,所以以后的数据无法播放?怎么解决啊?
      

  3.   

    不知道是不是该这样:
    while()
    {
    接收文件片
    打开文件
    写入文件片
    关闭文件
    }
    可能播放器一开始打开为下载完的音乐后,可以先加载固定长度,而这个固定长度却比你当前的音乐文件还长,就不再加载了
      

  4.   


    都已经P2P了,还用什么控件?当然是自己实现播放器了!如果是要解码 ASF 格式,去微软网站下载《Windows Media Format SDK》看看吧。
      

  5.   

    p2p下载只是整个很小的一个应用,其他很多功能都需要播放器,而且都是用的控件,不可能为了一个p2p把其他的都改了
      

  6.   

    Media Player是采用和DirectShow的Filter方式,不知道其是否有支持p2p的source filter
      

  7.   

    可以用ds开发filter的方式来扩展Media Player
      

  8.   

    你写文件片的时候应该及时关闭文件句柄while()
    {
    //接收数据片
    //打开文件
    //写入数据片
    //关闭文件
    }我觉得:
    media   player是能先读取固定长度的数据作为缓冲,这个固定长度可能比你的当前文件长,所以media   player就不会再去读取了
      

  9.   

    跟关闭文件没关系,我是共享方式操作的。看来是没有办法解决了吗?是不是只能放弃media player控件了?