From d5f2dd32231ce0e7e435c3224cf99400ddf8f739 Mon Sep 17 00:00:00 2001 From: Stypox Date: Sun, 19 Apr 2026 13:09:02 +0200 Subject: [PATCH] fix: detect access units for YouTube HLS AVC1 Co-authored-by: Priveetee --- .../schabi/newpipe/player/helper/PlayerDataSource.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerDataSource.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerDataSource.java index 506b643fed4..4b8a888cd8e 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerDataSource.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerDataSource.java @@ -8,10 +8,12 @@ import androidx.annotation.Nullable; import com.google.android.exoplayer2.database.StandaloneDatabaseProvider; +import com.google.android.exoplayer2.extractor.ts.DefaultTsPayloadReaderFactory; import com.google.android.exoplayer2.source.ProgressiveMediaSource; import com.google.android.exoplayer2.source.SingleSampleMediaSource; import com.google.android.exoplayer2.source.dash.DashMediaSource; import com.google.android.exoplayer2.source.dash.DefaultDashChunkSource; +import com.google.android.exoplayer2.source.hls.DefaultHlsExtractorFactory; import com.google.android.exoplayer2.source.hls.HlsMediaSource; import com.google.android.exoplayer2.source.hls.playlist.DefaultHlsPlaylistTracker; import com.google.android.exoplayer2.source.smoothstreaming.DefaultSsChunkSource; @@ -175,7 +177,11 @@ public SingleSampleMediaSource.Factory getSingleSampleMediaSourceFactory() { //region YouTube media source factories public HlsMediaSource.Factory getYoutubeHlsMediaSourceFactory() { - return new HlsMediaSource.Factory(ytHlsCacheDataSourceFactory); + // these custom flags fix AVC1/H264 stutter on some Pixel devices, see + // https://github.com/InfinityLoop1308/PipePipeClient/pull/24 + final int payloadReaderFlags = DefaultTsPayloadReaderFactory.FLAG_DETECT_ACCESS_UNITS; + return new HlsMediaSource.Factory(ytHlsCacheDataSourceFactory) + .setExtractorFactory(new DefaultHlsExtractorFactory(payloadReaderFlags, true)); } public DashMediaSource.Factory getYoutubeDashMediaSourceFactory() {