当前位置:编程学习 > wap >>

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

我做了一个易做图器,遇到一个难题。
为了做到易做图,边下边播,我开了一个线程处理下载,另外播放时从这个文件进行读取。
下载:
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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,