diff --git a/app/build.gradle b/app/build.gradle index 0bdb3889d..158f46bed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,7 +14,7 @@ android { //noinspection ExpiredTargetSdkVersion targetSdk 28 versionCode 237 - versionName "0605v3" + versionName "0606" javaCompileOptions { annotationProcessorOptions { arguments = ["room.schemaLocation": "$projectDir/schemas".toString()] diff --git a/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java b/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java index 606ee916c..24baf8fb5 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java @@ -43,6 +43,7 @@ import com.fongmi.android.tv.bean.Channel; import com.fongmi.android.tv.bean.Drm; import com.fongmi.android.tv.bean.Result; import com.fongmi.android.tv.bean.Sub; +import com.fongmi.android.tv.player.custom.NextRenderersFactory; import com.fongmi.android.tv.utils.Sniffer; import com.fongmi.android.tv.utils.UrlUtil; import com.github.catvod.net.OkHttp; diff --git a/app/src/main/java/com/fongmi/android/tv/player/custom/NextRenderersFactory.java b/app/src/main/java/com/fongmi/android/tv/player/custom/NextRenderersFactory.java new file mode 100644 index 000000000..f4d01fefa --- /dev/null +++ b/app/src/main/java/com/fongmi/android/tv/player/custom/NextRenderersFactory.java @@ -0,0 +1,56 @@ +package com.fongmi.android.tv.player.custom; + +import android.content.Context; +import android.os.Handler; + +import androidx.annotation.NonNull; +import androidx.media3.common.util.Log; +import androidx.media3.exoplayer.DefaultRenderersFactory; +import androidx.media3.exoplayer.Renderer; +import androidx.media3.exoplayer.audio.AudioRendererEventListener; +import androidx.media3.exoplayer.audio.AudioSink; +import androidx.media3.exoplayer.mediacodec.MediaCodecSelector; +import androidx.media3.exoplayer.video.VideoRendererEventListener; + +import java.util.ArrayList; + +import io.github.anilbeesetti.nextlib.media3ext.ffdecoder.FfmpegAudioRenderer; +import io.github.anilbeesetti.nextlib.media3ext.ffdecoder.FfmpegVideoRenderer; + +public class NextRenderersFactory extends DefaultRenderersFactory { + + private static final String TAG = NextRenderersFactory.class.getSimpleName(); + + public NextRenderersFactory(@NonNull Context context) { + super(context); + } + + @Override + protected void buildAudioRenderers(@NonNull Context context, int extensionRendererMode, @NonNull MediaCodecSelector mediaCodecSelector, boolean enableDecoderFallback, @NonNull AudioSink audioSink, @NonNull Handler eventHandler, @NonNull AudioRendererEventListener eventListener, @NonNull ArrayList out) { + super.buildAudioRenderers(context, extensionRendererMode, mediaCodecSelector, enableDecoderFallback, audioSink, eventHandler, eventListener, out); + int extensionRendererIndex = out.size(); + if (extensionRendererMode == EXTENSION_RENDERER_MODE_PREFER) { + extensionRendererIndex--; + } + try { + Renderer renderer = new FfmpegAudioRenderer(eventHandler, eventListener, audioSink); + out.add(extensionRendererIndex++, renderer); + Log.i(TAG, "Loaded FfmpegAudioRenderer."); + } catch (Exception e) { + throw new RuntimeException("Error instantiating Ffmpeg extension", e); + } + } + + @Override + protected void buildVideoRenderers(@NonNull Context context, int extensionRendererMode, @NonNull MediaCodecSelector mediaCodecSelector, boolean enableDecoderFallback, @NonNull Handler eventHandler, @NonNull VideoRendererEventListener eventListener, long allowedVideoJoiningTimeMs, @NonNull ArrayList out) { + super.buildVideoRenderers(context, extensionRendererMode, mediaCodecSelector, enableDecoderFallback, eventHandler, eventListener, allowedVideoJoiningTimeMs, out); + int extensionRendererIndex = out.size(); + try { + Renderer renderer = new FfmpegVideoRenderer(allowedVideoJoiningTimeMs, eventHandler, eventListener, MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY); + out.add(extensionRendererIndex++, renderer); + Log.i(TAG, "Loaded FfmpegVideoRenderer."); + } catch (Exception e) { + throw new RuntimeException("Error instantiating Ffmpeg extension", e); + } + } +} diff --git a/app/src/main/java/com/fongmi/android/tv/player/TrackNameProvider.java b/app/src/main/java/com/fongmi/android/tv/player/custom/TrackNameProvider.java similarity index 99% rename from app/src/main/java/com/fongmi/android/tv/player/TrackNameProvider.java rename to app/src/main/java/com/fongmi/android/tv/player/custom/TrackNameProvider.java index ff0ecc8f9..3b4a17e9f 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/TrackNameProvider.java +++ b/app/src/main/java/com/fongmi/android/tv/player/custom/TrackNameProvider.java @@ -1,4 +1,4 @@ -package com.fongmi.android.tv.player; +package com.fongmi.android.tv.player.custom; import android.content.res.Resources; import android.text.TextUtils; diff --git a/app/src/main/java/com/fongmi/android/tv/ui/dialog/TrackDialog.java b/app/src/main/java/com/fongmi/android/tv/ui/dialog/TrackDialog.java index 3cb57fa96..abd49925a 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/dialog/TrackDialog.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/dialog/TrackDialog.java @@ -20,7 +20,7 @@ import com.fongmi.android.tv.bean.Sub; import com.fongmi.android.tv.bean.Track; import com.fongmi.android.tv.databinding.DialogTrackBinding; import com.fongmi.android.tv.player.Players; -import com.fongmi.android.tv.player.TrackNameProvider; +import com.fongmi.android.tv.player.custom.TrackNameProvider; import com.fongmi.android.tv.ui.adapter.TrackAdapter; import com.fongmi.android.tv.ui.custom.SpaceItemDecoration; import com.fongmi.android.tv.utils.FileChooser;