难题!在线音频播放器,如何通过流的方式,边写边读?

airfei10 2011-08-11 08:57:43
我做了一个在线播放器,遇到一个难题。
为了做到在线播放,边下边播,我开了一个线程处理下载,另外播放时从这个文件进行读取。
下载:
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中的流保持边下载边刷新,而不影响播放,谢谢。
...全文
263 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
airfei10 2011-08-11
  • 打赏
  • 举报
回复
感谢回复:
系统自带的mediaplayer,是支持在线音频、视频,我是用的HTTP,但是mediaplayer需要缓冲到一定的进度才能播放出声音。

比如一个mp3 2MB,它需要缓冲到40%,左右才能出声音。

我的效果边播边下载,只要用户下载了64K的数据(比较小的数据量)就开始播声音,现在就是遇到上面的困难,继续寻解答。
儿大不由爷 2011-08-11
  • 打赏
  • 举报
回复
mMediaPlayer 是系统自带的那个吧, 系统自带的mediaplayer直接就支持在线的视频,音频播放的.

下面是支持的协议:
RTSP (RTP, SDP)
HTTP progressive streaming
HTTP live streaming draft protocol (Android 3.0 and above)
现在还不支持HTTPS

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧