0

我在我的项目中从 mediaplayer 切换到 exoplayer,因为文档很少,我想在这里问一些问题。

我成功创建了播放器:

   exoPlayer = ExoPlayer.Factory.newInstance(1);
   playerControl = new PlayerControl(exoPlayer);

当我点击我的音乐列表时,音乐开始播放:

    musicList.addOnItemTouchListener(
            new RecyclerItemClickListener(getApplicationContext(), new RecyclerItemClickListener.OnItemClickListener() {
                @Override
                public void onItemClick(View view, final int position) {

                    mediaController.show(0);

                    currentPosition = position;
                    URL = musicUrl.get(position);

                    Uri uri = Uri.parse(URL);

                    sampleSource = new DefaultSampleSource(new FrameworkSampleExtractor(getApplicationContext(), uri, null), 2);
                    audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource, null, true);

                    exoPlayer.prepare(audioRenderer);
                    exoPlayer.setPlayWhenReady(true);

                }
            })
    );

问题是我不知道如何更改音乐,如果我单击列表中的另一首曲目,如果我单击曲目 6 来更改曲目编号 2 是否正在播放。如果有人可以指导我解决这个问题这将是完美的。

我真的阅读了 stackoverflow 中的所有主题,但在他们的演示应用程序中找不到解决方案,因为只播放 1 首曲目,他们不会更改它。

4

4 回答 4

1

嘿,如果你在 google 的 Demo 中实现 ExoPlayer,就会有关于方法 stop() 的信息:

调用此方法不会重置播放位置。如果将使用此播放器实例。* 要从头开始播放另一个视频/音频,则应在停止播放器之后和为下一个视频准备之前调用 {@code seekTo(0)}。

问候

于 2015-04-29T10:54:18.720 回答
0

也许我的回答对你有帮助。我在我的应用程序上使用 exoplayer 并做这样的事情。我没有初始化 ExoPlayer,但这很难配置。我只是创建视图

 <com.devbrackets.android.exomedia.ui.widget.EMVideoView
    android:id="@+id/video_player"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

在片段中我初始化它

@Bind(R.id.video_player)
EMVideoView emVideoView;

用黄油刀

对于打开音乐、视频,我使用 recyclerView 创建了 CustomAdapter,我在其中配置了所有内容以播放内容。

所以我的应用看起来像

PlayerActivity>
CustomPlayerFragment>
VideoGridAdapter>
于 2016-08-19T09:51:06.340 回答
0

在 onItemClick 方法的顶部,您应该进行检查并暂停/停止播放器。

if (exoPlayer != null) {
    exoPlayer.setPlayWhenReady(false);
    exoPlayer.stop();
    exoPlayer.seekTo(0);
}
mediaController.show(0);
...
YOUR LOGIC + CHANGE SAMPLE & RENDERERS
...
exoPlayer.prepare(audioRenderer);
exoPlayer.setPlayWhenReady(true);

这应该可以解决问题

于 2016-07-12T14:21:25.007 回答
0
于 2016-08-19T09:41:18.580 回答