在Android中使用exoPlayer,很多问题

时间:2015-04-24 07:04:42

标签: android exoplayer

我在我的项目中从媒体播放器切换到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);

                }
            })
    );

问题是我不知道如果我点击列表上的其他曲目如何更改音乐,如果我正在播放曲目编号2,如果我点击曲目编号6更改它。如果有人可以指导我有了这个问题,它将是完美的。

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

4 个答案:

答案 0 :(得分:1)

嘿,如果您在Google的Demo中实现ExoPlayer,那么有关于方法stop()的信息:

  

调用此方法不会重置播放位置。如果这   将使用播放器实例。 *播放另一个视频/音频   它的开始,然后在停止后调用{@code seekTo(0)}   播放器,然后为下一个视频做准备。

此致

答案 1 :(得分: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);

这应该可以解决问题

答案 2 :(得分:0)

也许你需要阅读这篇文章。 https://github.com/google/ExoPlayer/issues/463

我对与你相同的情况感到困惑。阅读帖子后,我发现每次都使用相同的提取器。所以第一首曲目可以播放,当第二首曲目进入第二首时,播放器处于ExoPlayer状态.STATE_BUFFERING。

因此,对于您,我建议您查看DefaultSampleSource以查找是否犯了类似的错误。

答案 3 :(得分: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>