Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

plugins.twitch: mid-roll ads ("Commercial Break in Progress") filtering issue with --twitch-disable-ads #4934

Closed
4 tasks done
supersonic29 opened this issue Nov 10, 2022 · 40 comments · Fixed by #4942
Closed
4 tasks done
Labels
duplicate This issue or pull request already exists plugin issue A Plugin does not work correctly

Comments

@supersonic29
Copy link

Checklist

Streamlink version

Latest stable release

Description

Basically the same as this issue, but its marked as resolved, so I can't comment to say its back, apologies 🙏
#4106

Debug log

-
@supersonic29 supersonic29 added the plugin issue A Plugin does not work correctly label Nov 10, 2022
@bastimeyer

This comment was marked as outdated.

@bastimeyer bastimeyer added duplicate This issue or pull request already exists does not meet requirements invalid labels Nov 10, 2022
@bastimeyer
Copy link
Member

bastimeyer commented Nov 10, 2022

Unless you can show a debug log where ads filtering doesn't work, this thread will stay closed.

Also read this first:
https://streamlink.github.io/latest/cli/plugins/twitch.html

And btw, #4106 is about a bug in regards to the Twitch plugin's low latency streaming when a mid-roll ad occurs, as you can read in the thread's last comment. Everything else is irrelevant to this thread and it got locked because people didn't read the thread and started off-topic comments.

@supersonic29

This comment was marked as outdated.

@bastimeyer

This comment was marked as outdated.

@Phistr90
Copy link

Phistr90 commented Nov 10, 2022

I can confirm that I am also getting 'commercial in progress' when the streamer run ads manually mid-stream in order to avoid pre-rolls on stream.
So while it looks like it works for pre-rolls it seems to fail when the streamer runs ads manually.

debug output for when the ads are run:

[stream.hls][debug] Adding segment 11729 to queue
[stream.hls][debug] Segment 11727 complete
[stream.hls][debug] Segment 11728 complete
[stream.hls][debug] Segment 11729 complete
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11730 to queue
[stream.hls][info] Filtering out segments and pausing stream output
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11731 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11732 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11733 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11734 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11735 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11736 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11737 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11738 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11739 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11740 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11741 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11742 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11743 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11744 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11745 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11746 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11747 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11748 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11749 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11750 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11751 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11752 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11753 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11754 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11755 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11756 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11757 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11758 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11759 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11760 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11761 to queue
[stream.hls][debug] Adding segment 11762 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11763 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11764 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11765 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11766 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11767 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11768 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11769 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11770 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11771 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11772 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11773 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11774 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11775 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11776 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11777 to queue
[stream.hls][debug] Adding segment 11778 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11779 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11780 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11781 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11782 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11783 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11784 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11785 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11786 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11787 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11788 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11789 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11790 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11791 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11792 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11793 to queue
[stream.hls][debug] Adding segment 11794 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11795 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11796 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11797 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11798 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11799 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11800 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11801 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11802 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11803 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11804 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11805 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11806 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11807 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11808 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11809 to queue
[stream.hls][debug] Adding segment 11810 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11811 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11812 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11813 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11814 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11815 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11816 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11817 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11818 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11819 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11820 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11821 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11822 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11823 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11824 to queue
[stream.hls][debug] Adding segment 11825 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11826 to queue
[stream.hls][debug] Reloading playlist
[stream.hls][debug] Adding segment 11827 to queue
[stream.hls][debug] Segment 11826 complete
[stream.hls][info] Resuming stream output
[stream.hls][debug] Reloading playlist```

flags: --loglevel debug --twitch-disable-ads --twitch-low-latency --player-passthrough --hls-live-edge

@dojima

This comment was marked as outdated.

@bastimeyer
Copy link
Member

bastimeyer commented Nov 10, 2022

it works for pre-rolls it seems to fail when the streamer runs ads manually
flags: --loglevel debug --twitch-disable-ads --twitch-low-latency

This is exactly the bug as described in #4106 because of the segment prefetching. Read the last comment in that thread. This requires a rewrite of the low latency implementation which would add an additional delay of two seconds, as mentioned and explained there.

This thread here is therefore a duplicate.

@Phistr90
Copy link

This is exactly the bug as described in #4106 because of the segment prefetching. Read the last comment in that thread. This requires a rewrite of the low latency implementation which would add an additional delay of two seconds, as mentioned and explained there.

This thread here is therefore a duplicate.

Nope, same happens without --twitch-low-latency flag. I just tested it.
Also I never had any problems with midroll ads before today.

@supersonic29
Copy link
Author

supersonic29 commented Nov 10, 2022

I figured out using the config file to set twitch-disable-ads rather than in Chatterino, and it kills the new preroll, but the stream still freezes on streamer-run ad breaks until you either force-close or the break ends. I did not use the low latency option.

Edit: when it skips prerolls, it also opens pretty slow, making me wonder if it isnt just frozen the same way the midroll breaks are.

@TisIte
Copy link

TisIte commented Nov 10, 2022

twitch-disable-ads just waited for ads to end from what I can tell, its not able to actually skip them. So pauses the player/output until ads are over (as you saw for pre-roll start delay).

From my testing without twitch-low-latency flag the stream/player will pause/freeze/wait until ads are over since it correctly detects both preroll/midroll ads are in progress.
With twitch-low latency flag, you wait for the player to start until preroll ads are done, and you get the 'Commercial break in progress' screen until midroll ads are over (to fix that requires what Bastimeyer described in the other thread to not see but would still pause/freeze your player on the last available frame)

Currently working browser addons do the same with pausing playback until ads end, or replacing the stream with a 480p ad-free stream by proxy since certain regions don't get particular ads (which seems out of streamlink's scope?).

It's likely due to this update below with an internal twitch change.
https://discuss.dev.twitch.tv/t/an-updated-twitch-embedded-player-viewer-experience/41718
Embed type streams just didn't used to get ads, and now they do. As mentioned in the other thread playerType="embed" gets less/no ads so a new workaround or fix is needed now that that has been changed.

@bastimeyer
Copy link
Member

bastimeyer commented Nov 10, 2022

twitch-disable-ads

--twitch-disable-ads was never meant to skip ads, this is just for filtering out embedded ads, as you can read in the docs.

Skipping ads is an entirely different thing which we had also implemented several times in the past, and all of those implementations/workarounds had to be restored at some point because they caused other issues later on. This is done by applying certain HTTP headers or query string parameters to the API request / Twitch's Usher service when acquiring a streaming access token for the HLS playlist. See the --twitch-api-header option and why this specific CLI parameter was implemented. The git log / blame of the twitch plugin will also help you understand that.

same happens without --twitch-low-latency

Prefetch segments get parsed regardless whether the option is set or not. The way prefetch segment handling is implemented could still cause issues with how the ads filtering works.

However, it's also possible that Twitch annotates mid-roll ads differently, which incorrectly causes the last segment to be included in the output, which we don't want.

The ads-filtering implementation works like this:
Each HLS playlist response includes a set of tags for metadata and segments. Metadata includes date ranges, with annotated names, class names and other stuff. Ads are annotated this way, in specific date ranges.
The stream segments included in the HLS playlist also have their own metadata, including program dates. Streamlink checks whether a segment's program date is part of the annotated ad date range, and if that's the case, then it starts filtering out the segments until the first one appears which doesn't fall into the ad date range again.

In addition to that, segments each have a duration and optional title attribute. The segment titles are currently not being used when filtering out ads, even though they seem to contain specific names which are unlikely to be used by regular segments. For example, pre-roll ad segments at least contain the "Amazon" string in their title, which could be used as an additional indicator in addition to the date range checks. If there's something wrong with the date ranges of mid-roll ads, then this could be used as a fallback.

However, I don't know the contents of HLS playlists yet which contain mid-roll ads, so I could use some help.

Please apply the following diff and help debugging this, as we need to know the exact HLS playlist contents of the moment when a mid-roll ad gets embedded. This adds trace log messages to the log output for each line in the HLS playlist on each playlist refresh, and this will generate a ton of noisy output.

diff --git a/src/streamlink/stream/hls_playlist.py b/src/streamlink/stream/hls_playlist.py
index 9f193d80..633bec54 100644
--- a/src/streamlink/stream/hls_playlist.py
+++ b/src/streamlink/stream/hls_playlist.py
@@ -550,6 +550,7 @@ class M3U8Parser:
 
         parse_line = self.parse_line
         for line in lines:
+            log.trace(line)  # type: ignore[attr-defined]
             parse_line(line)
 
         # Associate Media entries with each Playlist
$ streamlink \
  --loglevel=trace \
  --logfile=/path/to/tracelog.txt \
  twitch.tv/CHANNEL-WHICH-WILL-MOST-LIKELY-RUN-MIDROLL-ADS \
  best

Make sure to remove the existing log file before running Streamlink, or use a log file path with a dynamic name, like a timestamp.

Once you've found mid-roll ads, please upload the log file in its entirety to github gist and post the link. Be careful though, there might be personal information included in the HLS playlist contents.


I'm going to reopen this thread now and change its title.

PLEASE DO NOT COMMENT UNLESS YOU HAVE SOMETHING USEFUL TO SHARE WHICH WILL HELP FIXING THE ADS FILTERING (NOT SKIPPING/PREVENTING/ETC).

@bastimeyer bastimeyer reopened this Nov 10, 2022
@bastimeyer bastimeyer changed the title plugins.twitch: New "Commercial Break in Progress" screen doesn't get filtered by --twitch-disable-ads plugins.twitch: mid-roll ads ("Commercial Break in Progress") filtering issue with --twitch-disable-ads Nov 10, 2022
@bastimeyer
Copy link
Member

So I just had a mid-roll ad, and every single ad segment was properly filtered out by Streamlink. Prefetch segments were not included in the HLS playlist though, which means that prefetch segments are very likely the issue here, as described in #4106.

The only thing stream discontinuities cause, even if it's a discontinuity in the same stream data and not just between the streams and an ad, are gaps in the program timestamps of the MPEG-TS bitstream, so players will handle this differently. MPV for example shows incorrect timings in the seek bar. Other players might still crash, eg. VLC, but if that's the case, then there is literally nothing that Streamlink can do, and users will need to use a different player.

Here's the playlist from the time when the first ad segments appeared

[13:10:56.959281][stream.hls][debug] Reloading playlist
[13:10:56.998313][stream.hls_playlist][trace] #EXT-X-VERSION:3
[13:10:56.998408][stream.hls_playlist][trace] #EXT-X-TARGETDURATION:5
[13:10:56.998458][stream.hls_playlist][trace] #EXT-X-MEDIA-SEQUENCE:923
[13:10:56.998500][stream.hls_playlist][trace] #EXT-X-TWITCH-LIVE-SEQUENCE:7517
[13:10:56.998540][stream.hls_playlist][trace] #EXT-X-TWITCH-ELAPSED-SECS:14478.370
[13:10:56.998579][stream.hls_playlist][trace] #EXT-X-TWITCH-TOTAL-SECS:14512.370
[13:10:56.998617][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="playlist-creation-1668080396",CLASS="twitch-timestamp",START-DATE="2022-11-10T11:39:56.032Z",END-ON-NEXT=YES,X-TV-TWITCH-TIMESTAMP="1668080396032"
[13:10:56.998736][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="playlist-session-1668080396",CLASS="twitch-session",START-DATE="2022-11-10T11:39:56.032Z",END-ON-NEXT=YES,X-TV-TWITCH-SESSIONID="2920395312908219171"
[13:10:56.998830][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="fa450233d3884a25b53b3cd16f31895a",CLASS="twitch-assignment",START-DATE="2022-11-10T12:10:17.510Z",END-ON-NEXT=YES,X-TV-TWITCH-SERVING-ID="fa450233d3884a25b53b3cd16f31895a",X-TV-TWITCH-NODE="video-edge-c5544c.fra02",X-TV-TWITCH-CLUSTER="fra02"
[13:10:56.998920][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="source-1668080404",CLASS="twitch-stream-source",START-DATE="2022-11-10T11:40:04.877Z",END-ON-NEXT=YES,X-TV-TWITCH-STREAM-SOURCE="live"
[13:10:56.999016][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="trigger-1668080389",CLASS="twitch-trigger",START-DATE="2022-11-10T11:39:49.708Z",END-ON-NEXT=YES,X-TV-TWITCH-TRIGGER-URL="https://video-weaver.fra02.hls.ttvnw.net/trigger/SOME-LONG-BASE64-TOKEN"
[13:10:56.999124][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:23.860Z
[13:10:56.999193][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:56.999255][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:56.999323][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:25.860Z
[13:10:56.999395][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:56.999456][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:56.999510][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:27.860Z
[13:10:56.999576][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:56.999635][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:56.999688][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:29.860Z
[13:10:56.999754][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:56.999813][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:56.999876][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:31.860Z
[13:10:56.999946][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:57.000005][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:57.000058][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:33.860Z
[13:10:57.000126][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:57.000185][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:57.000237][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:35.860Z
[13:10:57.000302][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:57.000361][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:57.000413][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:37.860Z
[13:10:57.000479][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:57.000538][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:57.000594][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:39.860Z
[13:10:57.000660][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:57.000719][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:57.000771][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:41.860Z
[13:10:57.000835][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:57.000894][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:57.000946][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:43.860Z
[13:10:57.001011][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:57.001070][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:57.001126][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:45.860Z
[13:10:57.001193][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:57.001252][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:57.001304][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:47.860Z
[13:10:57.001369][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:57.001427][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:57.001478][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:49.860Z
[13:10:57.001543][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:57.001602][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:57.001653][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:51.860Z
[13:10:57.001718][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:57.001776][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:57.001841][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="stitched-ad-1668082253-30168000000",CLASS="twitch-stitched-ad",START-DATE="2022-11-10T12:10:53.510Z",DURATION=30.168,X-TV-TWITCH-AD-AD-FORMAT="standard_video_ad",X-TV-TWITCH-AD-URL="https://help.twitch.tv/s/article/ad-experience-on-twitch",X-TV-TWITCH-AD-CREATIVE-ID="2474283100494",X-TV-TWITCH-AD-LINE-ITEM-ID="2379251610298",X-TV-TWITCH-AD-CLICK-TRACKING-URL="https://example.com",X-TV-TWITCH-AD-POD-POSITION="0",X-TV-TWITCH-AD-ROLL-TYPE="MIDROLL",X-TV-TWITCH-AD-RADS-TOKEN="SOME-LONG-BASE64-TOKEN",X-TV-TWITCH-AD-AD-SESSION-ID="a5f06d79452b4333a03d99388a6bd64e",X-TV-TWITCH-AD-CLICK-BEACON-ID="click7417a051-2bbb-4878-8223-a4237c9e39ad",X-TV-TWITCH-AD-LOUDNESS="-10.980000",X-TV-TWITCH-AD-COMMERCIAL-ID="12d2b02d5af44f6b8c23c9c3010485fa",X-TV-TWITCH-AD-POD-LENGTH="6"
[13:10:57.001968][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="source-1668082253",CLASS="twitch-stream-source",START-DATE="2022-11-10T12:10:53.510Z",END-ON-NEXT=YES,X-TV-TWITCH-STREAM-SOURCE="Amazon|2474283100494"
[13:10:57.002057][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082253-0",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:10:53.510Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="0"
[13:10:57.002146][stream.hls_playlist][trace] #EXT-X-DISCONTINUITY
[13:10:57.002195][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:53.510Z
[13:10:57.002259][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:10:57.002319][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:57.002377][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:55.510Z
[13:10:57.002445][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:10:57.002503][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:57.002633][stream.hls][debug] Adding segment 939 to queue
[13:10:57.049011][stream.hls][info] Filtering out segments and pausing stream output

And here's the continuation of the regular stream:

[13:14:02.064693][stream.hls][debug] Reloading playlist
[13:14:02.113725][stream.hls_playlist][trace] #EXT-X-VERSION:3
[13:14:02.113839][stream.hls_playlist][trace] #EXT-X-TARGETDURATION:5
[13:14:02.113892][stream.hls_playlist][trace] #EXT-X-MEDIA-SEQUENCE:938
[13:14:02.113937][stream.hls_playlist][trace] #EXT-X-TWITCH-ELAPSED-SECS:14508.370
[13:14:02.113980][stream.hls_playlist][trace] #EXT-X-TWITCH-TOTAL-SECS:14697.378
[13:14:02.114021][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="playlist-creation-1668080396",CLASS="twitch-timestamp",START-DATE="2022-11-10T11:39:56.032Z",END-ON-NEXT=YES,X-TV-TWITCH-TIMESTAMP="1668080396032"
[13:14:02.114140][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="playlist-session-1668080396",CLASS="twitch-session",START-DATE="2022-11-10T11:39:56.032Z",END-ON-NEXT=YES,X-TV-TWITCH-SESSIONID="2920395312908219171"
[13:14:02.114241][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="fa450233d3884a25b53b3cd16f31895a",CLASS="twitch-assignment",START-DATE="2022-11-10T12:10:17.510Z",END-ON-NEXT=YES,X-TV-TWITCH-SERVING-ID="fa450233d3884a25b53b3cd16f31895a",X-TV-TWITCH-NODE="video-edge-c5544c.fra02",X-TV-TWITCH-CLUSTER="fra02"
[13:14:02.114347][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="stitched-ad-1668082253-30168000000",CLASS="twitch-stitched-ad",START-DATE="2022-11-10T12:10:53.510Z",DURATION=30.168,X-TV-TWITCH-AD-CLICK-BEACON-ID="click7417a051-2bbb-4878-8223-a4237c9e39ad",X-TV-TWITCH-AD-LOUDNESS="-10.980000",X-TV-TWITCH-AD-COMMERCIAL-ID="12d2b02d5af44f6b8c23c9c3010485fa",X-TV-TWITCH-AD-RADS-TOKEN="SOME-LONG-BASE64-TOKEN",X-TV-TWITCH-AD-ROLL-TYPE="MIDROLL",X-TV-TWITCH-AD-URL="https://help.twitch.tv/s/article/ad-experience-on-twitch",X-TV-TWITCH-AD-CREATIVE-ID="2474283100494",X-TV-TWITCH-AD-LINE-ITEM-ID="2379251610298",X-TV-TWITCH-AD-CLICK-TRACKING-URL="https://example.com",X-TV-TWITCH-AD-AD-FORMAT="standard_video_ad",X-TV-TWITCH-AD-POD-LENGTH="6",X-TV-TWITCH-AD-POD-POSITION="0",X-TV-TWITCH-AD-AD-SESSION-ID="a5f06d79452b4333a03d99388a6bd64e"
[13:14:02.114483][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="source-1668082253",CLASS="twitch-stream-source",START-DATE="2022-11-10T12:10:53.510Z",END-ON-NEXT=YES,X-TV-TWITCH-STREAM-SOURCE="Amazon|2474283100494"
[13:14:02.114599][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="trigger-1668080389",CLASS="twitch-trigger",START-DATE="2022-11-10T11:39:49.708Z",END-ON-NEXT=YES,X-TV-TWITCH-TRIGGER-URL="https://video-weaver.fra02.hls.ttvnw.net/trigger/SOME-LONG-BASE64-TOKEN"
[13:14:02.114716][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082253-0",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:10:53.510Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="0"
[13:14:02.114812][stream.hls_playlist][trace] #EXT-X-DISCONTINUITY
[13:14:02.114863][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:53.510Z
[13:14:02.114928][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.115000][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.115066][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:55.510Z
[13:14:02.115138][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.115202][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.115266][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:57.510Z
[13:14:02.115339][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.115403][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.115471][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082259-1",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:10:59.510Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="1"
[13:14:02.115565][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:59.510Z
[13:14:02.115638][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.115700][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.115763][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:01.510Z
[13:14:02.115839][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.115898][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.115957][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:03.510Z
[13:14:02.116032][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.116090][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.116152][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:05.510Z
[13:14:02.116229][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.116288][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.116350][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082267-2",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:11:07.510Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="2"
[13:14:02.116445][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:07.510Z
[13:14:02.116527][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.116593][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.116655][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:09.510Z
[13:14:02.116725][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.116787][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.116850][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:11.510Z
[13:14:02.116922][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.116985][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.117043][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:13.510Z
[13:14:02.117113][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.117177][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.117235][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082275-3",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:11:15.510Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="3"
[13:14:02.117327][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:15.510Z
[13:14:02.117399][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.117460][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.117523][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:17.510Z
[13:14:02.117592][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.117655][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.117717][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:19.510Z
[13:14:02.117789][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.117852][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.117911][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:21.510Z
[13:14:02.117980][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.118045][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.118104][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082283-4",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:11:23.510Z",DURATION=0.168,X-TV-TWITCH-AD-QUARTILE="4"
[13:14:02.118202][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:23.510Z
[13:14:02.118276][stream.hls_playlist][trace] #EXTINF:0.168,Amazon|2474283100494
[13:14:02.118343][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.118417][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="stitched-ad-1668082283-30168000000",CLASS="twitch-stitched-ad",START-DATE="2022-11-10T12:11:23.678Z",DURATION=30.168,X-TV-TWITCH-AD-URL="https://help.twitch.tv/s/article/ad-experience-on-twitch",X-TV-TWITCH-AD-CREATIVE-ID="2474283100494",X-TV-TWITCH-AD-LINE-ITEM-ID="2379251610298",X-TV-TWITCH-AD-LOUDNESS="-10.980000",X-TV-TWITCH-AD-COMMERCIAL-ID="12d2b02d5af44f6b8c23c9c3010485fa",X-TV-TWITCH-AD-POD-LENGTH="6",X-TV-TWITCH-AD-AD-SESSION-ID="a5f06d79452b4333a03d99388a6bd64e",X-TV-TWITCH-AD-CLICK-BEACON-ID="click125b3c82-0f94-405f-a5b2-0fe3c4de3258",X-TV-TWITCH-AD-CLICK-TRACKING-URL="https://example.com",X-TV-TWITCH-AD-AD-FORMAT="standard_video_ad",X-TV-TWITCH-AD-POD-POSITION="1",X-TV-TWITCH-AD-ROLL-TYPE="MIDROLL",X-TV-TWITCH-AD-RADS-TOKEN="SOME-LONG-BASE64-TOKEN"
[13:14:02.118543][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082283-0",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:11:23.678Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="0"
[13:14:02.118641][stream.hls_playlist][trace] #EXT-X-DISCONTINUITY
[13:14:02.118692][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:23.678Z
[13:14:02.118759][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.118825][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.118890][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:25.678Z
[13:14:02.118965][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.119024][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.119091][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:27.678Z
[13:14:02.119168][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.119227][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.119294][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082289-1",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:11:29.678Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="1"
[13:14:02.119387][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:29.678Z
[13:14:02.119463][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.119526][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.119593][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:31.678Z
[13:14:02.119662][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.119725][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.119796][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:33.678Z
[13:14:02.119873][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.119937][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.120001][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:35.678Z
[13:14:02.120070][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.120132][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.120194][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082297-2",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:11:37.678Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="2"
[13:14:02.120286][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:37.678Z
[13:14:02.120363][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.120426][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.120487][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:39.678Z
[13:14:02.120559][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.120620][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.120690][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:41.678Z
[13:14:02.120762][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.120824][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.120885][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:43.678Z
[13:14:02.120955][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.121016][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.121078][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082305-3",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:11:45.678Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="3"
[13:14:02.121175][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:45.678Z
[13:14:02.121248][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.121311][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.121378][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:47.678Z
[13:14:02.121449][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.121511][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.121573][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:49.678Z
[13:14:02.121643][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.121704][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.121766][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:51.678Z
[13:14:02.121835][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.121897][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.121958][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082313-4",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:11:53.678Z",DURATION=0.168,X-TV-TWITCH-AD-QUARTILE="4"
[13:14:02.122055][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:53.678Z
[13:14:02.122132][stream.hls_playlist][trace] #EXTINF:0.168,Amazon|2474283100494
[13:14:02.122195][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.122272][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="stitched-ad-1668082313-30168000000",CLASS="twitch-stitched-ad",START-DATE="2022-11-10T12:11:53.846Z",DURATION=30.168,X-TV-TWITCH-AD-AD-SESSION-ID="a5f06d79452b4333a03d99388a6bd64e",X-TV-TWITCH-AD-URL="https://help.twitch.tv/s/article/ad-experience-on-twitch",X-TV-TWITCH-AD-CLICK-BEACON-ID="click21c538ce-4457-47d0-9ccb-8f9e89f53742",X-TV-TWITCH-AD-AD-FORMAT="standard_video_ad",X-TV-TWITCH-AD-LOUDNESS="-10.980000",X-TV-TWITCH-AD-COMMERCIAL-ID="12d2b02d5af44f6b8c23c9c3010485fa",X-TV-TWITCH-AD-POD-LENGTH="6",X-TV-TWITCH-AD-ROLL-TYPE="MIDROLL",X-TV-TWITCH-AD-CREATIVE-ID="2474283100494",X-TV-TWITCH-AD-LINE-ITEM-ID="2379251610298",X-TV-TWITCH-AD-CLICK-TRACKING-URL="https://example.com",X-TV-TWITCH-AD-POD-POSITION="2",X-TV-TWITCH-AD-RADS-TOKEN="SOME-LONG-BASE64-TOKEN"
[13:14:02.122400][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082313-0",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:11:53.846Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="0"
[13:14:02.122493][stream.hls_playlist][trace] #EXT-X-DISCONTINUITY
[13:14:02.122544][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:53.846Z
[13:14:02.122610][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.122673][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.122740][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:55.846Z
[13:14:02.122811][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.122877][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.122943][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:57.846Z
[13:14:02.123014][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.123082][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.123147][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082319-1",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:11:59.846Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="1"
[13:14:02.123248][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:11:59.846Z
[13:14:02.123322][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.123384][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.123449][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:01.846Z
[13:14:02.123519][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.123582][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.123651][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:03.846Z
[13:14:02.123723][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.123785][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.123850][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:05.846Z
[13:14:02.123920][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.123981][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.124047][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082327-2",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:12:07.846Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="2"
[13:14:02.124144][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:07.846Z
[13:14:02.124216][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.124279][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.124349][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:09.846Z
[13:14:02.124420][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.124483][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.124549][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:11.846Z
[13:14:02.124619][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.124681][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.124746][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:13.846Z
[13:14:02.124815][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.124877][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.124942][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082335-3",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:12:15.846Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="3"
[13:14:02.125033][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:15.846Z
[13:14:02.125110][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.125173][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.125240][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:17.846Z
[13:14:02.125310][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.125372][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.125438][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:19.846Z
[13:14:02.125508][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.125569][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.125634][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:21.846Z
[13:14:02.125703][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.125764][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.125837][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082343-4",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:12:23.846Z",DURATION=0.168,X-TV-TWITCH-AD-QUARTILE="4"
[13:14:02.125931][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:23.846Z
[13:14:02.126004][stream.hls_playlist][trace] #EXTINF:0.168,Amazon|2474283100494
[13:14:02.126065][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.126144][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="stitched-ad-1668082344-30168000000",CLASS="twitch-stitched-ad",START-DATE="2022-11-10T12:12:24.014Z",DURATION=30.168,X-TV-TWITCH-AD-CLICK-BEACON-ID="click125b3c82-0f94-405f-a5b2-0fe3c4de3258",X-TV-TWITCH-AD-CLICK-TRACKING-URL="https://example.com",X-TV-TWITCH-AD-AD-FORMAT="standard_video_ad",X-TV-TWITCH-AD-RADS-TOKEN="SOME-LONG-BASE64-TOKEN",X-TV-TWITCH-AD-POD-LENGTH="6",X-TV-TWITCH-AD-POD-POSITION="3",X-TV-TWITCH-AD-ROLL-TYPE="MIDROLL",X-TV-TWITCH-AD-URL="https://help.twitch.tv/s/article/ad-experience-on-twitch",X-TV-TWITCH-AD-CREATIVE-ID="2474283100494",X-TV-TWITCH-AD-LINE-ITEM-ID="2379251610298",X-TV-TWITCH-AD-LOUDNESS="-10.980000",X-TV-TWITCH-AD-COMMERCIAL-ID="12d2b02d5af44f6b8c23c9c3010485fa",X-TV-TWITCH-AD-AD-SESSION-ID="a5f06d79452b4333a03d99388a6bd64e"
[13:14:02.126266][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082344-0",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:12:24.014Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="0"
[13:14:02.126359][stream.hls_playlist][trace] #EXT-X-DISCONTINUITY
[13:14:02.126410][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:24.014Z
[13:14:02.126475][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.126555][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.126632][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:26.014Z
[13:14:02.126704][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.126766][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.126835][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:28.014Z
[13:14:02.126904][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.126966][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.127034][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082350-1",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:12:30.014Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="1"
[13:14:02.127132][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:30.014Z
[13:14:02.127204][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.127267][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.127342][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:32.014Z
[13:14:02.127414][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.127477][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.127547][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:34.014Z
[13:14:02.127617][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.127680][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.127749][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:36.014Z
[13:14:02.127819][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.127882][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.127951][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082358-2",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:12:38.014Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="2"
[13:14:02.128043][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:38.014Z
[13:14:02.128124][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.128225][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.128306][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:40.014Z
[13:14:02.128383][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.128510][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.128582][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:42.014Z
[13:14:02.128653][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.128716][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.128784][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:44.014Z
[13:14:02.128871][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.128962][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.129039][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082366-3",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:12:46.014Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="3"
[13:14:02.129135][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:46.014Z
[13:14:02.129213][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.129274][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.129344][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:48.014Z
[13:14:02.129420][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.129479][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.129547][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:50.014Z
[13:14:02.129623][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.129682][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.129754][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:52.014Z
[13:14:02.129844][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.129937][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.130020][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082374-4",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:12:54.014Z",DURATION=0.168,X-TV-TWITCH-AD-QUARTILE="4"
[13:14:02.130121][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:54.014Z
[13:14:02.130203][stream.hls_playlist][trace] #EXTINF:0.168,Amazon|2474283100494
[13:14:02.130331][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.130417][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="stitched-ad-1668082374-30168000000",CLASS="twitch-stitched-ad",START-DATE="2022-11-10T12:12:54.182Z",DURATION=30.168,X-TV-TWITCH-AD-CLICK-BEACON-ID="click21c538ce-4457-47d0-9ccb-8f9e89f53742",X-TV-TWITCH-AD-LINE-ITEM-ID="2379251610298",X-TV-TWITCH-AD-POD-LENGTH="6",X-TV-TWITCH-AD-ROLL-TYPE="MIDROLL",X-TV-TWITCH-AD-URL="https://help.twitch.tv/s/article/ad-experience-on-twitch",X-TV-TWITCH-AD-CREATIVE-ID="2474283100494",X-TV-TWITCH-AD-CLICK-TRACKING-URL="https://example.com",X-TV-TWITCH-AD-AD-FORMAT="standard_video_ad",X-TV-TWITCH-AD-LOUDNESS="-10.980000",X-TV-TWITCH-AD-COMMERCIAL-ID="12d2b02d5af44f6b8c23c9c3010485fa",X-TV-TWITCH-AD-POD-POSITION="4",X-TV-TWITCH-AD-RADS-TOKEN="SOME-LONG-BASE64-TOKEN",X-TV-TWITCH-AD-AD-SESSION-ID="a5f06d79452b4333a03d99388a6bd64e"
[13:14:02.130548][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082374-0",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:12:54.182Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="0"
[13:14:02.130648][stream.hls_playlist][trace] #EXT-X-DISCONTINUITY
[13:14:02.130735][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:54.182Z
[13:14:02.130830][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.130897][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.130971][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:56.182Z
[13:14:02.131047][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.131110][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.131182][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:12:58.182Z
[13:14:02.131252][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.131315][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.131388][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082380-1",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:13:00.182Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="1"
[13:14:02.131481][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:00.182Z
[13:14:02.131554][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.131617][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.131695][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:02.182Z
[13:14:02.131767][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.131830][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.131902][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:04.182Z
[13:14:02.131972][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.132035][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.132106][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:06.182Z
[13:14:02.132176][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.132238][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.132314][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082388-2",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:13:08.182Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="2"
[13:14:02.132410][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:08.182Z
[13:14:02.132483][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.132545][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.132619][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:10.182Z
[13:14:02.132696][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.132755][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.132826][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:12.182Z
[13:14:02.132901][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.132959][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.133029][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:14.182Z
[13:14:02.133107][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.133166][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.133253][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082396-3",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:13:16.182Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="3"
[13:14:02.133347][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:16.182Z
[13:14:02.133420][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.133482][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.133556][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:18.182Z
[13:14:02.133626][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.133689][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.133761][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:20.182Z
[13:14:02.133832][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.133893][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.133969][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:22.182Z
[13:14:02.134041][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.134104][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.134177][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082404-4",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:13:24.182Z",DURATION=0.168,X-TV-TWITCH-AD-QUARTILE="4"
[13:14:02.134271][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:24.182Z
[13:14:02.134344][stream.hls_playlist][trace] #EXTINF:0.168,Amazon|2474283100494
[13:14:02.134406][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.134493][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="stitched-ad-1668082404-30168000000",CLASS="twitch-stitched-ad",START-DATE="2022-11-10T12:13:24.350Z",DURATION=30.168,X-TV-TWITCH-AD-CLICK-BEACON-ID="click125b3c82-0f94-405f-a5b2-0fe3c4de3258",X-TV-TWITCH-AD-CREATIVE-ID="2474283100494",X-TV-TWITCH-AD-LINE-ITEM-ID="2379251610298",X-TV-TWITCH-AD-CLICK-TRACKING-URL="https://example.com",X-TV-TWITCH-AD-POD-POSITION="5",X-TV-TWITCH-AD-ROLL-TYPE="MIDROLL",X-TV-TWITCH-AD-AD-SESSION-ID="a5f06d79452b4333a03d99388a6bd64e",X-TV-TWITCH-AD-URL="https://help.twitch.tv/s/article/ad-experience-on-twitch",X-TV-TWITCH-AD-AD-FORMAT="standard_video_ad",X-TV-TWITCH-AD-LOUDNESS="-10.980000",X-TV-TWITCH-AD-COMMERCIAL-ID="12d2b02d5af44f6b8c23c9c3010485fa",X-TV-TWITCH-AD-POD-LENGTH="6",X-TV-TWITCH-AD-RADS-TOKEN="SOME-LONG-BASE64-TOKEN"
[13:14:02.134622][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082404-0",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:13:24.350Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="0"
[13:14:02.134716][stream.hls_playlist][trace] #EXT-X-DISCONTINUITY
[13:14:02.134768][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:24.350Z
[13:14:02.134835][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.134898][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.134976][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:26.350Z
[13:14:02.135048][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.135110][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.135186][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:28.350Z
[13:14:02.135256][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.135318][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.135398][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082410-1",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:13:30.350Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="1"
[13:14:02.135492][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:30.350Z
[13:14:02.135565][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.135627][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.135704][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:32.350Z
[13:14:02.135780][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.135839][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.135914][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:34.350Z
[13:14:02.135989][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.136048][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.136123][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:36.350Z
[13:14:02.136199][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.136257][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.136341][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082418-2",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:13:38.350Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="2"
[13:14:02.136435][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:38.350Z
[13:14:02.136514][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.136579][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.136656][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:40.350Z
[13:14:02.136728][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.136791][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.136867][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:42.350Z
[13:14:02.136936][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.136998][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.137078][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:44.350Z
[13:14:02.137150][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.137213][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.137290][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082426-3",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:13:46.350Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="3"
[13:14:02.137383][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:46.350Z
[13:14:02.137455][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.137517][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.137595][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:48.350Z
[13:14:02.137665][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.137726][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.137810][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:50.350Z
[13:14:02.137882][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.137946][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.138022][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:52.350Z
[13:14:02.138093][stream.hls_playlist][trace] #EXTINF:2.000,Amazon|2474283100494
[13:14:02.138156][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.138232][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082434-4",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:13:54.350Z",DURATION=0.168,X-TV-TWITCH-AD-QUARTILE="4"
[13:14:02.138331][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:54.350Z
[13:14:02.138406][stream.hls_playlist][trace] #EXTINF:0.168,Amazon|2474283100494
[13:14:02.138468][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.138546][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="source-1668082434",CLASS="twitch-stream-source",START-DATE="2022-11-10T12:13:54.518Z",END-ON-NEXT=YES,X-TV-TWITCH-STREAM-SOURCE="live"
[13:14:02.138639][stream.hls_playlist][trace] #EXT-X-DISCONTINUITY
[13:14:02.138690][stream.hls_playlist][trace] #EXT-X-TWITCH-LIVE-SEQUENCE:7623
[13:14:02.138734][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:54.518Z
[13:14:02.138798][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:14:02.138861][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.138941][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:13:56.518Z
[13:14:02.139012][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:14:02.139074][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.139161][stream.hls_playlist][trace] #EXT-X-TWITCH-PREFETCH:https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.139243][stream.hls_playlist][trace] #EXT-X-TWITCH-PREFETCH:https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:14:02.139469][stream.hls][debug] Adding segment 1037 to queue
[13:14:03.890847][stream.hls][debug] Segment 1036 complete
[13:14:03.891372][stream.hls][info] Resuming stream output

@bastimeyer
Copy link
Member

Quick correction of my previous post. Prefetch segments were involved in the playlist request prior to the start of the filtering, and ad date ranges for that are included:

[13:10:54.928082][stream.hls][debug] Reloading playlist
[13:10:54.954967][stream.hls_playlist][trace] #EXT-X-VERSION:3
[13:10:54.955045][stream.hls_playlist][trace] #EXT-X-TARGETDURATION:5
[13:10:54.955093][stream.hls_playlist][trace] #EXT-X-MEDIA-SEQUENCE:922
[13:10:54.955134][stream.hls_playlist][trace] #EXT-X-TWITCH-LIVE-SEQUENCE:7516
[13:10:54.955173][stream.hls_playlist][trace] #EXT-X-TWITCH-ELAPSED-SECS:14476.370
[13:10:54.955212][stream.hls_playlist][trace] #EXT-X-TWITCH-TOTAL-SECS:14510.370
[13:10:54.955250][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="playlist-creation-1668080396",CLASS="twitch-timestamp",START-DATE="2022-11-10T11:39:56.032Z",END-ON-NEXT=YES,X-TV-TWITCH-TIMESTAMP="1668080396032"
[13:10:54.955366][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="playlist-session-1668080396",CLASS="twitch-session",START-DATE="2022-11-10T11:39:56.032Z",END-ON-NEXT=YES,X-TV-TWITCH-SESSIONID="2920395312908219171"
[13:10:54.955459][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="fa450233d3884a25b53b3cd16f31895a",CLASS="twitch-assignment",START-DATE="2022-11-10T12:10:17.510Z",END-ON-NEXT=YES,X-TV-TWITCH-SERVING-ID="fa450233d3884a25b53b3cd16f31895a",X-TV-TWITCH-NODE="video-edge-c5544c.fra02",X-TV-TWITCH-CLUSTER="fra02"
[13:10:54.955551][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="source-1668080404",CLASS="twitch-stream-source",START-DATE="2022-11-10T11:40:04.877Z",END-ON-NEXT=YES,X-TV-TWITCH-STREAM-SOURCE="live"
[13:10:54.955646][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="trigger-1668080389",CLASS="twitch-trigger",START-DATE="2022-11-10T11:39:49.708Z",END-ON-NEXT=YES,X-TV-TWITCH-TRIGGER-URL="https://video-weaver.fra02.hls.ttvnw.net/trigger/SOME-LONG-BASE64-TOKEN"
[13:10:54.955761][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:21.860Z
[13:10:54.955833][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:54.955896][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:54.955955][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:23.860Z
[13:10:54.956023][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:54.956083][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:54.956136][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:25.860Z
[13:10:54.956202][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:54.956260][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:54.956313][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:27.860Z
[13:10:54.956383][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:54.956444][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:54.956497][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:29.860Z
[13:10:54.956573][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:54.956633][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:54.956686][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:31.860Z
[13:10:54.956751][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:54.956809][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:54.956861][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:33.860Z
[13:10:54.956926][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:54.956985][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:54.957041][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:35.860Z
[13:10:54.957109][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:54.957171][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:54.957223][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:37.860Z
[13:10:54.957289][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:54.957348][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:54.957401][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:39.860Z
[13:10:54.957467][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:54.957525][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:54.957577][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:41.860Z
[13:10:54.957643][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:54.957710][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:54.957763][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:43.860Z
[13:10:54.957830][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:54.957889][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:54.957941][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:45.860Z
[13:10:54.958007][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:54.958065][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:54.958117][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:47.860Z
[13:10:54.958182][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:54.958241][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:54.958298][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:10:49.860Z
[13:10:54.958365][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:10:54.958424][stream.hls_playlist][trace] https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:54.958485][stream.hls_playlist][trace] #EXT-X-TWITCH-PREFETCH:https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:10:54.958557][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="stitched-ad-1668082253-30168000000",CLASS="twitch-stitched-ad",START-DATE="2022-11-10T12:10:53.510Z",DURATION=30.168,X-TV-TWITCH-AD-URL="https://help.twitch.tv/s/article/ad-experience-on-twitch",X-TV-TWITCH-AD-CREATIVE-ID="2474283100494",X-TV-TWITCH-AD-AD-FORMAT="standard_video_ad",X-TV-TWITCH-AD-ROLL-TYPE="MIDROLL",X-TV-TWITCH-AD-POD-LENGTH="6",X-TV-TWITCH-AD-POD-POSITION="0",X-TV-TWITCH-AD-RADS-TOKEN="SOME-LONG-BASE64-TOKEN",X-TV-TWITCH-AD-CLICK-BEACON-ID="click7417a051-2bbb-4878-8223-a4237c9e39ad",X-TV-TWITCH-AD-LINE-ITEM-ID="2379251610298",X-TV-TWITCH-AD-CLICK-TRACKING-URL="https://example.com",X-TV-TWITCH-AD-LOUDNESS="-10.980000",X-TV-TWITCH-AD-COMMERCIAL-ID="12d2b02d5af44f6b8c23c9c3010485fa",X-TV-TWITCH-AD-AD-SESSION-ID="a5f06d79452b4333a03d99388a6bd64e"
[13:10:54.958687][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="source-1668082253",CLASS="twitch-stream-source",START-DATE="2022-11-10T12:10:53.510Z",END-ON-NEXT=YES,X-TV-TWITCH-STREAM-SOURCE="Amazon|2474283100494"
[13:10:54.958777][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668082253-0",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:10:53.510Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="0"
[13:10:54.958872][stream.hls_playlist][trace] #EXT-X-DISCONTINUITY
[13:10:54.958933][stream.hls_playlist][trace] #EXT-X-TWITCH-PREFETCH:https://video-edge-c5544c.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts

@bastimeyer
Copy link
Member

Found a stream where the mid-roll ads were just included in the second playlist refresh, and the ad segment was not filtered out correctly and the "purple screen" was incorrectly included in the output.

[13:42:14.103618][stream.hls][debug] Reloading playlist
[13:42:14.156676][stream.hls_playlist][trace] #EXT-X-VERSION:3
[13:42:14.156749][stream.hls_playlist][trace] #EXT-X-TARGETDURATION:6
[13:42:14.156795][stream.hls_playlist][trace] #EXT-X-MEDIA-SEQUENCE:8631
[13:42:14.156834][stream.hls_playlist][trace] #EXT-X-TWITCH-LIVE-SEQUENCE:8631
[13:42:14.156871][stream.hls_playlist][trace] #EXT-X-TWITCH-ELAPSED-SECS:17262.000
[13:42:14.156908][stream.hls_playlist][trace] #EXT-X-TWITCH-TOTAL-SECS:17296.000
[13:42:14.156944][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="playlist-creation-1668084132",CLASS="twitch-timestamp",START-DATE="2022-11-10T12:42:12.069Z",END-ON-NEXT=YES,X-TV-TWITCH-TIMESTAMP="1668084132069"
[13:42:14.157062][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="playlist-session-1668084132",CLASS="twitch-session",START-DATE="2022-11-10T12:42:12.069Z",END-ON-NEXT=YES,X-TV-TWITCH-SESSIONID="8012560106607572230"
[13:42:14.157153][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="source-1668084102",CLASS="twitch-stream-source",START-DATE="2022-11-10T12:41:42.763Z",END-ON-NEXT=YES,X-TV-TWITCH-STREAM-SOURCE="live"
[13:42:14.157251][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="trigger-1668084102",CLASS="twitch-trigger",START-DATE="2022-11-10T12:41:42.763Z",END-ON-NEXT=YES,X-TV-TWITCH-TRIGGER-URL="https://video-weaver.fra02.hls.ttvnw.net/trigger/SOME-LONG-BASE64-TOKEN"
[13:42:14.157367][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:41:44.763Z
[13:42:14.157443][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:42:14.157506][stream.hls_playlist][trace] https://video-edge-c55de4.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:42:14.157564][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:41:46.763Z
[13:42:14.157631][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:42:14.157690][stream.hls_playlist][trace] https://video-edge-c55de4.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:42:14.157742][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:41:48.763Z
[13:42:14.157807][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:42:14.157866][stream.hls_playlist][trace] https://video-edge-c55de4.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:42:14.157916][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:41:50.763Z
[13:42:14.157984][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:42:14.158044][stream.hls_playlist][trace] https://video-edge-c55de4.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:42:14.158095][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:41:52.763Z
[13:42:14.158160][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:42:14.158214][stream.hls_playlist][trace] https://video-edge-c55de4.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:42:14.158269][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:41:54.763Z
[13:42:14.158334][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:42:14.158391][stream.hls_playlist][trace] https://video-edge-c55de4.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:42:14.158446][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:41:56.763Z
[13:42:14.158511][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:42:14.158564][stream.hls_playlist][trace] https://video-edge-c55de4.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:42:14.158618][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:41:58.763Z
[13:42:14.158683][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:42:14.158740][stream.hls_playlist][trace] https://video-edge-c55de4.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:42:14.158790][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:42:00.763Z
[13:42:14.158854][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:42:14.158911][stream.hls_playlist][trace] https://video-edge-c55de4.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:42:14.158961][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:42:02.763Z
[13:42:14.159025][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:42:14.159081][stream.hls_playlist][trace] https://video-edge-c55de4.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:42:14.159130][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:42:04.763Z
[13:42:14.159194][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:42:14.159251][stream.hls_playlist][trace] https://video-edge-c55de4.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:42:14.159304][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:42:06.763Z
[13:42:14.159369][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:42:14.159426][stream.hls_playlist][trace] https://video-edge-c55de4.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:42:14.159476][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:42:08.763Z
[13:42:14.159540][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:42:14.159597][stream.hls_playlist][trace] https://video-edge-c55de4.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:42:14.159647][stream.hls_playlist][trace] #EXT-X-PROGRAM-DATE-TIME:2022-11-10T12:42:10.763Z
[13:42:14.159721][stream.hls_playlist][trace] #EXTINF:2.000,live
[13:42:14.159779][stream.hls_playlist][trace] https://video-edge-c55de4.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:42:14.159843][stream.hls_playlist][trace] #EXT-X-TWITCH-PREFETCH:https://video-edge-c55de4.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:42:14.159914][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="stitched-ad-1668084134-30168000000",CLASS="twitch-stitched-ad",START-DATE="2022-11-10T12:42:14.763Z",DURATION=30.168,X-TV-TWITCH-AD-URL="https://help.twitch.tv/s/article/ad-experience-on-twitch",X-TV-TWITCH-AD-COMMERCIAL-ID="6da319d3c924444382f658c28f37585a",X-TV-TWITCH-AD-RADS-TOKEN="SOME-LONG-BASE64-TOKEN",X-TV-TWITCH-AD-LOUDNESS="-10.980000",X-TV-TWITCH-AD-POD-LENGTH="2",X-TV-TWITCH-AD-POD-POSITION="0",X-TV-TWITCH-AD-CLICK-BEACON-ID="clickbc037137-1877-47eb-a526-8aab0ff8bc27",X-TV-TWITCH-AD-CREATIVE-ID="2474283100494",X-TV-TWITCH-AD-LINE-ITEM-ID="2379251610298",X-TV-TWITCH-AD-CLICK-TRACKING-URL="https://example.com",X-TV-TWITCH-AD-AD-FORMAT="standard_video_ad",X-TV-TWITCH-AD-ROLL-TYPE="MIDROLL"
[13:42:14.160043][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="source-1668084134",CLASS="twitch-stream-source",START-DATE="2022-11-10T12:42:14.763Z",END-ON-NEXT=YES,X-TV-TWITCH-STREAM-SOURCE="Amazon|2474283100494"
[13:42:14.160133][stream.hls_playlist][trace] #EXT-X-DATERANGE:ID="quartile-1668084134-0",CLASS="twitch-ad-quartile",START-DATE="2022-11-10T12:42:14.763Z",DURATION=2.000,X-TV-TWITCH-AD-QUARTILE="0"
[13:42:14.160221][stream.hls_playlist][trace] #EXT-X-DISCONTINUITY
[13:42:14.160280][stream.hls_playlist][trace] #EXT-X-TWITCH-PREFETCH:https://video-edge-c55de4.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts
[13:42:14.160357][stream.hls_playlist][trace] #EXT-X-TWITCH-PREFETCH:https://video-edge-c55de4.fra02.abs.hls.ttvnw.net/v1/segment/SOME-LONG-BASE64-TOKEN.ts

@zer0def
Copy link

zer0def commented Nov 10, 2022

I just had a, I think 3 minute long, Commercial break in progress block, exited the stream after 5-10 seconds into it resuming from an ad break.

streamlink-trace.log.gz

@bastimeyer
Copy link
Member

Thanks. I think I already have enough data with stuff mentioned in my last post. All I needed was a case where the filtering fails. My first run from the previous posts had ads filtered out correctly despite the prefetch segments, but my last one did not, so this should be enough for figuring out the issue. I will need to see how the cloning of the last regular segment affects the dateranges included for the prefetch data, where the ads already start. AFAIA this is not taken into consideration in the ad filtering implementation. I had already mentioned this in the last post of #4106.

You can keep running the trace logs, but it will most likely not be necessary anymore. Once I need new/more data, I will post an update.

@bastimeyer
Copy link
Member

bastimeyer commented Nov 10, 2022

I have pushed a branch to my fork repo which you can test:
master...bastimeyer:streamlink:plugins/twitch/fix-prefetch-ads
See the install docs on how to install Streamlink from different branches via pip:
https://streamlink.github.io/install.html#pypi-package-and-source-code

pip install -U git+https://github.com/bastimeyer/streamlink.git@plugins/twitch/fix-prefetch-ads

I won't be submitting a PR for this just yet, because I have not fully tested it, so this could also be complete garbage. Let's see... The added test you can see in the diff which is built from the data I have gathered earlier today however fails without the modification of the custom TwitchM3U8Parser, which is responsible for flagging segments as ads and which I hope I have fixed.

A bit more as a clarification on why I think mid-roll ads didn't get filtered out correctly:
As explained, the prefetch segment implementation is not ideal. This is because of the lack of proper low-latency streaming support in the current version of the HLS protocol. Future versions of the protocol will/might/should fix this, so that streaming providers like Twitch don't have to use custom solutions. Streamlink is therefore unfortunately relying on a kinda bad solution that shifts the live edge offset by copying the data from the last real (non-prefetch) segments unless a different solution gets used which adds more delay, and we don't want that.
What has been missed however was an extrapolation of the program date time of prefetch segments. This was not necessary in the past because ads were apparently not included in any prefetch data. Now prefetch segments can also be ads, and they are annotated by regular date-range tags. Since prefetch data does only contain a URL for fetching the data and since nothing else is included, what needs to be done when copying the data from the last regular segment is modifying the program date time of its copy and re-checking whether it is an ad.
There's also a second optimization. Regular segments can have an optional title. For normal streams, the title is "live", and for VODs, the title is missing (I think, can't remember). Ads however use a title with "Amazon" in it and an additional timestamp value. Looking for "Amazon" in the segment title should therefore also be done in addition to checking the date ranges.

Once I'm confident with my changes, I will open a PR for proper review. The branch is currently based on a different commit which I have opened a separate PR for, and this will need to be changed anyway. We also had already scheduled and then delayed the 5.1.0 release, which means a fix will definitely be included before we publish the next release.

Please test. Finding mid-roll ads is a bit tedious. And as already explained, this does only filter out ads, and even if it works properly without the "purple screen", there will still be a stream discontinuity, which means bad players like old versions of VLC might still crash. This is a known issue which we can't do anything about. As always, use recent software versions or better, switch to a different player like MPV if this keeps happening on recent versions of VLC as well. Enough with off-topic stuff now, though.


edit:
There are still some issues with the mid-roll ad filtering. Just ran into an issue where it didn't pick up the stream again. Unfortunately I didn't do any trace logging. Annoying...

@Urbinholt
Copy link

Hi, i guess my issue is somehow related to this one. I've been using streamlink to fetch short (~8s) fragments of a stream, but today at midnight something happened and it broke functionality. It seems that twitch injected new preroll ad (it's not even an ad actually, its splash screen saying "Preparing your stream...") like one @donnydark0 posted.
I'm using streamlink-cli like this:
streamlink -f -o output.ts https://www.twitch.tv/somestream audio_only --twitch-disable-hosting --twitch-api-header=Authentication="OAuth token" --twitch-disable-ads --hls-duration 8s
And like that it return an error saying "Could not open stream (No data returned from stream)" because ad is longer than 8 seconds and "twitch-disable-ads" actually doesn't take it into account, so i have to manually adjust hls-duration length.

@bastimeyer
Copy link
Member

bastimeyer commented Nov 10, 2022

@Urbinholt
This thread is not about ad prevention, it's about ad filtering. Ad prevention is off-topic and you can read more about that here:

As a general notice:
Please don't comment on this thread unless you've got something valuable to contribute in order to fix the issue this thread is about. Every time new issues on Twitch occur, threads like this get very messy really fast, and we want to avoid this. Please understand and be patient.

@Lyre-lee
Copy link

I've been getting this issue too, and I thought I'd point out easy twitch channels to test the ad-freezes on. Channels that stream Tarkov often manually play ads during the load-in phase before a game to prevent mid-rolls from interrupting the game. A big streamer called /WillerZ does this very reliably and is live right now. After 5 raids, the MPC-HC player froze when he manually ran an ad 100% of the time .

Thanks for working on this bug, and sorry if this isn't helpful.

@bastimeyer
Copy link
Member

bastimeyer commented Nov 10, 2022

edit:
There are still some issues with the mid-roll ad filtering. Just ran into an issue where it didn't pick up the stream again. Unfortunately I didn't do any trace logging. Annoying...

I've not been getting any mid-roll ads for the past one and a half hours or more. Not sure why. I've updated the branch that I've pushed earlier with the trace logging diff posted 8 hours ago, so it doesn't have to be applied manually.

If you want to help getting a trace log output which can be used to diagnose the resuming issue (and potentially other issues as well which I didn't catch), then please follow this after installing Streamlink from my dev branch as mentioned above, thanks:
#4934 (comment)


edit:
Had two mid-rolls since posting this, and those ads which were properly filtered out and the stream continued just fine. Still waiting for a mid-roll where the filtering incorrectly keeps going, as mentioned earlier. Didn't make any code changes since then. So if anyone could help, that would be appreciated.

@zer0def
Copy link

zer0def commented Nov 10, 2022

Log from a run where the segment didn't appear, while the player paused for as long as it was supposed to be running.

streamlink-trace.log.gz

@bastimeyer
Copy link
Member

@zer0def

where the segment didn't appear

What do you mean with this?

I'm seeing

[22:58:54.493415][stream.hls][info] Resuming stream output

after it encountered live prefetch segments again after the ad break which started at

[22:55:50.511226][stream.hls][info] Filtering out segments and pausing stream output

so everything looks like it's okay. If you take a look at the playlist reload at this time where it resumes and compare the segment/prefetch URLs with the contents of the playlist before and after, this is all fine.

@zer0def
Copy link

zer0def commented Nov 10, 2022

@bastimeyer Yeah, I only just reflected that my phrasing may have been ambiguous, as it seemed to be working fine™, based on last time this has become a developing topic.

@Fijxu
Copy link

Fijxu commented Nov 10, 2022

@bastimeyer I tested your pull request, it doesn't work, it still show the ads placeholder (I will enable the debug flag now because i forgot that)

@bastimeyer
Copy link
Member

@Fijxu Post a trace log with the patch applied. As said, the only issue I will have to look into later today is that it doesn't stop filtering in some cases. If you're seeing what you have posted (and I have removed because it's unnecessary spam ITT), then you either have not set the --twitch-disable-ads parameter, or you were very likely acidentally running a completely different version/build of Streamlink. Without any information, especially the header of the trace/debug log, this claim is useless.

@bastimeyer
Copy link
Member

Since I didn't post this yesterday, a PR has been opened for anyone to test and submit feedback:
#4942

@bastimeyer
Copy link
Member

I'd like to ask for some more feedback.

As said, I am not 100% confident with the current state of my fixes which I have submitted in PR #4942, because I had two ad blocks over the past 24h now which caused the filtering to keep running, effectively pausing the stream forever. Other mid-roll ads were all filtered out fine, dozens of them. Unfortunately, I didn't capture any logs during these two bad tests, so I don't have any data for that and can't reproduce the issue.

I have once again updated the branch I've commented about earlier (not the PR branch). The data I'm looking for is a full trace log without any truncation where mid-roll ads occurred and where the stream did not resume playing after the ads ended. Ad blocks can take several minutes now, so patience is needed. The branch doesn't require any additional changes.

Once again, in order to install from my dev branch, use pip. The branch is this, so basically the commits of the PR and another one for temporary trace logging support:
master...bastimeyer:streamlink:plugins/twitch/fix-prefetch-ads
Docs on how to install Streamlink from different branches via pip can be read here:
https://streamlink.github.io/install.html#pypi-package-and-source-code

pip install -U git+https://github.com/bastimeyer/streamlink.git@plugins/twitch/fix-prefetch-ads

Then run

rm -f tracelog.txt
streamlink --loglevel=trace --logfile=tracelog.txt --twitch-disable-ads twitch.tv/CHANNEL best

If you want to see the log while the stream is running, run tail -f tracelog.txt from another shell instance.

Please post and upload the compressed log here without removing any parts, especially not the log header, so that I know that you were actually running the right thing with the right arguments. If the log is too large and mid-rolls didn't happen for a long time, then it's probably better to use a different log and try again.

As said, I'm only looking for those cases where mid-roll ads caused the filtering to not end, even after 10 minutes or so. I need to know which data was included in the HLS playlist which caused this behavior.

Otherwise, please follow #4942 for any updates.

Thanks.

@Fijxu
Copy link

Fijxu commented Nov 11, 2022

Ok, i tested your branch, i still get mid-roll ads
tracelog.tar.gz

@bastimeyer
Copy link
Member

@Fijxu You are not running the version from my branch, as you can see in your log file. I've already told you this in my other comment that this is very likely the reason. Now you know why.

[17:50:06.694638][cli][debug] Streamlink: 5.0.1

@Fijxu
Copy link

Fijxu commented Nov 11, 2022

Ok, i am dumb, it was using my preinstalled streamlink executable.
So i cloned your repo, git checkout your fix branch and do pip install . in a pipenv environment.

For some reason it shows this version of streamlink streamlink 3.1.1+365.ge7e4682a but that also happens using the command that you provided for: ( pip install -U git+https://github.com/bastimeyer/streamlink.git@plugins/twitch/fix-prefetch-ads ) so idk

Now it shows the traces of the streams, my bad, srry :p
The mid-roll add starts in the line 17969

tracelog.tar.gz

Also i can talk to you in matrix if you want to test more things in real time

@bastimeyer
Copy link
Member

As said, I'm only looking for those cases where mid-roll ads caused the filtering to not end, even after 10 minutes or so.

This is not the case according to your logs ([19:04:49.072617][stream.hls][info] Resuming stream output). This is just a regular mid-roll ad filtering with the stream output continuing afterwards. Did your MPV stop rendering or what? Even if, there's nothing that could be done. Streamlink has only written data of the regular stream to the output, and gaps can't be bridged, so the player needs to handle this on its own, regardless of incorrect PTS/DTS values.

For some reason it shows this version of streamlink streamlink 3.1.1+365.ge7e4682a

That's because my fork doesn't have the latest tags pushed and the version gets calculated differently by versioningit. The git commit ID is the only part which matters.

@Fijxu
Copy link

Fijxu commented Nov 11, 2022

Did your MPV stop rendering or what?

Yes, just for some minutes and then it resumes the stream after the mid-roll ad as should be, right?

@mjevans
Copy link

mjevans commented Nov 12, 2022

It would be helpful if streamlink mentioned (on the console) a link to directions for using the OAuth token from a signed in browser cookie. I wasn't even aware it has regained the ability to utilize Twitch credentials again until this issue happened.

The OAuth Twitch subscription benefits / authentication directions mentioned in #4949 are a good overview and would be great on some landing page at a permanent URL.

@gravyboat
Copy link
Member

@mjevans It does have a dedicated documentation page: latest, stable. It was mentioned in the associated version release notes.

@mjevans
Copy link

mjevans commented Nov 12, 2022

As I said, it would be helpful if how to setup ad-skipping were linked from the console messages, when an ad happened. Others may be like I had been until this bug thread and not realize there had been a change in functionality; particularly when it hadn't mattered that much since ads were being skipped before anyway.

@zer0def
Copy link

zer0def commented Nov 12, 2022

@bastimeyer @Fijxu I've noticed similar behavior specifically in cases where a streamer slaps an ad roll as they're winding down the stream. Would it be possible that the roll itself extends beyond the remaining length of the actual stream?

I faintly remember seeing (and promptly discarding without much evaluation) a log where Streamlink keeps trying to fetch segments from a stream I've left on overnight, long after it has ended.

@bastimeyer
Copy link
Member

a log where Streamlink keeps trying to fetch segments from a stream I've left on overnight, long after it has ended.

This is issue #2198 due to the missing #EXT-X-ENDLIST tag when streams go offline on Twitch. If you have set your timeout values too high, then Streamlink won't terminate. Otherwise it terminates after 60 seconds due to the lack of data.

However, it is possible that if the output is paused it is interfering with the timeout, because the timeout gets ignored during pauses. So if a stream goes offline during a pause, this is an issue. I didn't run into this specific issue though.

But thanks for the hint, this needs to be fixed at some point. The solution I proposed in #2198 (comment) should be good enough.


how to setup ad-skipping were linked from the console messages

No, that would be way too much and unnecessary noise. And storing cached message checks for only displaying a message once in a while is also not a great idea. We can improve the notes of the plugin file though which is shown in the plugins list, and we can also improve the description of the --twitch-api-headers description, which gets shown in the docs, --help text and manual.

@zer0def
Copy link

zer0def commented Nov 12, 2022

Just to provide the context for the mentioned event: I've increased that timeout to 180 seconds, but the stream (left running, mind you), at the point I've realized it has ended, had been off for hours. Thanks for clarifying that particular case, tho.

@bastimeyer
Copy link
Member

bastimeyer commented Nov 12, 2022

Just merged #4942, so that the main issue is fixed. The next nightly builds for users of Windows will be available in a couple of hours. Otherwise, install from the master branch via pip:
https://streamlink.github.io/install.html#pypi-package-and-source-code

Streamlink 5.1.0 will be published soon.

I will also delete my secondary dev branch now, as it's not needed anymore.

As said in #4942, I haven't been able to find a mid-roll ad block again where the --twitch-disable-ads ad-filtering didn't stop and the stream stayed paused forever. Not even sure if it's an actual bug or if Twitch was simply serving infinite ads. If this keeps happening again, then please open a new issue and provide a proper log file, but do not open new issues if you don't understand any of this. We've just added a new log level called all and added all log messages to the HLS implementation's M3U8 parser, so the same verbose logs can be generated as mentioned above, just with the --loglevel=all parameter instead of --loglevel=trace.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
duplicate This issue or pull request already exists plugin issue A Plugin does not work correctly
Projects
None yet
Development

Successfully merging a pull request may close this issue.