Skip to content

Commit

Permalink
优化内存
Browse files Browse the repository at this point in the history
  • Loading branch information
generocket committed May 13, 2024
1 parent 816e9f8 commit d331389
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 27 deletions.
61 changes: 37 additions & 24 deletions player/src/main/java/xyz/doikki/videoplayer/exo/ExoMediaPlayer.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,18 +31,18 @@

public class ExoMediaPlayer extends AbstractPlayer implements Player.Listener {

protected Context mAppContext;
protected SimpleExoPlayer mInternalPlayer;
protected MediaSource mMediaSource;
protected ExoMediaSourceHelper mMediaSourceHelper;
public static Context mAppContext;
protected static SimpleExoPlayer mInternalPlayer;
protected static MediaSource mMediaSource;
protected static ExoMediaSourceHelper mMediaSourceHelper;

private PlaybackParameters mSpeedPlaybackParameters;
private static PlaybackParameters mSpeedPlaybackParameters;

private boolean mIsPreparing;
private static boolean mIsPreparing;

private LoadControl mLoadControl;
private RenderersFactory mRenderersFactory;
private TrackSelector mTrackSelector;
private static LoadControl mLoadControl;
private static RenderersFactory mRenderersFactory;
private static TrackSelector mTrackSelector;

public ExoMediaPlayer(Context context) {
mAppContext = context.getApplicationContext();
Expand All @@ -51,23 +51,25 @@ public ExoMediaPlayer(Context context) {

@Override
public void initPlayer() {
mInternalPlayer = new SimpleExoPlayer.Builder(
mAppContext,
mRenderersFactory == null ? mRenderersFactory = new DefaultRenderersFactory(mAppContext) : mRenderersFactory,
mTrackSelector == null ? mTrackSelector = new DefaultTrackSelector(mAppContext) : mTrackSelector,
new DefaultMediaSourceFactory(mAppContext),
mLoadControl == null ? mLoadControl = new DefaultLoadControl() : mLoadControl,
DefaultBandwidthMeter.getSingletonInstance(mAppContext),
new AnalyticsCollector(Clock.DEFAULT))
.build();
setOptions();
if (mInternalPlayer == null) {
mInternalPlayer = new SimpleExoPlayer.Builder(
mAppContext,
mRenderersFactory == null ? mRenderersFactory = new DefaultRenderersFactory(mAppContext) : mRenderersFactory,
mTrackSelector == null ? mTrackSelector = new DefaultTrackSelector(mAppContext) : mTrackSelector,
new DefaultMediaSourceFactory(mAppContext),
mLoadControl == null ? mLoadControl = new DefaultLoadControl() : mLoadControl,
DefaultBandwidthMeter.getSingletonInstance(mAppContext),
new AnalyticsCollector(Clock.DEFAULT))
.build();
//播放器日志
if (VideoViewManager.getConfig().mIsEnableLog && mTrackSelector instanceof MappingTrackSelector) {
mInternalPlayer.addAnalyticsListener(new EventLogger((MappingTrackSelector) mTrackSelector, "ExoPlayer"));
}

//播放器日志
if (VideoViewManager.getConfig().mIsEnableLog && mTrackSelector instanceof MappingTrackSelector) {
mInternalPlayer.addAnalyticsListener(new EventLogger((MappingTrackSelector) mTrackSelector, "ExoPlayer"));
mInternalPlayer.addListener(this);
}

mInternalPlayer.addListener(this);
setOptions();
System.gc();
}

public void setTrackSelector(TrackSelector trackSelector) {
Expand All @@ -84,7 +86,11 @@ public void setLoadControl(LoadControl loadControl) {

@Override
public void setDataSource(String path, Map<String, String> headers) {
if (mInternalPlayer != null) {
mInternalPlayer.clearMediaItems();
}
mMediaSource = mMediaSourceHelper.getMediaSource(path, headers);
System.gc();
}

@Override
Expand All @@ -96,6 +102,7 @@ public void setDataSource(AssetFileDescriptor fd) {
public void start() {
if (mInternalPlayer == null)
return;
System.gc();
mInternalPlayer.setPlayWhenReady(true);
}

Expand All @@ -104,13 +111,16 @@ public void pause() {
if (mInternalPlayer == null)
return;
mInternalPlayer.setPlayWhenReady(false);
System.gc();
}

@Override
public void stop() {
if (mInternalPlayer == null)
return;
mInternalPlayer.stop();
mInternalPlayer.clearMediaItems();
System.gc();
}

@Override
Expand All @@ -132,8 +142,10 @@ public void reset() {
mInternalPlayer.stop();
mInternalPlayer.clearMediaItems();
mInternalPlayer.setVideoSurface(null);
mInternalPlayer.clearVideoSurface();
mIsPreparing = false;
}
System.gc();
}

@Override
Expand Down Expand Up @@ -169,6 +181,7 @@ public void release() {

mIsPreparing = false;
mSpeedPlaybackParameters = null;
System.gc();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,21 @@
import xyz.doikki.videoplayer.player.PlayerFactory;

public class ExoMediaPlayerFactory extends PlayerFactory<ExoMediaPlayer> {

private static ExoMediaPlayerFactory exoMediaPlayerFactory = null;
private static ExoMediaPlayer exoMediaPlayer = null;
public static ExoMediaPlayerFactory create() {
return new ExoMediaPlayerFactory();
if (exoMediaPlayerFactory == null) {
exoMediaPlayerFactory = new ExoMediaPlayerFactory();
}
return exoMediaPlayerFactory;
}

@Override
public ExoMediaPlayer createPlayer(Context context) {
return new ExoMediaPlayer(context);
if (exoMediaPlayer == null) {
exoMediaPlayer = new ExoMediaPlayer(context);
}
ExoMediaPlayer.mAppContext = context;
return exoMediaPlayer;
}
}

0 comments on commit d331389

Please sign in to comment.