Remove next

pull/586/head
FongMi 1 year ago
parent 1f9a63e909
commit 2a2f1e2cab
  1. 4
      app/build.gradle
  2. 8
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java
  3. 8
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  4. 8
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  5. 2
      app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java
  6. 3
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  7. 6
      app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java
  8. 61
      app/src/main/java/com/fongmi/android/tv/player/exo/NextRenderersFactory.java
  9. 8
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  10. 8
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java

@ -14,7 +14,7 @@ android {
//noinspection ExpiredTargetSdkVersion
targetSdk 28
versionCode 249
versionName "2.4.9"
versionName "0819"
javaCompileOptions {
annotationProcessorOptions {
arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
@ -98,7 +98,6 @@ dependencies {
implementation 'androidx.media:media:1.7.0'
implementation 'androidx.room:room-runtime:2.6.1'
implementation 'cat.ereza:customactivityoncrash:2.4.0'
implementation('com.github.anilbeesetti.nextlib:nextlib-media3ext:0.8.2') { exclude group: 'androidx.media3', module: 'media3-exoplayer' }
implementation 'com.github.bassaer:materialdesigncolors:1.0.0'
implementation 'com.github.bumptech.glide:glide:4.16.0'
implementation 'com.github.bumptech.glide:annotations:4.16.0'
@ -138,6 +137,7 @@ dependencies {
implementation(ext: 'aar', name: 'lib-datasource-rtmp-release', group: 'fongmi', version: 'release')
implementation(ext: 'aar', name: 'lib-decoder-release', group: 'fongmi', version: 'release')
implementation(ext: 'aar', name: 'lib-decoder-av1-release', group: 'fongmi', version: 'release')
implementation(ext: 'aar', name: 'lib-decoder-ffmpeg-release', group: 'fongmi', version: 'release')
implementation(ext: 'aar', name: 'lib-exoplayer-release', group: 'fongmi', version: 'release')
implementation(ext: 'aar', name: 'lib-exoplayer-dash-release', group: 'fongmi', version: 'release')
implementation(ext: 'aar', name: 'lib-exoplayer-hls-release', group: 'fongmi', version: 'release')

@ -195,7 +195,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List
}
private void onDecode() {
mPlayers.toggleDecode(mBinding.exo);
mPlayers.toggleDecode();
setDecode();
onReset();
}
@ -345,9 +345,9 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List
}
private void onCheck(ErrorEvent event) {
if (event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode()));
else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED) mPlayers.init(mBinding.exo);
else mPlayers.toggleDecode(mBinding.exo);
if (event.getCode() == PlaybackException.ERROR_CODE_IO_UNSPECIFIED || event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode()));
else if (event.getCode() == PlaybackException.ERROR_CODE_BEHIND_LIVE_WINDOW) mPlayers.seekTo(C.TIME_UNSET);
else mPlayers.toggleDecode();
mPlayers.setMediaItem();
setDecode();
}

@ -385,7 +385,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
}
private void onDecode() {
mPlayers.toggleDecode(mBinding.exo);
mPlayers.toggleDecode();
setDecode();
fetch();
}
@ -747,9 +747,9 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
}
private void onCheck(ErrorEvent event) {
if (event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode()));
else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED) mPlayers.init(mBinding.exo);
else mPlayers.toggleDecode(mBinding.exo);
if (event.getCode() == PlaybackException.ERROR_CODE_IO_UNSPECIFIED || event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode()));
else if (event.getCode() == PlaybackException.ERROR_CODE_BEHIND_LIVE_WINDOW) mPlayers.seekTo(C.TIME_UNSET);
else mPlayers.toggleDecode();
mPlayers.setMediaItem();
setDecode();
}

@ -843,7 +843,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
}
private void onDecode() {
mPlayers.toggleDecode(mBinding.exo);
mPlayers.toggleDecode();
setDecode();
onRefresh();
}
@ -1141,9 +1141,9 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
}
private void onCheck(ErrorEvent event) {
if (event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode()));
else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED) mPlayers.init(mBinding.exo);
else mPlayers.toggleDecode(mBinding.exo);
if (event.getCode() == PlaybackException.ERROR_CODE_IO_UNSPECIFIED || event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode()));
else if (event.getCode() == PlaybackException.ERROR_CODE_BEHIND_LIVE_WINDOW) mPlayers.seekTo(C.TIME_UNSET);
else mPlayers.toggleDecode();
mPlayers.setMediaItem();
setDecode();
}

@ -54,7 +54,7 @@ public class ErrorEvent {
}
public boolean isExo() {
return code / 1000 == 3 || code / 1000 == 4;
return code / 1000 == 2 || code / 1000 == 3 || code / 1000 == 4;
}
public String getMsg() {

@ -277,9 +277,8 @@ public class Players implements Player.Listener, ParseCallback {
return setSpeed(speed);
}
public void toggleDecode(PlayerView exo) {
public void toggleDecode() {
Setting.putDecode(decode = isHard() ? SOFT : HARD);
init(exo);
}
public String getPositionTime(long time) {

@ -1,5 +1,8 @@
package com.fongmi.android.tv.player.exo;
import static androidx.media3.exoplayer.DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON;
import static androidx.media3.exoplayer.DefaultRenderersFactory.EXTENSION_RENDERER_MODE_PREFER;
import android.content.Context;
import android.graphics.Color;
import android.net.Uri;
@ -14,6 +17,7 @@ import androidx.media3.common.TrackSelectionOverride;
import androidx.media3.common.Tracks;
import androidx.media3.common.util.Util;
import androidx.media3.exoplayer.DefaultLoadControl;
import androidx.media3.exoplayer.DefaultRenderersFactory;
import androidx.media3.exoplayer.ExoPlayer;
import androidx.media3.exoplayer.LoadControl;
import androidx.media3.exoplayer.RenderersFactory;
@ -52,7 +56,7 @@ public class ExoUtil {
}
public static RenderersFactory buildRenderersFactory(int decode) {
return new NextRenderersFactory(App.get(), decode);
return new DefaultRenderersFactory(App.get()).setEnableDecoderFallback(true).setExtensionRendererMode(Players.isHard(decode) ? EXTENSION_RENDERER_MODE_ON : EXTENSION_RENDERER_MODE_PREFER);
}
public static MediaSource.Factory buildMediaSourceFactory() {

@ -1,61 +0,0 @@
package com.fongmi.android.tv.player.exo;
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 com.fongmi.android.tv.player.Players;
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, int decode) {
super(context);
setEnableDecoderFallback(true);
setExtensionRendererMode(Players.isHard(decode) ? EXTENSION_RENDERER_MODE_ON : EXTENSION_RENDERER_MODE_PREFER);
}
@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<Renderer> 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<Renderer> out) {
super.buildVideoRenderers(context, extensionRendererMode, mediaCodecSelector, enableDecoderFallback, eventHandler, eventListener, allowedVideoJoiningTimeMs, out);
if (extensionRendererMode == EXTENSION_RENDERER_MODE_ON) return;
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);
}
}
}

@ -416,7 +416,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
}
private void onDecode() {
mPlayers.toggleDecode(mBinding.exo);
mPlayers.toggleDecode();
setR1Callback();
setDecode();
fetch();
@ -806,9 +806,9 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
}
private void onCheck(ErrorEvent event) {
if (event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode()));
else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED) mPlayers.init(mBinding.exo);
else mPlayers.toggleDecode(mBinding.exo);
if (event.getCode() == PlaybackException.ERROR_CODE_IO_UNSPECIFIED || event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode()));
else if (event.getCode() == PlaybackException.ERROR_CODE_BEHIND_LIVE_WINDOW) mPlayers.seekTo(C.TIME_UNSET);
else mPlayers.toggleDecode();
mPlayers.setMediaItem();
setDecode();
}

@ -773,7 +773,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
}
private void onDecode() {
mPlayers.toggleDecode(mBinding.exo);
mPlayers.toggleDecode();
setR1Callback();
setDecode();
onRefresh();
@ -1161,9 +1161,9 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
}
private void onCheck(ErrorEvent event) {
if (event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode()));
else if (event.getCode() == PlaybackException.ERROR_CODE_DECODER_INIT_FAILED) mPlayers.init(mBinding.exo);
else mPlayers.toggleDecode(mBinding.exo);
if (event.getCode() == PlaybackException.ERROR_CODE_IO_UNSPECIFIED || event.getCode() >= PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED && event.getCode() <= PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED) mPlayers.setFormat(ExoUtil.getMimeType(event.getCode()));
else if (event.getCode() == PlaybackException.ERROR_CODE_BEHIND_LIVE_WINDOW) mPlayers.seekTo(C.TIME_UNSET);
else mPlayers.toggleDecode();
mPlayers.setMediaItem();
setDecode();
}

Loading…
Cancel
Save