我做了一个在线播放器,遇到一个难题。
为了做到在线播放,边下边播,我开了一个线程处理下载,另外播放时从这个文件进行读取。
下载:FileOutputStream output = new FileOutputStream(m_file);                        byte[] buffer = new byte[1024];                        int numRead;                        while ((numRead = input.read(buffer)) != -1 && !m_done) {                                output.write(buffer, 0, numRead);                                m_current_write_pos += numRead;                        }播放:mMediaPlayer.reset();                                                File file = new File(mTempFilePath);                                                 FileInputStream fis = new FileInputStream(file);                                                mMediaPlayer.setDataSource(fis.getFD());                                                fis.close();                                                mMediaPlayer.prepare();                                                                                 mMediaPlayer.seekTo(m_current_position);                                                mMediaPlayer.start();
但是问题出现了。我原意是想做到,下载写文件A,播放时读文件A的流。但是现在的效果是,播放时只能播放到mMediaPlayer.setDataSource时的流的长度,播完后就触发onCompletion。简单来说就是setDataSource中的文件流没有得到刷新。我现在的做法是在触发onCompletion后,重新setDataSource,但是这样播放时就会有短暂的“卡音”现象。请问各位有好的解决办法没有,或者说怎么对setDataSource中的流保持边下载边刷新,而不影响播放,谢谢。

解决方案 »

  1.   

    mMediaPlayer 是系统自带的那个吧, 系统自带的mediaplayer直接就支持在线的视频,音频播放的.下面是支持的协议:
        RTSP (RTP, SDP)
        HTTP progressive streaming
        HTTP live streaming draft protocol (Android 3.0 and above)
        现在还不支持HTTPS
      

  2.   

    感谢回复:
    系统自带的mediaplayer,是支持在线音频、视频,我是用的HTTP,但是mediaplayer需要缓冲到一定的进度才能播放出声音。比如一个mp3 2MB,它需要缓冲到40%,左右才能出声音。我的效果边播边下载,只要用户下载了64K的数据(比较小的数据量)就开始播声音,现在就是遇到上面的困难,继续寻解答。