pull/589/head
FongMi 1 year ago
parent f0b7c5c20c
commit 8633498fea
  1. 1
      app/build.gradle
  2. 7
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java
  3. 29
      app/src/leanback/res/layout/activity_setting_player.xml
  4. 41
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  5. 6
      app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java
  6. 13
      app/src/main/java/com/fongmi/android/tv/player/exo/MediaSourceFactory.java
  7. 7
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java
  8. 29
      app/src/mobile/res/layout/fragment_setting_player.xml

@ -109,7 +109,6 @@ dependencies {
implementation 'com.guolindev.permissionx:permissionx:1.8.0'
implementation 'com.hierynomus:smbj:0.14.0'
implementation 'io.antmedia:rtmp-client:3.2.0'
implementation('io.github.peerless2012:ass-media:0.2.1') { exclude group: 'androidx.media3' }
implementation 'javax.servlet:javax.servlet-api:3.1.0'
implementation 'org.eclipse.jetty:jetty-client:8.1.21.v20160908'
implementation('org.eclipse.jetty:jetty-server:8.1.21.v20160908') { exclude group: 'org.eclipse.jetty.orbit', module: 'javax.servlet' }

@ -49,7 +49,6 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B
format = new DecimalFormat("0.#");
mBinding.render.requestFocus();
mBinding.uaText.setText(Setting.getUa());
mBinding.libassText.setText(getSwitch(Setting.isLibAss()));
mBinding.tunnelText.setText(getSwitch(Setting.isTunnel()));
mBinding.speedText.setText(format.format(Setting.getSpeed()));
mBinding.bufferText.setText(String.valueOf(Setting.getBuffer()));
@ -69,7 +68,6 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B
mBinding.scale.setOnClickListener(this::setScale);
mBinding.speed.setOnClickListener(this::onSpeed);
mBinding.buffer.setOnClickListener(this::onBuffer);
mBinding.libass.setOnClickListener(this::setLibAss);
mBinding.render.setOnClickListener(this::setRender);
mBinding.tunnel.setOnClickListener(this::setTunnel);
mBinding.caption.setOnClickListener(this::setCaption);
@ -126,11 +124,6 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B
Setting.putBuffer(times);
}
private void setLibAss(View view) {
Setting.putLibAss(!Setting.isLibAss());
mBinding.libassText.setText(getSwitch(Setting.isLibAss()));
}
private void setRender(View view) {
int index = Setting.getRender();
Setting.putRender(index = index == render.length - 1 ? 0 : ++index);

@ -100,35 +100,6 @@
</LinearLayout>
<LinearLayout
android:id="@+id/libass"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/selector_item"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/player_libass"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/libassText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="開" />
</LinearLayout>
<LinearLayout
android:id="@+id/buffer"
android:layout_width="match_parent"

@ -23,7 +23,7 @@ import androidx.media3.common.C;
import androidx.media3.common.PlaybackException;
import androidx.media3.common.Player;
import androidx.media3.common.Tracks;
import androidx.media3.common.util.Size;
import androidx.media3.common.VideoSize;
import androidx.media3.exoplayer.ExoPlayer;
import androidx.media3.exoplayer.drm.FrameworkMediaDrm;
import androidx.media3.exoplayer.util.EventLogger;
@ -66,9 +66,6 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import io.github.peerless2012.ass.media.AssHandler;
import io.github.peerless2012.ass.media.parser.AssSubtitleParserFactory;
import io.github.peerless2012.ass.media.type.AssRenderType;
import master.flame.danmaku.controller.DrawHandler;
import master.flame.danmaku.danmaku.model.BaseDanmaku;
import master.flame.danmaku.danmaku.model.DanmakuTimer;
@ -95,6 +92,7 @@ public class Players implements Player.Listener, ParseCallback, DrawHandler.Call
private ExoPlayer exoPlayer;
private ParseJob parseJob;
private PlayerView view;
private VideoSize size;
private List<Sub> subs;
private String format;
private String url;
@ -103,7 +101,6 @@ public class Players implements Player.Listener, ParseCallback, DrawHandler.Call
private int decode;
private int retry;
private Size size;
public static Players create(Activity activity) {
Players player = new Players(activity);
@ -135,11 +132,8 @@ public class Players implements Player.Listener, ParseCallback, DrawHandler.Call
}
private void setPlayer(PlayerView view) {
AssHandler assHandler = new AssHandler(AssRenderType.OPEN_GL);
AssSubtitleParserFactory subtitleParserFactory = new AssSubtitleParserFactory(assHandler);
exoPlayer = new ExoPlayer.Builder(App.get()).setLoadControl(ExoUtil.buildLoadControl()).setTrackSelector(ExoUtil.buildTrackSelector()).setRenderersFactory(ExoUtil.buildRenderersFactory(isHard() ? EXTENSION_RENDERER_MODE_ON : EXTENSION_RENDERER_MODE_PREFER)).setMediaSourceFactory(ExoUtil.buildMediaSourceFactory(assHandler, subtitleParserFactory)).build();
exoPlayer = new ExoPlayer.Builder(App.get()).setLoadControl(ExoUtil.buildLoadControl()).setTrackSelector(ExoUtil.buildTrackSelector()).setRenderersFactory(ExoUtil.buildRenderersFactory(isHard() ? EXTENSION_RENDERER_MODE_ON : EXTENSION_RENDERER_MODE_PREFER)).setMediaSourceFactory(ExoUtil.buildMediaSourceFactory()).build();
exoPlayer.setAudioAttributes(AudioAttributes.DEFAULT, true);
if (Setting.isLibAss()) assHandler.init(exoPlayer);
exoPlayer.addAnalyticsListener(new EventLogger());
exoPlayer.setHandleAudioBecomingNoisy(true);
view.setRender(Setting.getRender());
@ -201,7 +195,6 @@ public class Players implements Player.Listener, ParseCallback, DrawHandler.Call
}
public void clear() {
setVideoSize(Size.ZERO);
danmakus = null;
headers = null;
format = null;
@ -215,11 +208,11 @@ public class Players implements Player.Listener, ParseCallback, DrawHandler.Call
}
public int getVideoWidth() {
return size == null ? 0 : size.getWidth();
return size == null ? 0 : size.width;
}
public int getVideoHeight() {
return size == null ? 0 : size.getHeight();
return size == null ? 0 : size.height;
}
public float getSpeed() {
@ -639,31 +632,19 @@ public class Players implements Player.Listener, ParseCallback, DrawHandler.Call
PlayerEvent.state(state);
}
@Override
public void onVideoSizeChanged(@NonNull VideoSize videoSize) {
this.size = videoSize;
PlayerEvent.size();
}
@Override
public void onTracksChanged(@NonNull Tracks tracks) {
if (tracks.isEmpty()) return;
setTrack(Track.find(url));
setVideoSize(tracks);
PlayerEvent.track();
}
private void setVideoSize(@NonNull Tracks tracks) {
for (Tracks.Group group : tracks.getGroups()) {
if (group.getType() != C.TRACK_TYPE_VIDEO) continue;
for (int i = 0; i < group.length; i++) {
if (group.isTrackSelected(i)) {
setVideoSize(new Size(group.getTrackFormat(i).width, group.getTrackFormat(i).height));
break;
}
}
}
}
private void setVideoSize(Size size) {
this.size = size;
PlayerEvent.size();
}
@Override
public void onPlayerError(@NonNull PlaybackException error) {
Logger.t(TAG).e(error.errorCode + "," + url);

@ -36,8 +36,6 @@ import java.util.Locale;
import java.util.Map;
import io.github.anilbeesetti.nextlib.media3ext.ffdecoder.NextRenderersFactory;
import io.github.peerless2012.ass.media.AssHandler;
import io.github.peerless2012.ass.media.parser.AssSubtitleParserFactory;
public class ExoUtil {
@ -61,8 +59,8 @@ public class ExoUtil {
return new NextRenderersFactory(App.get()).setAudioPrefer(Setting.isAudioPrefer()).setEnableDecoderFallback(true).setExtensionRendererMode(renderMode);
}
public static MediaSource.Factory buildMediaSourceFactory(AssHandler assHandler, AssSubtitleParserFactory subtitleParserFactory) {
return new MediaSourceFactory(assHandler, subtitleParserFactory);
public static MediaSource.Factory buildMediaSourceFactory() {
return new MediaSourceFactory();
}
public static CaptionStyleCompat getCaptionStyle() {

@ -22,16 +22,11 @@ import androidx.media3.extractor.ExtractorsFactory;
import androidx.media3.extractor.ts.TsExtractor;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.Setting;
import com.github.catvod.net.OkHttp;
import java.util.HashMap;
import java.util.Map;
import io.github.peerless2012.ass.media.AssHandler;
import io.github.peerless2012.ass.media.kt.AssPlayerKt;
import io.github.peerless2012.ass.media.parser.AssSubtitleParserFactory;
public class MediaSourceFactory implements MediaSource.Factory {
private final DefaultMediaSourceFactory defaultMediaSourceFactory;
@ -39,12 +34,8 @@ public class MediaSourceFactory implements MediaSource.Factory {
private DataSource.Factory dataSourceFactory;
private ExtractorsFactory extractorsFactory;
public MediaSourceFactory(AssHandler assHandler, AssSubtitleParserFactory subtitleParserFactory) {
if (Setting.isLibAss()) {
defaultMediaSourceFactory = new DefaultMediaSourceFactory(getDataSourceFactory(), AssPlayerKt.withAssMkvSupport(getExtractorsFactory(), subtitleParserFactory, assHandler)).setSubtitleParserFactory(subtitleParserFactory);
} else {
defaultMediaSourceFactory = new DefaultMediaSourceFactory(getDataSourceFactory(), getExtractorsFactory());
}
public MediaSourceFactory() {
defaultMediaSourceFactory = new DefaultMediaSourceFactory(getDataSourceFactory(), getExtractorsFactory());
}
@NonNull

@ -52,7 +52,6 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback, B
protected void initView() {
format = new DecimalFormat("0.#");
mBinding.uaText.setText(Setting.getUa());
mBinding.libassText.setText(getSwitch(Setting.isLibAss()));
mBinding.tunnelText.setText(getSwitch(Setting.isTunnel()));
mBinding.speedText.setText(format.format(Setting.getSpeed()));
mBinding.bufferText.setText(String.valueOf(Setting.getBuffer()));
@ -73,7 +72,6 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback, B
mBinding.scale.setOnClickListener(this::onScale);
mBinding.speed.setOnClickListener(this::onSpeed);
mBinding.buffer.setOnClickListener(this::onBuffer);
mBinding.libass.setOnClickListener(this::setLibAss);
mBinding.render.setOnClickListener(this::setRender);
mBinding.tunnel.setOnClickListener(this::setTunnel);
mBinding.caption.setOnClickListener(this::setCaption);
@ -127,11 +125,6 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback, B
Setting.putBuffer(times);
}
private void setLibAss(View view) {
Setting.putLibAss(!Setting.isLibAss());
mBinding.libassText.setText(getSwitch(Setting.isLibAss()));
}
private void setRender(View view) {
int index = Setting.getRender();
Setting.putRender(index = index == render.length - 1 ? 0 : ++index);

@ -123,35 +123,6 @@
</LinearLayout>
<LinearLayout
android:id="@+id/libass"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/shape_item"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/player_libass"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/libassText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="middle"
android:gravity="end"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="開" />
</LinearLayout>
<LinearLayout
android:id="@+id/buffer"
android:layout_width="match_parent"

Loading…
Cancel
Save