我在我的项目中从媒体播放器切换到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首曲目,他们不会改变它。
答案 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>