Update to Media3

pull/123/head
FongMi 3 years ago
parent 8555833baf
commit 8526a37cc4
  1. 22
      app/build.gradle
  2. 3
      app/src/main/java/com/fongmi/android/tv/bean/Sub.java
  3. 2
      app/src/main/java/com/fongmi/android/tv/event/PlayerEvent.java
  4. 53
      app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java
  5. 20
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  6. 6
      app/src/main/java/com/fongmi/android/tv/ui/custom/CustomSeekView.java
  7. 10
      app/src/main/java/com/fongmi/android/tv/ui/custom/TrackNameProvider.java
  8. 2
      app/src/main/java/com/fongmi/android/tv/ui/custom/dialog/TrackDialog.java
  9. 10
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  10. 8
      app/src/mobile/java/com/fongmi/android/tv/utils/PiP.java
  11. 4
      app/src/mobile/res/layout/activity_detail.xml
  12. 2
      app/src/mobile/res/layout/view_control_seek.xml
  13. 4
      build.gradle
  14. 4
      gradle/wrapper/gradle-wrapper.properties
  15. 4
      settings.gradle

@ -55,6 +55,10 @@ android {
outputFileName = "${variant.productFlavors[0].name}-${variant.productFlavors[1].name}.apk"
}
}
lint {
disable 'UnsafeOptInUsageError'
}
}
dependencies {
@ -64,13 +68,21 @@ dependencies {
implementation project(':catvod')
implementation project(':forcetech')
implementation project(':ijkplayer')
implementation project(':media-lib-database')
implementation project(':media-lib-datasource')
implementation project(':media-lib-datasource-rtmp')
implementation project(':media-lib-decoder-av1')
implementation project(':media-lib-decoder-ffmpeg')
implementation project(':media-lib-exoplayer')
implementation project(':media-lib-exoplayer-dash')
implementation project(':media-lib-exoplayer-hls')
implementation project(':media-lib-exoplayer-rtsp')
implementation project(':media-lib-exoplayer-smoothstreaming')
implementation project(':media-lib-extractor')
implementation project(':media-lib-session')
implementation project(':media-lib-ui')
pythonImplementation project(':pyramid')
implementation project(':exoplayer-library')
implementation project(':exoplayer-extension-av1')
implementation project(':exoplayer-extension-rtmp')
implementation project(':exoplayer-extension-ffmpeg')
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel:2.5.1'
implementation 'androidx.preference:preference:1.2.0'
implementation 'androidx.room:room-runtime:2.5.1'

@ -3,7 +3,8 @@ package com.fongmi.android.tv.bean;
import android.net.Uri;
import android.text.TextUtils;
import com.google.android.exoplayer2.MediaItem;
import androidx.media3.common.MediaItem;
import com.google.gson.annotations.SerializedName;
public class Sub {

@ -1,6 +1,6 @@
package com.fongmi.android.tv.event;
import com.google.android.exoplayer2.Player;
import androidx.media3.common.Player;
import org.greenrobot.eventbus.EventBus;

@ -3,38 +3,39 @@ package com.fongmi.android.tv.player;
import android.graphics.Color;
import android.net.Uri;
import androidx.media3.common.MediaItem;
import androidx.media3.common.MimeTypes;
import androidx.media3.common.PlaybackException;
import androidx.media3.common.Tracks;
import androidx.media3.common.util.Util;
import androidx.media3.database.DatabaseProvider;
import androidx.media3.database.StandaloneDatabaseProvider;
import androidx.media3.datasource.DataSource;
import androidx.media3.datasource.DefaultDataSource;
import androidx.media3.datasource.DefaultHttpDataSource;
import androidx.media3.datasource.HttpDataSource;
import androidx.media3.datasource.cache.Cache;
import androidx.media3.datasource.cache.CacheDataSource;
import androidx.media3.datasource.cache.NoOpCacheEvictor;
import androidx.media3.datasource.cache.SimpleCache;
import androidx.media3.exoplayer.DefaultRenderersFactory;
import androidx.media3.exoplayer.RenderersFactory;
import androidx.media3.exoplayer.source.DefaultMediaSourceFactory;
import androidx.media3.exoplayer.source.MediaSource;
import androidx.media3.exoplayer.trackselection.DefaultTrackSelector;
import androidx.media3.exoplayer.trackselection.TrackSelector;
import androidx.media3.extractor.DefaultExtractorsFactory;
import androidx.media3.extractor.ExtractorsFactory;
import androidx.media3.extractor.ts.DefaultTsPayloadReaderFactory;
import androidx.media3.extractor.ts.TsExtractor;
import androidx.media3.ui.CaptionStyleCompat;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.api.ApiConfig;
import com.fongmi.android.tv.bean.Result;
import com.fongmi.android.tv.bean.Sub;
import com.fongmi.android.tv.utils.FileUtil;
import com.fongmi.android.tv.utils.Prefers;
import com.google.android.exoplayer2.DefaultRenderersFactory;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.PlaybackException;
import com.google.android.exoplayer2.RenderersFactory;
import com.google.android.exoplayer2.Tracks;
import com.google.android.exoplayer2.database.DatabaseProvider;
import com.google.android.exoplayer2.database.StandaloneDatabaseProvider;
import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory;
import com.google.android.exoplayer2.extractor.ExtractorsFactory;
import com.google.android.exoplayer2.extractor.ts.DefaultTsPayloadReaderFactory;
import com.google.android.exoplayer2.extractor.ts.TsExtractor;
import com.google.android.exoplayer2.source.DefaultMediaSourceFactory;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.trackselection.TrackSelector;
import com.google.android.exoplayer2.ui.CaptionStyleCompat;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultDataSource;
import com.google.android.exoplayer2.upstream.DefaultHttpDataSource;
import com.google.android.exoplayer2.upstream.HttpDataSource;
import com.google.android.exoplayer2.upstream.cache.Cache;
import com.google.android.exoplayer2.upstream.cache.CacheDataSource;
import com.google.android.exoplayer2.upstream.cache.NoOpCacheEvictor;
import com.google.android.exoplayer2.upstream.cache.SimpleCache;
import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.Util;
import com.google.common.net.HttpHeaders;
import java.util.ArrayList;

@ -1,6 +1,14 @@
package com.fongmi.android.tv.player;
import androidx.annotation.NonNull;
import androidx.media3.common.PlaybackException;
import androidx.media3.common.Player;
import androidx.media3.common.TrackSelectionOverride;
import androidx.media3.common.util.Util;
import androidx.media3.exoplayer.DefaultLoadControl;
import androidx.media3.exoplayer.ExoPlayer;
import androidx.media3.exoplayer.analytics.AnalyticsListener;
import androidx.media3.ui.PlayerView;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.Constant;
@ -16,14 +24,6 @@ import com.fongmi.android.tv.utils.Notify;
import com.fongmi.android.tv.utils.Prefers;
import com.fongmi.android.tv.utils.ResUtil;
import com.github.catvod.crawler.SpiderDebug;
import com.google.android.exoplayer2.DefaultLoadControl;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.PlaybackException;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.analytics.AnalyticsListener;
import com.google.android.exoplayer2.trackselection.TrackSelectionOverride;
import com.google.android.exoplayer2.ui.StyledPlayerView;
import com.google.android.exoplayer2.util.Util;
import com.google.common.collect.ImmutableList;
import java.util.Formatter;
@ -66,14 +66,14 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM
return this;
}
public void set(StyledPlayerView exo, IjkVideoView ijk) {
public void set(PlayerView exo, IjkVideoView ijk) {
releaseExo();
releaseIjk();
setupExo(exo);
setupIjk(ijk);
}
private void setupExo(StyledPlayerView view) {
private void setupExo(PlayerView view) {
exoPlayer = new ExoPlayer.Builder(App.get()).setLoadControl(new DefaultLoadControl()).setRenderersFactory(ExoUtil.buildRenderersFactory()).setTrackSelector(ExoUtil.buildTrackSelector()).build();
exoPlayer.addAnalyticsListener(this);
exoPlayer.setPlayWhenReady(true);

@ -8,12 +8,12 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.media3.common.util.Util;
import androidx.media3.ui.DefaultTimeBar;
import androidx.media3.ui.TimeBar;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.player.Players;
import com.google.android.exoplayer2.ui.DefaultTimeBar;
import com.google.android.exoplayer2.ui.TimeBar;
import com.google.android.exoplayer2.util.Util;
public class CustomSeekView extends FrameLayout implements TimeBar.OnScrubListener {

@ -5,13 +5,13 @@ import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.media3.common.C;
import androidx.media3.common.Format;
import androidx.media3.common.MimeTypes;
import androidx.media3.common.util.Util;
import androidx.media3.ui.R;
import com.fongmi.android.tv.App;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.ui.R;
import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.Util;
import java.util.Locale;

@ -5,6 +5,7 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.media3.common.Tracks;
import androidx.viewbinding.ViewBinding;
import com.fongmi.android.tv.bean.Track;
@ -13,7 +14,6 @@ import com.fongmi.android.tv.player.Players;
import com.fongmi.android.tv.ui.adapter.TrackAdapter;
import com.fongmi.android.tv.ui.custom.SpaceItemDecoration;
import com.fongmi.android.tv.ui.custom.TrackNameProvider;
import com.google.android.exoplayer2.Tracks;
import java.util.ArrayList;
import java.util.List;

@ -20,6 +20,9 @@ import androidx.core.app.ShareCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.ViewModelProvider;
import androidx.media3.common.C;
import androidx.media3.common.Player;
import androidx.media3.ui.PlayerView;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewbinding.ViewBinding;
@ -60,9 +63,6 @@ import com.fongmi.android.tv.utils.Prefers;
import com.fongmi.android.tv.utils.ResUtil;
import com.fongmi.android.tv.utils.Traffic;
import com.fongmi.android.tv.utils.Utils;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.ui.StyledPlayerView;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import com.permissionx.guolindev.PermissionX;
@ -164,7 +164,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
return mHistory != null && mHistory.getScale() != -1 ? mHistory.getScale() : Prefers.getScale();
}
private StyledPlayerView getExo() {
private PlayerView getExo() {
return Prefers.getRender() == 0 ? mBinding.surface : mBinding.texture;
}
@ -742,7 +742,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
}
private void checkPlayImg(boolean playing) {
mBinding.control.play.setImageResource(playing ? com.google.android.exoplayer2.ui.R.drawable.exo_icon_pause : com.google.android.exoplayer2.ui.R.drawable.exo_icon_play);
mBinding.control.play.setImageResource(playing ? androidx.media3.ui.R.drawable.exo_icon_pause : androidx.media3.ui.R.drawable.exo_icon_play);
mPiP.update(this, playing);
}

@ -11,6 +11,8 @@ import android.os.Build;
import android.util.Rational;
import android.view.View;
import androidx.media3.ui.R;
import java.util.ArrayList;
import java.util.List;
@ -42,10 +44,10 @@ public class PiP {
public void update(Activity activity, boolean play) {
if (!Utils.hasPiP()) return;
List<RemoteAction> actions = new ArrayList<>();
int icon = play ? com.google.android.exoplayer2.ui.R.drawable.exo_icon_pause : com.google.android.exoplayer2.ui.R.drawable.exo_icon_play;
actions.add(new RemoteAction(Icon.createWithResource(activity, com.google.android.exoplayer2.ui.R.drawable.exo_icon_previous), "", "", PendingIntent.getBroadcast(activity, CONTROL_TYPE_PREV, new Intent(ACTION_MEDIA_CONTROL).putExtra(EXTRA_CONTROL_TYPE, CONTROL_TYPE_PREV), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE)));
int icon = play ? R.drawable.exo_icon_pause : R.drawable.exo_icon_play;
actions.add(new RemoteAction(Icon.createWithResource(activity, R.drawable.exo_icon_previous), "", "", PendingIntent.getBroadcast(activity, CONTROL_TYPE_PREV, new Intent(ACTION_MEDIA_CONTROL).putExtra(EXTRA_CONTROL_TYPE, CONTROL_TYPE_PREV), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE)));
actions.add(new RemoteAction(Icon.createWithResource(activity, icon), "", "", PendingIntent.getBroadcast(activity, play ? CONTROL_TYPE_PAUSE : CONTROL_TYPE_PLAY, new Intent(ACTION_MEDIA_CONTROL).putExtra(EXTRA_CONTROL_TYPE, play ? CONTROL_TYPE_PAUSE : CONTROL_TYPE_PLAY), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE)));
actions.add(new RemoteAction(Icon.createWithResource(activity, com.google.android.exoplayer2.ui.R.drawable.exo_icon_next), "", "", PendingIntent.getBroadcast(activity, CONTROL_TYPE_NEXT, new Intent(ACTION_MEDIA_CONTROL).putExtra(EXTRA_CONTROL_TYPE, CONTROL_TYPE_NEXT), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE)));
actions.add(new RemoteAction(Icon.createWithResource(activity, R.drawable.exo_icon_next), "", "", PendingIntent.getBroadcast(activity, CONTROL_TYPE_NEXT, new Intent(ACTION_MEDIA_CONTROL).putExtra(EXTRA_CONTROL_TYPE, CONTROL_TYPE_NEXT), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE)));
activity.setPictureInPictureParams(builder.setActions(actions).build());
}

@ -14,7 +14,7 @@
android:clickable="true"
android:focusable="true">
<com.google.android.exoplayer2.ui.StyledPlayerView
<androidx.media3.ui.PlayerView
android:id="@+id/surface"
style="@style/Player.Vod"
android:layout_width="match_parent"
@ -22,7 +22,7 @@
android:visibility="gone"
app:surface_type="surface_view" />
<com.google.android.exoplayer2.ui.StyledPlayerView
<androidx.media3.ui.PlayerView
android:id="@+id/texture"
style="@style/Player.Vod"
android:layout_width="match_parent"

@ -15,7 +15,7 @@
android:textSize="14sp"
tools:text="00:00:00" />
<com.google.android.exoplayer2.ui.DefaultTimeBar
<androidx.media3.ui.DefaultTimeBar
android:id="@+id/timeBar"
android:layout_width="0dp"
android:layout_height="wrap_content"

@ -1,6 +1,6 @@
plugins {
id 'com.android.application' version '7.2.2' apply false
id 'com.android.library' version '7.2.2' apply false
id 'com.android.application' version '7.4.2' apply false
id 'com.android.library' version '7.4.2' apply false
id 'com.chaquo.python' version '12.0.1' apply false
}

@ -1,6 +1,6 @@
#Wed Jun 22 16:19:43 CST 2022
#Wed Mar 29 12:54:35 CST 2023
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME

@ -23,5 +23,5 @@ include ':pyramid'
include ':forcetech'
include ':ijkplayer'
rootProject.name = "TV"
gradle.ext.exoplayerModulePrefix = 'exoplayer-'
apply from: file("/exo/core_settings.gradle")
gradle.ext.androidxMediaModulePrefix = 'media-'
apply from: file("/media/core_settings.gradle")

Loading…
Cancel
Save