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 f08e8adf1..8c29c3342 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 @@ -347,9 +347,9 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM private void setTrackIjk(Track item) { if (item.isSelected()) { - ijkPlayer.selectTrack(item.getTrack()); + ijkPlayer.selectTrack(item.getType(), item.getTrack()); } else { - ijkPlayer.deselectTrack(item.getTrack()); + ijkPlayer.deselectTrack(item.getType(), item.getTrack()); } } 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 08424b229..b3011df5d 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 @@ -73,8 +73,8 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl private int mVideoSarNum; private int mVideoSarDen; - private FrameLayout contentFrame; - private SubtitleView subtitleView; + private FrameLayout mContentFrame; + private SubtitleView mSubtitleView; public IjkVideoView(Context context) { super(context); @@ -94,8 +94,8 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl private void initVideoView(Context context) { LayoutInflater.from(context).inflate(R.layout.ijk_player_view, this); mAppContext = context.getApplicationContext(); - contentFrame = findViewById(R.id.ijk_content_frame); - subtitleView = findViewById(R.id.ijk_subtitle); + mContentFrame = findViewById(R.id.ijk_content_frame); + mSubtitleView = findViewById(R.id.ijk_subtitle); mVideoWidth = 0; mVideoHeight = 0; mCurrentState = STATE_IDLE; @@ -119,14 +119,14 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl private void setRenderView(IRenderView renderView) { mRenderView = renderView; setResizeMode(mCurrentAspectRatio); - contentFrame.addView(mRenderView.getView(), 0, new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER)); + mContentFrame.addView(mRenderView.getView(), 0, new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER)); mRenderView.addRenderCallback(mSHCallback); mRenderView.setVideoRotation(mVideoRotationDegree); } private void removeRenderView() { - if (mRenderView == null) return; - contentFrame.removeView(mRenderView.getView()); + if (mRenderView != null) return; + mContentFrame.removeView(mRenderView.getView()); mRenderView.removeRenderCallback(mSHCallback); mRenderView = null; } @@ -202,6 +202,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl public void onPrepared(IMediaPlayer mp) { setPreferredTextLanguage(); mCurrentState = STATE_PREPARED; + if (mStartPosition > 0) seekTo(mStartPosition); if (mOnPreparedListener != null) mOnPreparedListener.onPrepared(mIjkPlayer); mVideoWidth = mp.getVideoWidth(); mVideoHeight = mp.getVideoHeight(); @@ -238,15 +239,9 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl if (mOnInfoListener != null) { mOnInfoListener.onInfo(mp, what, extra); } - switch (what) { - case IMediaPlayer.MEDIA_INFO_AUDIO_DECODED_START: - if (mStartPosition > 0) seekTo(mStartPosition); - mStartPosition = 0; - break; - case IMediaPlayer.MEDIA_INFO_VIDEO_ROTATION_CHANGED: - mVideoRotationDegree = extra; - if (mRenderView != null) mRenderView.setVideoRotation(extra); - break; + if (what == IMediaPlayer.MEDIA_INFO_VIDEO_ROTATION_CHANGED) { + mVideoRotationDegree = extra; + if (mRenderView != null) mRenderView.setVideoRotation(extra); } return true; } @@ -282,7 +277,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl private final IMediaPlayer.OnTimedTextListener mOnTimedTextListener = new IMediaPlayer.OnTimedTextListener() { @Override public void onTimedText(IMediaPlayer mp, IjkTimedText text) { - subtitleView.onSubtitleChanged(text.getText()); + mSubtitleView.onSubtitleChanged(text.getText()); } }; @@ -339,6 +334,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl public void release(boolean clearState) { if (mIjkPlayer == null) return; + mSubtitleView.setText(""); removeRenderView(); mIjkPlayer.reset(); mIjkPlayer.release(); @@ -417,7 +413,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl } public SubtitleView getSubtitleView() { - return subtitleView; + return mSubtitleView; } @Override @@ -476,27 +472,32 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl return mIjkPlayer.getSelectedTrack(type); } - public void selectTrack(int track) { + public void selectTrack(int type, int track) { + int selected = getSelectedTrack(type); + if (selected == track) return; long position = getCurrentPosition(); mIjkPlayer.selectTrack(track); - subtitleView.setText(""); + mSubtitleView.setText(""); if (position != 0) seekTo(position); } - public void deselectTrack(int track) { + public void deselectTrack(int type, int track) { + int selected = getSelectedTrack(type); + if (selected != track) return; long position = getCurrentPosition(); mIjkPlayer.deselectTrack(track); - subtitleView.setText(""); + mSubtitleView.setText(""); if (position != 0) seekTo(position); } private void setPreferredTextLanguage() { IjkTrackInfo[] trackInfos = mIjkPlayer.getTrackInfo(); if (trackInfos == null) return; + int selected = getSelectedTrack(ITrackInfo.MEDIA_TRACK_TYPE_TEXT); for (int index = 0; index < trackInfos.length; index++) { IjkTrackInfo trackInfo = trackInfos[index]; if (trackInfo.getTrackType() != ITrackInfo.MEDIA_TRACK_TYPE_TEXT) continue; - if (trackInfo.getLanguage().equals("zh")) { + if (trackInfo.getLanguage().equals("zh") && index != selected) { mIjkPlayer.selectTrack(index); break; }