From 984e4c539d3d0c0402610110f9d734dda024a5dd Mon Sep 17 00:00:00 2001 From: FongMi Date: Wed, 23 Nov 2022 13:06:10 +0800 Subject: [PATCH] Support ijk seek progress --- .../com/fongmi/android/tv/player/Players.java | 20 +++++++++++++------ .../ijk/media/player/ui/IjkVideoView.java | 4 +++- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/fongmi/android/tv/player/Players.java b/app/src/main/java/com/fongmi/android/tv/player/Players.java index b1136a2df..21806e4c0 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/Players.java +++ b/app/src/main/java/com/fongmi/android/tv/player/Players.java @@ -244,18 +244,22 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM private void setMediaSource(Result result) { SpiderDebug.log(errorCode + "," + result.getUrl() + "," + result.getHeaders()); - if (isExo()) exoPlayer.setMediaSource(ExoUtil.getSource(result, errorCode)); if (isIjk()) ijkPlayer.setMediaSource(result.getPlayUrl() + result.getUrl(), result.getHeaders()); - if (isExo()) exoPlayer.prepare(); - PlayerEvent.state(0); + else if (isExo()) { + exoPlayer.setMediaSource(ExoUtil.getSource(result, errorCode)); + exoPlayer.prepare(); + PlayerEvent.state(0); + } } private void setMediaSource(Map headers, String url) { SpiderDebug.log(errorCode + "," + url + "," + headers); - if (isExo()) exoPlayer.setMediaSource(ExoUtil.getSource(headers, url, errorCode)); if (isIjk()) ijkPlayer.setMediaSource(url, headers); - if (isExo()) exoPlayer.prepare(); - PlayerEvent.state(0); + else if (isExo()) { + exoPlayer.setMediaSource(ExoUtil.getSource(headers, url, errorCode)); + exoPlayer.prepare(); + PlayerEvent.state(0); + } } @Override @@ -288,10 +292,14 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM @Override public boolean onInfo(IMediaPlayer mp, int what, int extra) { switch (what) { + case IMediaPlayer.MEDIA_INFO_AUDIO_DECODED_START: + PlayerEvent.state(0); + return true; case IMediaPlayer.MEDIA_INFO_BUFFERING_START: PlayerEvent.state(Player.STATE_BUFFERING); return true; case IMediaPlayer.MEDIA_INFO_BUFFERING_END: + case IMediaPlayer.MEDIA_INFO_AUDIO_SEEK_RENDERING_START: PlayerEvent.state(Player.STATE_READY); return true; default: diff --git a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java index e64e5ffd9..77f909144 100644 --- a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java +++ b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java @@ -418,7 +418,9 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl @Override public void seekTo(int msec) { - if (isInPlaybackState()) mIjkPlayer.seekTo(msec); + if (!isInPlaybackState()) return; + mInfoListener.onInfo(mIjkPlayer, IMediaPlayer.MEDIA_INFO_BUFFERING_START, 0); + mIjkPlayer.seekTo(msec); } public void seekTo(long msec) {