streamlink / streamlink

Streamlink is a CLI utility which pipes video streams from various services into a video player
https://streamlink.github.io/
BSD 2-Clause "Simplified" License
9.93k stars 1.11k forks source link

stream.dash: invalid segment URLs for dynamic streams #5201

Open bastimeyer opened 1 year ago

bastimeyer commented 1 year ago

Checklist

Streamlink version

Latest build from the master branch

Description

There's a bug in the DASH stream's segment generator where invalid segment URLs get yielded for dynamic streams at certain times. This affects dynamic streams with a segment-timeline (DASH IF test stream - fails reliably), and also ones without a segment-timeline (steamcommunity.com - had a failure once, second log output).

Apparently, this issue does only occur at times near the full hour mark, so this indicates that something must be wrong with the time/number offset calculations.

4607 is related (or maybe the same), but presentationTimeOffset is not present here...

I haven't made any actual debugging efforts yet, but the issue was already present in 5.3.0 and earlier, before my recent code refactorings of the DASH stream parser.


The (first) log output is from an additional commit based on the branch of my PR #5199 which I'm going to submit after that PR was merged. This will add --dash-manifest-reload-attempts with default value of 3, similar to --hls-playlist-reload-attempts, and it's very much needed for that specific test-stream URL, because connections get aborted by the server all the time, so manifest reloads need a certain number of retry attempts. That's unrelated to this issue though.

Also unrelated to this specific issue is the muxer thread issue from the log below where it waits for 60s (--stream-timeout) for the copy-to-pipe threads to terminate, which they don't because their read() calls stall due to the missing data. That needs separate fixing.

Debug log

$ streamlink -l debug 'https://livesim.dashif.org/livesim/segtimeline_1/testpic_2s/Manifest.mpd' best
[cli][debug] OS:         Linux-6.1.11-1-git-x86_64-with-glibc2.37
[cli][debug] Python:     3.11.1
[cli][debug] Streamlink: 5.3.1+3.ga44365b9
[cli][debug] Dependencies:
[cli][debug]  certifi: 2022.12.7
[cli][debug]  isodate: 0.6.1
[cli][debug]  lxml: 4.9.2
[cli][debug]  pycountry: 22.3.5
[cli][debug]  pycryptodome: 3.17
[cli][debug]  PySocks: 1.7.1
[cli][debug]  requests: 2.28.2
[cli][debug]  urllib3: 1.26.14
[cli][debug]  websocket-client: 1.5.1
[cli][debug] Arguments:
[cli][debug]  url=https://livesim.dashif.org/livesim/segtimeline_1/testpic_2s/Manifest.mpd
[cli][debug]  stream=['best']
[cli][debug]  --loglevel=debug
[cli][debug]  --player=mpv
[cli][info] Found matching plugin dash for URL https://livesim.dashif.org/livesim/segtimeline_1/testpic_2s/Manifest.mpd
[plugins.dash][debug] URL=https://livesim.dashif.org/livesim/segtimeline_1/testpic_2s/Manifest.mpd; params={}
[utils.l10n][debug] Language code: en_US
[stream.dash][debug] Available languages for DASH audio streams: en (using: en)
[cli][info] Available streams: 360p (worst, best)
[cli][info] Opening stream: 360p (dash)
[cli][info] Starting player: mpv
[stream.dash][debug] Opening DASH reader for: ('p0', None, 'V300') - video/mp4
[stream.dash][debug] Opening DASH reader for: ('p0', None, 'A48') - audio/mp4
[stream.dash_manifest][debug] Generating segment timeline for dynamic playlist: ('p0', None, 'V300')
[stream.dash][debug] Reloading manifest ('p0', None, 'V300')
[stream.dash_manifest][debug] Generating segment timeline for dynamic playlist: ('p0', None, 'A48')
[stream.dash][debug] Reloading manifest ('p0', None, 'A48')
[stream.ffmpegmux][debug] ffmpeg version n5.1.2 Copyright (c) 2000-2022 the FFmpeg developers
[stream.ffmpegmux][debug]  built with gcc 12.2.0 (GCC)
[stream.ffmpegmux][debug]  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-opencl --enable-opengl --enable-shared --enable-version3 --enable-vulkan
[stream.ffmpegmux][debug]  libavutil      57. 28.100 / 57. 28.100
[stream.ffmpegmux][debug]  libavcodec     59. 37.100 / 59. 37.100
[stream.ffmpegmux][debug]  libavformat    59. 27.100 / 59. 27.100
[stream.ffmpegmux][debug]  libavdevice    59.  7.100 / 59.  7.100
[stream.ffmpegmux][debug]  libavfilter     8. 44.100 /  8. 44.100
[stream.ffmpegmux][debug]  libswscale      6.  7.100 /  6.  7.100
[stream.ffmpegmux][debug]  libswresample   4.  7.100 /  4.  7.100
[stream.ffmpegmux][debug]  libpostproc    56.  6.100 / 56.  6.100
[utils.named_pipe][info] Creating pipe streamlinkpipe-91132-1-4297
[utils.named_pipe][info] Creating pipe streamlinkpipe-91132-2-5756
[stream.ffmpegmux][debug] ffmpeg command: /usr/bin/ffmpeg -nostats -y -i /tmp/streamlinkpipe-91132-1-4297 -i /tmp/streamlinkpipe-91132-2-5756 -c:v copy -c:a copy -copyts -f matroska pipe:1
[stream.ffmpegmux][debug] Starting copy to pipe: /tmp/streamlinkpipe-91132-1-4297
[stream.ffmpegmux][debug] Starting copy to pipe: /tmp/streamlinkpipe-91132-2-5756
[cli][debug] Pre-buffering 8192 bytes
[stream.dash][debug] Download of segment: init.mp4 complete
[stream.dash][debug] Download of segment: init.mp4 complete
[stream.dash][error] Failed to open segment https://livesim.dashif.org/livesim/sts_1677427478/sid_6daec274/segtimeline_1/testpic_2s/V300/t150968497500000.m4s: Unable to open URL: https://livesim.dashif.org/livesim/sts_1677427478/sid_6daec274/segtimeline_1/testpic_2s/V300/t150968497500000.m4s (404 Client Error: Not Found for url: https://livesim.dashif.org/livesim/sts_1677427478/sid_6daec274/segtimeline_1/testpic_2s/V300/t150968497500000.m4s)
[stream.dash][debug] Download of segment: t80516518656000.m4s complete
[stream.dash][debug] Download of segment: t80516518752256.m4s complete
[stream.dash][error] Failed to open segment https://livesim.dashif.org/livesim/sts_1677427478/sid_6daec274/segtimeline_1/testpic_2s/V300/t150968497500000.m4s: Unable to open URL: https://livesim.dashif.org/livesim/sts_1677427478/sid_6daec274/segtimeline_1/testpic_2s/V300/t150968497500000.m4s (404 Client Error: Not Found for url: https://livesim.dashif.org/livesim/sts_1677427478/sid_6daec274/segtimeline_1/testpic_2s/V300/t150968497500000.m4s)
[stream.dash][error] Failed to open segment https://livesim.dashif.org/livesim/sts_1677427478/sid_6daec274/segtimeline_1/testpic_2s/V300/t150968497500000.m4s: Unable to open URL: https://livesim.dashif.org/livesim/sts_1677427478/sid_6daec274/segtimeline_1/testpic_2s/V300/t150968497500000.m4s (404 Client Error: Not Found for url: https://livesim.dashif.org/livesim/sts_1677427478/sid_6daec274/segtimeline_1/testpic_2s/V300/t150968497500000.m4s)
[stream.dash][error] Failed to open segment https://livesim.dashif.org/livesim/sts_1677427478/sid_6daec274/segtimeline_1/testpic_2s/V300/t150968497680000.m4s: Unable to open URL: https://livesim.dashif.org/livesim/sts_1677427478/sid_6daec274/segtimeline_1/testpic_2s/V300/t150968497680000.m4s (404 Client Error: Not Found for url: https://livesim.dashif.org/livesim/sts_1677427478/sid_6daec274/segtimeline_1/testpic_2s/V300/t150968497680000.m4s)
[stream.dash][error] Failed to open segment https://livesim.dashif.org/livesim/sts_1677427478/sid_6daec274/segtimeline_1/testpic_2s/V300/t150968497680000.m4s: Unable to open URL: https://livesim.dashif.org/livesim/sts_1677427478/sid_6daec274/segtimeline_1/testpic_2s/V300/t150968497680000.m4s (404 Client Error: Not Found for url: https://livesim.dashif.org/livesim/sts_1677427478/sid_6daec274/segtimeline_1/testpic_2s/V300/t150968497680000.m4s)
[stream.dash][error] Failed to open segment https://livesim.dashif.org/livesim/sts_1677427478/sid_6daec274/segtimeline_1/testpic_2s/V300/t150968497680000.m4s: Unable to open URL: https://livesim.dashif.org/livesim/sts_1677427478/sid_6daec274/segtimeline_1/testpic_2s/V300/t150968497680000.m4s (404 Client Error: Not Found for url: https://livesim.dashif.org/livesim/sts_1677427478/sid_6daec274/segtimeline_1/testpic_2s/V300/t150968497680000.m4s)
[stream.dash_manifest][debug] Generating segment timeline for dynamic playlist: ('p0', None, 'V300')
[stream.dash][debug] Reloading manifest ('p0', None, 'V300')
[stream.dash_manifest][debug] Generating segment timeline for dynamic playlist: ('p0', None, 'A48')
[stream.dash][debug] Reloading manifest ('p0', None, 'A48')
[stream.dash_manifest][debug] Generating segment timeline for dynamic playlist: ('p0', None, 'V300')
[stream.dash][debug] Reloading manifest ('p0', None, 'V300')
[stream.dash_manifest][debug] Generating segment timeline for dynamic playlist: ('p0', None, 'A48')
[stream.dash][debug] Reloading manifest ('p0', None, 'A48')
^CInterrupted! Exiting...
[cli][info] Closing currently open stream...
[stream.ffmpegmux][debug] Closing ffmpeg thread
[stream.segmented][debug] Closing worker thread
[stream.segmented][debug] Closing worker thread
[stream.segmented][debug] Closing writer thread
[stream.segmented][debug] Closing writer thread
[stream.ffmpegmux][debug] Pipe copy complete: /tmp/streamlinkpipe-91132-1-4297
[stream.dash][error] Failed to open segment https://livesim.dashif.org/livesim/sts_1677427478/sid_6daec274/segtimeline_1/testpic_2s/V300/t150968497860000.m4s: Unable to open URL: https://livesim.dashif.org/livesim/sts_1677427478/sid_6daec274/segtimeline_1/testpic_2s/V300/t150968497860000.m4s (404 Client Error: Not Found for url: https://livesim.dashif.org/livesim/sts_1677427478/sid_6daec274/segtimeline_1/testpic_2s/V300/t150968497860000.m4s)
[stream.dash][warning] Download of segment: t80516518848512.m4s aborted
[stream.ffmpegmux][debug] Closed all the substreams
^C^CException ignored in: <module 'threading' from '/usr/lib/python3.11/threading.py'>
Traceback (most recent call last):
  File "/usr/lib/python3.11/threading.py", line 1553, in _shutdown
    atexit_call()
  File "/usr/lib/python3.11/concurrent/futures/thread.py", line 31, in _python_exit
    t.join()
  File "/usr/lib/python3.11/threading.py", line 1112, in join
    self._wait_for_tstate_lock()
  File "/usr/lib/python3.11/threading.py", line 1132, in _wait_for_tstate_lock
    if lock.acquire(block, timeout):
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
KeyboardInterrupt: 
[stream.ffmpegmux][debug] Closing ffmpeg thread

----

$ streamlink -l debug 'https://steamcommunity.com/broadcast/watch/76561198843011284' best
[cli][debug] OS:         Linux-6.1.11-1-git-x86_64-with-glibc2.37
[cli][debug] Python:     3.11.1
[cli][debug] Streamlink: 5.3.0
[cli][debug] Dependencies:
[cli][debug]  certifi: 2022.12.7
[cli][debug]  isodate: 0.6.1
[cli][debug]  lxml: 4.9.2
[cli][debug]  pycountry: 22.3.5
[cli][debug]  pycryptodome: 3.17
[cli][debug]  PySocks: 1.7.1
[cli][debug]  requests: 2.28.2
[cli][debug]  urllib3: 1.26.14
[cli][debug]  websocket-client: 1.5.1
[cli][debug] Arguments:
[cli][debug]  url=https://steamcommunity.com/broadcast/watch/76561198843011284
[cli][debug]  stream=['best']
[cli][debug]  --loglevel=debug
[cli][debug]  --player=mpv
[plugins.steam][debug] Restored cookies: xxx
[cli][info] Found matching plugin steam for URL https://steamcommunity.com/broadcast/watch/76561198843011284
[plugins.steam][debug] Getting broadcast stream: sessionid=xxx
[utils.l10n][debug] Language code: en_US
[stream.dash][debug] Available languages for DASH audio streams: und (using: und)
[cli][info] Available streams: 1080p (worst, best)
[cli][info] Opening stream: 1080p (dash)
[cli][info] Starting player: mpv
[stream.dash][debug] Opening DASH reader for: 1 (video/mp4)
[stream.dash][debug] Opening DASH reader for: 1 (audio/mp4)
[stream.dash_manifest][debug] Generating segment numbers for dynamic playlist (id=video)
[stream.dash_manifest][debug] Generating segment numbers for dynamic playlist (id=audio)
[stream.dash][debug] Download of segment: init complete
[stream.ffmpegmux][debug] ffmpeg version n5.1.2 Copyright (c) 2000-2022 the FFmpeg developers
[stream.ffmpegmux][debug]  built with gcc 12.2.0 (GCC)
[stream.ffmpegmux][debug]  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-opencl --enable-opengl --enable-shared --enable-version3 --enable-vulkan
[stream.ffmpegmux][debug]  libavutil      57. 28.100 / 57. 28.100
[stream.ffmpegmux][debug]  libavcodec     59. 37.100 / 59. 37.100
[stream.ffmpegmux][debug]  libavformat    59. 27.100 / 59. 27.100
[stream.ffmpegmux][debug]  libavdevice    59.  7.100 / 59.  7.100
[stream.ffmpegmux][debug]  libavfilter     8. 44.100 /  8. 44.100
[stream.ffmpegmux][debug]  libswscale      6.  7.100 /  6.  7.100
[stream.ffmpegmux][debug]  libswresample   4.  7.100 /  4.  7.100
[stream.ffmpegmux][debug]  libpostproc    56.  6.100 / 56.  6.100
[utils.named_pipe][info] Creating pipe streamlinkpipe-67805-1-6098
[utils.named_pipe][info] Creating pipe streamlinkpipe-67805-2-1930
[stream.ffmpegmux][debug] ffmpeg command: /usr/bin/ffmpeg -nostats -y -i /tmp/streamlinkpipe-67805-1-6098 -i /tmp/streamlinkpipe-67805-2-1930 -c:v copy -c:a copy -copyts -f matroska pipe:1
[stream.ffmpegmux][debug] Starting copy to pipe: /tmp/streamlinkpipe-67805-1-6098
[stream.ffmpegmux][debug] Starting copy to pipe: /tmp/streamlinkpipe-67805-2-1930
[cli][debug] Pre-buffering 8192 bytes
[stream.dash][error] Failed to open segment https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/video/1/424/?broadcast_origin=ext4-mad1.steamserver.net: Unable to open URL: https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/video/1/424/?broadcast_origin=ext4-mad1.steamserver.net (404 Client Error: Not Found for url: https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/video/1/424/?broadcast_origin=ext4-mad1.steamserver.net)
[stream.dash][error] Failed to open segment https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/video/1/424/?broadcast_origin=ext4-mad1.steamserver.net: Unable to open URL: https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/video/1/424/?broadcast_origin=ext4-mad1.steamserver.net (404 Client Error: Not Found for url: https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/video/1/424/?broadcast_origin=ext4-mad1.steamserver.net)
[stream.dash][error] Failed to open segment https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/video/1/424/?broadcast_origin=ext4-mad1.steamserver.net: Unable to open URL: https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/video/1/424/?broadcast_origin=ext4-mad1.steamserver.net (404 Client Error: Not Found for url: https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/video/1/424/?broadcast_origin=ext4-mad1.steamserver.net)
[stream.dash][debug] Waiting for segment: 425 (1.9s)
[stream.dash][debug] Download of segment: init complete
[stream.dash][error] Failed to open segment https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/audio/1/424/?broadcast_origin=ext4-mad1.steamserver.net: Unable to open URL: https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/audio/1/424/?broadcast_origin=ext4-mad1.steamserver.net (404 Client Error: Not Found for url: https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/audio/1/424/?broadcast_origin=ext4-mad1.steamserver.net)
[stream.dash][error] Failed to open segment https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/audio/1/424/?broadcast_origin=ext4-mad1.steamserver.net: Unable to open URL: https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/audio/1/424/?broadcast_origin=ext4-mad1.steamserver.net (404 Client Error: Not Found for url: https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/audio/1/424/?broadcast_origin=ext4-mad1.steamserver.net)
[stream.dash][error] Failed to open segment https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/audio/1/424/?broadcast_origin=ext4-mad1.steamserver.net: Unable to open URL: https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/audio/1/424/?broadcast_origin=ext4-mad1.steamserver.net (404 Client Error: Not Found for url: https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/audio/1/424/?broadcast_origin=ext4-mad1.steamserver.net)
[stream.dash][debug] Waiting for segment: 425 (1.8s)
^CInterrupted! Exiting...
[cli][info] Closing currently open stream...
[stream.ffmpegmux][debug] Closing ffmpeg thread
[stream.segmented][debug] Closing worker thread
[stream.segmented][debug] Closing writer thread
[stream.segmented][debug] Closing worker thread
[stream.segmented][debug] Closing writer thread
[stream.ffmpegmux][debug] Pipe copy complete: /tmp/streamlinkpipe-67805-1-6098
^C[stream.dash][error] Failed to open segment https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/video/1/425/?broadcast_origin=ext4-mad1.steamserver.net: Unable to open URL: https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/video/1/425/?broadcast_origin=ext4-mad1.steamserver.net (404 Client Error: Not Found for url: https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/video/1/425/?broadcast_origin=ext4-mad1.steamserver.net)
[stream.dash][error] Failed to open segment https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/audio/1/425/?broadcast_origin=ext4-mad1.steamserver.net: Unable to open URL: https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/audio/1/425/?broadcast_origin=ext4-mad1.steamserver.net (404 Client Error: Not Found for url: https://cache5-ams1.steamcontent.com/broadcast/76561198843011284/5870924762196636879/segment/audio/1/425/?broadcast_origin=ext4-mad1.steamserver.net)
[stream.ffmpegmux][debug] Closing ffmpeg thread
bastimeyer commented 1 year ago

There are multiple different bugs:

bastimeyer commented 1 year ago

it looks like there's an issue with the duration and repetitions of the individual TimelineSegment objects, so it generates segment URLs with nonsense data in the segment template

https://livesim.dashif.org/livesim/segtimeline_1/testpic_2s/Manifest.mpd

Video timeline throughout a full hour:

<SegmentTemplate initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/t$Time$.m4s" timescale="90000">
  <SegmentTimeline>
    <S d="180000" r="150" t="151084412280000" />
  </SegmentTimeline>
</SegmentTemplate>

Video timeline shortly after an hour mark has passed:

<SegmentTemplate initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/t$Time$.m4s" timescale="90000">
  <SegmentTimeline>
    <S d="180000" r="149" t="151084415160000" />
    <S d="180000" r="12" />
  </SegmentTimeline>
</SegmentTemplate>

For some reason, this results in invalid segment time values (from the t attribute of the second S element). I'm not sure if this is an issue with the stream itself. I haven't seen any timeline issues of that kind in other streams.


ISO/IEC 23009-1:2022(E):

SegmentTimeline.S@t

this value of this attribute minus the value of the @presentationTimeOffset specifies the MPD start time, in @timescale units, of the first Segment in the series. The MPD start time is relative to the beginning of the Period.

The value of this attribute shall be equal to or greater than the sum of the previous S element earliest presentation time and the sum of the contiguous Segment durations.

If the value of the attribute is greater than what is expressed by the previous S element, it expresses discontinuities in the timeline.

If not present, then the value shall be assumed to be zero for the first S element and for the subsequent S elements, the value shall be assumed to be the sum of the previous S element's earliest presentation time and contiguous duration [i.e. previous S@t + @d * (@r + 1)].

https://github.com/streamlink/streamlink/blob/f635705cbe11a4f3ebf50aa9d940b8de5a37c38f/src/streamlink/stream/dash_manifest.py#L958-L967

Shporterator commented 1 year ago

I didn't understand if it was fixed, therefore I will write. On the latest version, the problem still persists. There is no such problem in version 5.3.1 and below

2023-06-03 10:31:53.920 spawn: [stream.ffmpegmux][debug] Starting copy to pipe: /tmp/streamlinkpipe-58710-1-7969 2023-06-03 10:31:53.921 spawn: [stream.ffmpegmux][debug] Starting copy to pipe: /tmp/streamlinkpipe-58710-2-9202 2023-06-03 10:31:53.923 spawn: [cli][debug] Pre-buffering 8192 bytes 2023-06-03 10:31:54.059 spawn: [stream.dash][debug] video/mp4 segment 280520676: downloading (2023-05-03T14:27:38.018000Z / 2023-06-03T10:31:54.059020Z) 2023-06-03 10:31:54.060 spawn: [stream.dash][debug] video/mp4 segment initialization: completed 2023-06-03 10:31:56.430 spawn: [stream.dash][error] video/mp4 segment 280520676: failed (Unable to open URL: https://d-oc.akamaized.net/exp=1685874713~acl=%2f*~id=4dfaf8ad-1c35-4b19-9b5b-1a1a4f4ea46b~data=hdntl~hmac=d2842b34edf7c525c580a3351e797942cd57e16428170085803af82/dash/live/2093751/219026-241038/exchange219026ucqhi_219026_8000/hR6vqitMW/media_video_8000-280520676.m4s (404 Client Error: Not Found for url: https://d-oc.akamaized.net/exp=1685874713~acl=%2f*~id=4dfaf8ad-1c35-4b19-9b5b-1a1a4f4ea46b~data=hdntl~hmac=d2842b34edf7c525c580a3351e797942cd57e16428170085803af82/dash/live/2093751/219026-241038/exchange219026ucqhi_219026_8000/hR6vqitMW/media_video_8000-280520676.m4s)) 2023-06-03 10:31:56.432 spawn: [stream.dash][debug] video/mp4 segment 280520677: downloading (2023-05-03T14:27:44.018000Z / 2023-06-03T10:31:56.431691Z) 2023-06-03 10:31:56.578 spawn: [stream.dash][error] audio/mp4 segment 280520676: failed (Unable to open URL: https://d-oc.akamaized.net/exp=1685874713~acl=%2f*~id=4dfaf8ad-1c35-4b19-9b5b-1a1a4f4ea46b~data=hdntl~hmac=d2842b34edf7c525c580a3351e797942cd57e16428170085803af82/dash/live/2093751/219026-241038/exchange219026ucqhi_219026_3000/hR6vqitMW/media_audio_3000-280520676.m4s (404 Client Error: Not Found for url: https://d-oc.akamaized.net/exp=1685874713~acl=%2f*~id=4dfaf8ad-1c35-4b19-9b5b-1a1a4f4ea46b~data=hdntl~hmac=d2842b34edf7c525c580a3351e797942cd57e16428170085803af82/dash/live/2093751/219026-241038/exchange219026ucqhi_219026_3000/hR6vqitMW/media_audio_3000-280520676.m4s))

bastimeyer commented 1 year ago

Without knowing the actual DASH manifest, this log output is useless. It's just showing the failed segment download attempts and the timestamp when it tried to access them. It's also not showing whether this is a dynamic stream or not. This thread is about dynamic DASH streams only.

Shporterator commented 1 year ago

Without knowing the actual DASH manifest

Where can I write to you to send a link?

bastimeyer commented 1 year ago

Open a new issue with all the required details. If the stream URL can't be shared publicly, then you can find the infos on my GH profile for sending it to me privately. There is no guarantee though that I will take a look at this any time soon though, because I'm busy with much more important stuff right now.