From 444e18a6797632e950a0cc8a1822c4d0f87cfb16 Mon Sep 17 00:00:00 2001 From: FongMi Date: Sun, 15 Jan 2023 23:54:11 +0800 Subject: [PATCH] Fix ijk track --- .../danmaku/ijk/media/player/IjkMediaPlayer.java | 12 +++++++++--- .../danmaku/ijk/media/player/ui/IjkVideoView.java | 14 +++++--------- .../danmaku/ijk/media/player/ui/SubtitleView.java | 10 ++++++++++ 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java index 40c319f24..f27b6afd1 100644 --- a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java +++ b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java @@ -199,7 +199,7 @@ public final class IjkMediaPlayer extends AbstractMediaPlayer { if (!mIsNativeInitialized) { native_init(); native_setDot(0); - native_setLogLevel(BuildConfig.DEBUG ? IjkMediaPlayer.IJK_LOG_DEBUG : IjkMediaPlayer.IJK_LOG_SILENT); + native_setLogLevel(BuildConfig.DEBUG ? IjkMediaPlayer.IJK_LOG_INFO : IjkMediaPlayer.IJK_LOG_SILENT); mIsNativeInitialized = true; } } @@ -574,11 +574,17 @@ public final class IjkMediaPlayer extends AbstractMediaPlayer { } public void selectTrack(int track) { - _setStreamSelected(track, true); + try { + _setStreamSelected(track, true); + } catch (Throwable ignored) { + } } public void deselectTrack(int track) { - _setStreamSelected(track, false); + try { + _setStreamSelected(track, false); + } catch (Throwable ignored) { + } } private native void _setStreamSelected(int stream, boolean select); 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 449d2d702..d79494e58 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 @@ -282,9 +282,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) { - if (text != null) { - subtitleView.setText(text.getText()); - } + subtitleView.onSubtitleChanged(text.getText()); } }; @@ -479,17 +477,15 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl } public void selectTrack(int track) { - long position = getCurrentPosition(); + long position = Math.max(mStartPosition, getCurrentPosition()); mIjkPlayer.selectTrack(track); - subtitleView.setText(""); - if (position != 0) seekTo(position); + if (position != 0) postDelayed(() -> seekTo(position), 500); } public void deselectTrack(int track) { - long position = getCurrentPosition(); + long position = Math.max(mStartPosition, getCurrentPosition()); mIjkPlayer.deselectTrack(track); - subtitleView.setText(""); - if (position != 0) seekTo(position); + if (position != 0) postDelayed(() -> seekTo(position), 500); } private void setPreferredTextLanguage() { diff --git a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/SubtitleView.java b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/SubtitleView.java index afab69f27..e064f4ada 100644 --- a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/SubtitleView.java +++ b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/SubtitleView.java @@ -4,6 +4,8 @@ import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; +import android.text.Html; +import android.text.TextUtils; import android.util.AttributeSet; import android.widget.TextView; @@ -33,6 +35,14 @@ public class SubtitleView extends TextView { strokeWidth = Utils.dp2px(getContext(), 0.6f); } + public void onSubtitleChanged(String text) { + if (TextUtils.isEmpty(text)) { + setText(""); + } else { + setText(Html.fromHtml(text.replaceAll("(?:\\r\\n)", "
").replaceAll("(?:\\r)", "
").replaceAll("(?:\\n)", "
").replaceAll("\\{[\\s\\S]*\\}", ""))); + } + } + @Override public void invalidate() { if (isDrawing) return;