1

我正在尝试在 PageViewer 中流式传输 2-3 秒 .ogg 文件,我需要能够缓冲 3-4 个 .ogg 文件,以便在他们单击预览时立即显示。

示例:加载缩略图的 Gridview 用户单击任何缩略图 Activity 加载到 ViewPager ViewPager 显示图像和播放按钮 单击播放 MediaPlayer 将从 URL 加载音频 当我单击播放时,它有 1-4 秒的延迟直到播放开始我滑动到下一页并点击播放按钮,再延迟 1-4 秒

是否可以预加载/缓冲接下来的 2-3 个 ViewPager 选项卡,以便即时播放?

这些文件很小,25-100kb。

公共无效playmusic(){

    try {

        this.mediaPlayer = new MediaPlayer();
        if (mediaPlayer.isPlaying() || mediaPlayer != null) {
            this.stopAudio();
            this.mediaPlayer.stop();
        }
        this.mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        this.mediaPlayer.setDataSource(arrayURLAudio[getPos()]);
        this.mediaPlayer.prepare();
        this.mediaPlayer.start();
    } catch (IOException ioe) {

    }catch (IllegalThreadStateException itse){

    }catch (Exception e){

    }

    pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i2) {

        }

        @Override
        public void onPageSelected(int i) {
            if (mediaPlayer != null) {
                stopAudio();
            }
            textView.setText(arrayURLAnimalName[i]);
            setPos(i);

        }

        @Override
        public void onPageScrollStateChanged(int i) {

        }
    });

//更新:

我试图创建一个 MediaPlayer[] 数组,但这会为空。

实例变量:MediaPlayer[] arrayMediaPlayer;

创建:

    arrayMediaPlayer = new MediaPlayer[arrayURLAudio.length];

    for (int i = 0; i < arrayURLAudio.length; i++) {
        try {
              arrayMediaPlayer[i].setDataSource(arrayURLAudio[i]);
        } catch (IOException ioe) {
        } catch (NullPointerException npe) {
        };

如果我尝试打印出我的 arrayMediaPlayer[i],它会显示为 null。

4

1 回答 1

1

您只在第一个代码片段中创建了一个 MediaPlayer。然后创建一个 MediaPlayer 类型的空数组,并在添加播放器之前尝试访问它。因此,要使其正常工作,您需要在设置数据源之前使用新的 MediaPlayer 设置 arrayMediaPlayer[i]。

于 2014-01-21T03:52:37.467 回答