mirror of
				https://github.com/TeamNewPipe/NewPipe
				synced 2025-11-04 09:13:00 +00:00 
			
		
		
		
	Use Android11+ extractors
This commit is contained in:
		@@ -177,12 +177,12 @@ import org.schabi.newpipe.player.resolver.MediaSourceTag;
 | 
				
			|||||||
import org.schabi.newpipe.player.resolver.VideoPlaybackResolver;
 | 
					import org.schabi.newpipe.player.resolver.VideoPlaybackResolver;
 | 
				
			||||||
import org.schabi.newpipe.player.seekbarpreview.SeekbarPreviewThumbnailHelper;
 | 
					import org.schabi.newpipe.player.seekbarpreview.SeekbarPreviewThumbnailHelper;
 | 
				
			||||||
import org.schabi.newpipe.player.seekbarpreview.SeekbarPreviewThumbnailHolder;
 | 
					import org.schabi.newpipe.player.seekbarpreview.SeekbarPreviewThumbnailHolder;
 | 
				
			||||||
import org.schabi.newpipe.util.StreamTypeUtil;
 | 
					 | 
				
			||||||
import org.schabi.newpipe.util.DeviceUtils;
 | 
					import org.schabi.newpipe.util.DeviceUtils;
 | 
				
			||||||
import org.schabi.newpipe.util.ListHelper;
 | 
					import org.schabi.newpipe.util.ListHelper;
 | 
				
			||||||
import org.schabi.newpipe.util.NavigationHelper;
 | 
					import org.schabi.newpipe.util.NavigationHelper;
 | 
				
			||||||
import org.schabi.newpipe.util.PicassoHelper;
 | 
					import org.schabi.newpipe.util.PicassoHelper;
 | 
				
			||||||
import org.schabi.newpipe.util.SerializedCache;
 | 
					import org.schabi.newpipe.util.SerializedCache;
 | 
				
			||||||
 | 
					import org.schabi.newpipe.util.StreamTypeUtil;
 | 
				
			||||||
import org.schabi.newpipe.util.external_communication.KoreUtils;
 | 
					import org.schabi.newpipe.util.external_communication.KoreUtils;
 | 
				
			||||||
import org.schabi.newpipe.util.external_communication.ShareUtils;
 | 
					import org.schabi.newpipe.util.external_communication.ShareUtils;
 | 
				
			||||||
import org.schabi.newpipe.views.ExpandableSurfaceView;
 | 
					import org.schabi.newpipe.views.ExpandableSurfaceView;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,14 +1,18 @@
 | 
				
			|||||||
package org.schabi.newpipe.player.helper;
 | 
					package org.schabi.newpipe.player.helper;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import android.content.Context;
 | 
					import android.content.Context;
 | 
				
			||||||
 | 
					import android.os.Build;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import androidx.annotation.NonNull;
 | 
					import androidx.annotation.NonNull;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.google.android.exoplayer2.source.MediaParserExtractorAdapter;
 | 
				
			||||||
import com.google.android.exoplayer2.source.ProgressiveMediaSource;
 | 
					import com.google.android.exoplayer2.source.ProgressiveMediaSource;
 | 
				
			||||||
import com.google.android.exoplayer2.source.SingleSampleMediaSource;
 | 
					import com.google.android.exoplayer2.source.SingleSampleMediaSource;
 | 
				
			||||||
 | 
					import com.google.android.exoplayer2.source.chunk.MediaParserChunkExtractor;
 | 
				
			||||||
import com.google.android.exoplayer2.source.dash.DashMediaSource;
 | 
					import com.google.android.exoplayer2.source.dash.DashMediaSource;
 | 
				
			||||||
import com.google.android.exoplayer2.source.dash.DefaultDashChunkSource;
 | 
					import com.google.android.exoplayer2.source.dash.DefaultDashChunkSource;
 | 
				
			||||||
import com.google.android.exoplayer2.source.hls.HlsMediaSource;
 | 
					import com.google.android.exoplayer2.source.hls.HlsMediaSource;
 | 
				
			||||||
 | 
					import com.google.android.exoplayer2.source.hls.MediaParserHlsMediaChunkExtractor;
 | 
				
			||||||
import com.google.android.exoplayer2.source.smoothstreaming.DefaultSsChunkSource;
 | 
					import com.google.android.exoplayer2.source.smoothstreaming.DefaultSsChunkSource;
 | 
				
			||||||
import com.google.android.exoplayer2.source.smoothstreaming.SsMediaSource;
 | 
					import com.google.android.exoplayer2.source.smoothstreaming.SsMediaSource;
 | 
				
			||||||
import com.google.android.exoplayer2.upstream.DataSource;
 | 
					import com.google.android.exoplayer2.upstream.DataSource;
 | 
				
			||||||
@@ -40,17 +44,33 @@ public class PlayerDataSource {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public HlsMediaSource.Factory getLiveHlsMediaSourceFactory() {
 | 
					    public HlsMediaSource.Factory getLiveHlsMediaSourceFactory() {
 | 
				
			||||||
        return new HlsMediaSource.Factory(cachelessDataSourceFactory)
 | 
					        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
 | 
				
			||||||
                .setAllowChunklessPreparation(true)
 | 
					            return new HlsMediaSource.Factory(cachelessDataSourceFactory)
 | 
				
			||||||
                .setLoadErrorHandlingPolicy(
 | 
					                    .setExtractorFactory(MediaParserHlsMediaChunkExtractor.FACTORY)
 | 
				
			||||||
                        new DefaultLoadErrorHandlingPolicy(MANIFEST_MINIMUM_RETRY));
 | 
					                    .setAllowChunklessPreparation(true)
 | 
				
			||||||
 | 
					                    .setLoadErrorHandlingPolicy(
 | 
				
			||||||
 | 
					                            new DefaultLoadErrorHandlingPolicy(MANIFEST_MINIMUM_RETRY));
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            return new HlsMediaSource.Factory(cachelessDataSourceFactory)
 | 
				
			||||||
 | 
					                    .setAllowChunklessPreparation(true)
 | 
				
			||||||
 | 
					                    .setLoadErrorHandlingPolicy(
 | 
				
			||||||
 | 
					                            new DefaultLoadErrorHandlingPolicy(MANIFEST_MINIMUM_RETRY));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public DashMediaSource.Factory getLiveDashMediaSourceFactory() {
 | 
					    public DashMediaSource.Factory getLiveDashMediaSourceFactory() {
 | 
				
			||||||
        return new DashMediaSource.Factory(new DefaultDashChunkSource.Factory(
 | 
					        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
 | 
				
			||||||
                cachelessDataSourceFactory), cachelessDataSourceFactory)
 | 
					            return new DashMediaSource.Factory(new DefaultDashChunkSource.Factory(
 | 
				
			||||||
                .setLoadErrorHandlingPolicy(
 | 
					                    MediaParserChunkExtractor.FACTORY,
 | 
				
			||||||
                        new DefaultLoadErrorHandlingPolicy(MANIFEST_MINIMUM_RETRY));
 | 
					                    cachelessDataSourceFactory, 1), cachelessDataSourceFactory)
 | 
				
			||||||
 | 
					                    .setLoadErrorHandlingPolicy(
 | 
				
			||||||
 | 
					                            new DefaultLoadErrorHandlingPolicy(MANIFEST_MINIMUM_RETRY));
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            return new DashMediaSource.Factory(new DefaultDashChunkSource.Factory(
 | 
				
			||||||
 | 
					                    cachelessDataSourceFactory), cachelessDataSourceFactory)
 | 
				
			||||||
 | 
					                    .setLoadErrorHandlingPolicy(
 | 
				
			||||||
 | 
					                            new DefaultLoadErrorHandlingPolicy(MANIFEST_MINIMUM_RETRY));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public SsMediaSource.Factory getSsMediaSourceFactory() {
 | 
					    public SsMediaSource.Factory getSsMediaSourceFactory() {
 | 
				
			||||||
@@ -59,18 +79,36 @@ public class PlayerDataSource {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public HlsMediaSource.Factory getHlsMediaSourceFactory() {
 | 
					    public HlsMediaSource.Factory getHlsMediaSourceFactory() {
 | 
				
			||||||
        return new HlsMediaSource.Factory(cacheDataSourceFactory);
 | 
					        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
 | 
				
			||||||
 | 
					            return new HlsMediaSource.Factory(cacheDataSourceFactory)
 | 
				
			||||||
 | 
					                    .setExtractorFactory(MediaParserHlsMediaChunkExtractor.FACTORY);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            return new HlsMediaSource.Factory(cacheDataSourceFactory);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public DashMediaSource.Factory getDashMediaSourceFactory() {
 | 
					    public DashMediaSource.Factory getDashMediaSourceFactory() {
 | 
				
			||||||
        return new DashMediaSource.Factory(new DefaultDashChunkSource.Factory(
 | 
					        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
 | 
				
			||||||
                cacheDataSourceFactory), cacheDataSourceFactory);
 | 
					            return new DashMediaSource.Factory(new DefaultDashChunkSource.Factory(
 | 
				
			||||||
 | 
					                    MediaParserChunkExtractor.FACTORY,
 | 
				
			||||||
 | 
					                    cacheDataSourceFactory, 1), cacheDataSourceFactory);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            return new DashMediaSource.Factory(new DefaultDashChunkSource.Factory(
 | 
				
			||||||
 | 
					                    cacheDataSourceFactory), cacheDataSourceFactory);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public ProgressiveMediaSource.Factory getExtractorMediaSourceFactory() {
 | 
					    public ProgressiveMediaSource.Factory getExtractorMediaSourceFactory() {
 | 
				
			||||||
        return new ProgressiveMediaSource.Factory(cacheDataSourceFactory)
 | 
					        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
 | 
				
			||||||
                .setLoadErrorHandlingPolicy(
 | 
					            return new ProgressiveMediaSource.Factory(cacheDataSourceFactory,
 | 
				
			||||||
                        new DefaultLoadErrorHandlingPolicy(EXTRACTOR_MINIMUM_RETRY));
 | 
					                    MediaParserExtractorAdapter.FACTORY)
 | 
				
			||||||
 | 
					                    .setLoadErrorHandlingPolicy(
 | 
				
			||||||
 | 
					                            new DefaultLoadErrorHandlingPolicy(EXTRACTOR_MINIMUM_RETRY));
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            return new ProgressiveMediaSource.Factory(cacheDataSourceFactory)
 | 
				
			||||||
 | 
					                    .setLoadErrorHandlingPolicy(
 | 
				
			||||||
 | 
					                            new DefaultLoadErrorHandlingPolicy(EXTRACTOR_MINIMUM_RETRY));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public SingleSampleMediaSource.Factory getSampleMediaSourceFactory() {
 | 
					    public SingleSampleMediaSource.Factory getSampleMediaSourceFactory() {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,18 @@
 | 
				
			|||||||
package org.schabi.newpipe.player.helper;
 | 
					package org.schabi.newpipe.player.helper;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import static com.google.android.exoplayer2.Player.REPEAT_MODE_ALL;
 | 
				
			||||||
 | 
					import static com.google.android.exoplayer2.Player.REPEAT_MODE_OFF;
 | 
				
			||||||
 | 
					import static com.google.android.exoplayer2.Player.REPEAT_MODE_ONE;
 | 
				
			||||||
 | 
					import static org.schabi.newpipe.player.Player.IDLE_WINDOW_FLAGS;
 | 
				
			||||||
 | 
					import static org.schabi.newpipe.player.Player.PLAYER_TYPE;
 | 
				
			||||||
 | 
					import static org.schabi.newpipe.player.helper.PlayerHelper.AutoplayType.AUTOPLAY_TYPE_ALWAYS;
 | 
				
			||||||
 | 
					import static org.schabi.newpipe.player.helper.PlayerHelper.AutoplayType.AUTOPLAY_TYPE_NEVER;
 | 
				
			||||||
 | 
					import static org.schabi.newpipe.player.helper.PlayerHelper.AutoplayType.AUTOPLAY_TYPE_WIFI;
 | 
				
			||||||
 | 
					import static org.schabi.newpipe.player.helper.PlayerHelper.MinimizeMode.MINIMIZE_ON_EXIT_MODE_BACKGROUND;
 | 
				
			||||||
 | 
					import static org.schabi.newpipe.player.helper.PlayerHelper.MinimizeMode.MINIMIZE_ON_EXIT_MODE_NONE;
 | 
				
			||||||
 | 
					import static org.schabi.newpipe.player.helper.PlayerHelper.MinimizeMode.MINIMIZE_ON_EXIT_MODE_POPUP;
 | 
				
			||||||
 | 
					import static java.lang.annotation.RetentionPolicy.SOURCE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import android.annotation.SuppressLint;
 | 
					import android.annotation.SuppressLint;
 | 
				
			||||||
import android.content.Context;
 | 
					import android.content.Context;
 | 
				
			||||||
import android.content.Intent;
 | 
					import android.content.Intent;
 | 
				
			||||||
@@ -57,19 +70,6 @@ import java.util.Objects;
 | 
				
			|||||||
import java.util.Set;
 | 
					import java.util.Set;
 | 
				
			||||||
import java.util.concurrent.TimeUnit;
 | 
					import java.util.concurrent.TimeUnit;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import static com.google.android.exoplayer2.Player.REPEAT_MODE_ALL;
 | 
					 | 
				
			||||||
import static com.google.android.exoplayer2.Player.REPEAT_MODE_OFF;
 | 
					 | 
				
			||||||
import static com.google.android.exoplayer2.Player.REPEAT_MODE_ONE;
 | 
					 | 
				
			||||||
import static java.lang.annotation.RetentionPolicy.SOURCE;
 | 
					 | 
				
			||||||
import static org.schabi.newpipe.player.Player.IDLE_WINDOW_FLAGS;
 | 
					 | 
				
			||||||
import static org.schabi.newpipe.player.Player.PLAYER_TYPE;
 | 
					 | 
				
			||||||
import static org.schabi.newpipe.player.helper.PlayerHelper.AutoplayType.AUTOPLAY_TYPE_ALWAYS;
 | 
					 | 
				
			||||||
import static org.schabi.newpipe.player.helper.PlayerHelper.AutoplayType.AUTOPLAY_TYPE_NEVER;
 | 
					 | 
				
			||||||
import static org.schabi.newpipe.player.helper.PlayerHelper.AutoplayType.AUTOPLAY_TYPE_WIFI;
 | 
					 | 
				
			||||||
import static org.schabi.newpipe.player.helper.PlayerHelper.MinimizeMode.MINIMIZE_ON_EXIT_MODE_BACKGROUND;
 | 
					 | 
				
			||||||
import static org.schabi.newpipe.player.helper.PlayerHelper.MinimizeMode.MINIMIZE_ON_EXIT_MODE_NONE;
 | 
					 | 
				
			||||||
import static org.schabi.newpipe.player.helper.PlayerHelper.MinimizeMode.MINIMIZE_ON_EXIT_MODE_POPUP;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public final class PlayerHelper {
 | 
					public final class PlayerHelper {
 | 
				
			||||||
    private static final StringBuilder STRING_BUILDER = new StringBuilder();
 | 
					    private static final StringBuilder STRING_BUILDER = new StringBuilder();
 | 
				
			||||||
    private static final Formatter STRING_FORMATTER
 | 
					    private static final Formatter STRING_FORMATTER
 | 
				
			||||||
@@ -312,7 +312,7 @@ public final class PlayerHelper {
 | 
				
			|||||||
        return 500;
 | 
					        return 500;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static TrackSelection.Factory getQualitySelector() {
 | 
					    public static ExoTrackSelection.Factory getQualitySelector() {
 | 
				
			||||||
        return new AdaptiveTrackSelection.Factory(
 | 
					        return new AdaptiveTrackSelection.Factory(
 | 
				
			||||||
                1000,
 | 
					                1000,
 | 
				
			||||||
                AdaptiveTrackSelection.DEFAULT_MAX_DURATION_FOR_QUALITY_DECREASE_MS,
 | 
					                AdaptiveTrackSelection.DEFAULT_MAX_DURATION_FOR_QUALITY_DECREASE_MS,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,7 +35,7 @@ public interface PlaybackResolver extends Resolver<StreamInfo, MediaSource> {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        return null;
 | 
					        return null;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
0
 | 
					
 | 
				
			||||||
    @NonNull
 | 
					    @NonNull
 | 
				
			||||||
    default MediaSource buildLiveMediaSource(@NonNull final PlayerDataSource dataSource,
 | 
					    default MediaSource buildLiveMediaSource(@NonNull final PlayerDataSource dataSource,
 | 
				
			||||||
                                             @NonNull final String sourceUrl,
 | 
					                                             @NonNull final String sourceUrl,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user