难题!在线音频播放器,如何通过流的方式,边写边读?
我做了一个易做图器,遇到一个难题。为了做到易做图,边下边播,我开了一个线程处理下载,另外播放时从这个文件进行读取。
下载:
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中的流保持边下载边刷新,而不影响播放,谢谢。 --------------------编程问答-------------------- mMediaPlayer 是系统自带的那个吧, 系统自带的mediaplayer直接就支持在线的视频,音频播放的.
下面是支持的协议:
RTSP (RTP, SDP)
HTTP progressive streaming
HTTP live streaming draft protocol (Android 3.0 and above)
现在还不支持HTTPS --------------------编程问答-------------------- 感谢回复:
系统自带的mediaplayer,是支持在线音频、视频,我是用的HTTP,但是mediaplayer需要缓冲到一定的进度才能播放出声音。
比如一个mp3 2MB,它需要缓冲到40%,左右才能出声音。
我的效果边播边下载,只要用户下载了64K的数据(比较小的数据量)就开始播声音,现在就是遇到上面的困难,继续寻解答。
补充:移动开发 , Android