Android ExoPlayer-一个接一个地播放10个文件
我有10个视频我需要播放,一旦一个完成,下一个开始播放 我用的是,我用的是这个例子。 我可以播放一个视频,但如果我尝试播放下一个视频,它将无法启动 如果我试图控制玩家,而玩家又开始玩,它就会崩溃Android ExoPlayer-一个接一个地播放10个文件,android,video,exoplayer,Android,Video,Exoplayer,我有10个视频我需要播放,一旦一个完成,下一个开始播放 我用的是,我用的是这个例子。 我可以播放一个视频,但如果我尝试播放下一个视频,它将无法启动 如果我试图控制玩家,而玩家又开始玩,它就会崩溃 private void loadvideo() { Uri uri = Uri.parse(VIDEO_LIBRARY_URL + currentVideo + ".mp4"); sampleSource = new FrameworkSampleSource(this, uri, n
private void loadvideo() {
Uri uri = Uri.parse(VIDEO_LIBRARY_URL + currentVideo + ".mp4");
sampleSource = new FrameworkSampleSource(this, uri, null, 2);
// 1. Instantiate the player.
// 2. Construct renderers.
videoRenderer = new MediaCodecVideoTrackRenderer(sampleSource, MediaCodec.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource);
// 3. Inject the renderers through prepare.
player.prepare(videoRenderer, audioRenderer);
// 4. Pass the surface to the video renderer.
surface = surfaceView.getHolder().getSurface();
player.sendMessage(videoRenderer, MediaCodecVideoTrackRenderer.MSG_SET_SURFACE, surface);
// 5. Start playback.
player.setPlayWhenReady(true);
player.addListener(new ExoPlayer.Listener() {
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
Log.d(TAG, "onPlayerStateChanged + " + playbackState);
if (playbackState == ExoPlayer.STATE_ENDED) {
currentVideo++;
loadNextVideo();
}
}
@Override
public void onPlayWhenReadyCommitted() {
}
@Override
public void onPlayerError(ExoPlaybackException error) {
}
});
}
我做错了什么?
如何播放视频
谢谢。好的,回答我自己的问题。 在这个例子中,googleinit在OnResume()上调用ExoPlayer。 我必须为每一个这样的视频重新初始化:
player = ExoPlayer.Factory.newInstance(2, 1000, 5000);
如果有人有更好的想法,请告诉我。您可以重复使用ExoPlayer,直到调用release(),然后就不应该再使用它了 要更改当前播放的媒体,您基本上需要执行以下步骤:
// ...enable autoplay...
player.stop();
player.seekTo(0L);
player.prepare(renderers);
创建渲染器有点复杂,但这是您应该遵循的流程,播放器应该能够背靠背播放视频。我正在使用Exoplayer更改mp4视频成功。我在演示中使用了这个示例。 1.DemoPlayer.java中的演示项目:
private final RendererBuilder rendererBuilder;
//remove final,then modify that:
private RendererBuilder rendererBuilder;
//and add the set method:
public void setRendererBuilder(RendererBuilder rendererBuilder){
this.rendererBuilder = rendererBuilder;
}
//finally,add stop method
public void stop(){
player.stop();
}
2.PlayerActivity.java中的演示项目:
添加方法:
private void changeVideo(){
player.stop();
player.seekTo(0L);
//you must change your contentUri before invoke getRendererBuilder();
player.setRendererBuilder(getRendererBuilder());
player.prepare();
playerNeedsPrepare = false;
}
记住在调用changeVideo方法之前更改参数contentUri。还有另一个解决方案,您可以参考ConcatenatingMediaSource来实现自动播放下一个媒体 在演示应用程序示例中: 1.启动ExoPlayer 2.选择播放列表
3.选择Cats->Dogs使用
连接MediaSource
按顺序播放文件。
例如,要播放2个媒体URI(firstVideoUri
和secondVideoUri
),请使用以下代码:
MediaSource firstSource =
new ExtractorMediaSource.Factory(...).createMediaSource(firstVideoUri);
MediaSource secondSource =
new ExtractorMediaSource.Factory(...).createMediaSource(secondVideoUri);
ConcatenatingMediaSource concatenatedSource =
new ConcatenatingMediaSource(firstSourceTwice, secondSource);
然后使用
concatenatedSource
按顺序播放媒体文件。崩溃时会出现什么错误?还有,loadNextVideo()代码是什么样子的。这并不能解决我的问题:(@Marky17在实例化新实例调用releasePlayer()之前)方法。@Shahar Hi我正在尝试使用ExoPlayer创建一个简单的视频播放器程序,但尚未完成,我已检查了您的Github存储库,但未在其中找到您的ExoPlayer示例…请发布您的示例并与我共享链接…因此我将从中学习…我也遇到了同样的问题,此解决方案对我来说并不明显在再次准备渲染器之前,您必须搜索0。谢谢。