Fix ijk track

pull/123/head
FongMi 3 years ago
parent 5877d5b963
commit 0f59895d96
  1. 4
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  2. 47
      ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.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());
}
}

@ -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;
}

Loading…
Cancel
Save