Repository: streamlink/streamlink

Issue:
plugins.vimeo: live event URL triggers ValidationError / DASH errors
### Checklist

- [X] This is a [plugin issue](https://streamlink.github.io/plugins.html) and not [a different kind of issue](https://github.com/streamlink/streamlink/issues/new/choose)
- [X] [I have read the contribution guidelines](https://github.com/streamlink/streamlink/blob/master/CONTRIBUTING.md#contributing-to-streamlink)
- [X] [I have checked the list of open and recently closed plugin issues](https://github.com/streamlink/streamlink/issues?q=is%3Aissue+label%3A%22plugin+issue%22)
- [X] [I have checked the commit log of the master branch](https://github.com/streamlink/streamlink/commits/master)

### Streamlink version

6.4.2 on windows 10

### Description

A live event on vimeo fails while being launched as event or video page

### Debug log

```text
 D:\_Downloads\TV+Streaming\youtubedl-streamlink\bin> .\streamlink.exe https://vimeo.com/event/3924129
[cli][debug] OS:         Windows 10
[cli][debug] Python:     3.11.6
[cli][debug] OpenSSL:    OpenSSL 3.0.11 19 Sep 2023
[cli][debug] Streamlink: 6.4.2
[cli][debug] Dependencies:
[cli][debug]  certifi: 2023.11.17
[cli][debug]  isodate: 0.6.1
[cli][debug]  lxml: 4.9.3
[cli][debug]  pycountry: 22.3.5
[cli][debug]  pycryptodome: 3.19.0
[cli][debug]  PySocks: 1.7.1
[cli][debug]  requests: 2.31.0
[cli][debug]  trio: 0.22.2
[cli][debug]  trio-websocket: 0.11.1
[cli][debug]  typing-extensions: 4.8.0
[cli][debug]  urllib3: 2.0.6
[cli][debug]  websocket-client: 1.6.3
[cli][debug] Arguments:
[cli][debug]  url=https://vimeo.com/event/3924129
[cli][debug]  --loglevel=debug
[cli][debug]  --player=D:\Program Files\VideoLAN\VLC\vlc.exe
[cli][debug]  --player-args=--qt-minimal-view
[cli][debug]  --default-stream=['720p', '720p_alt', '720p60', 'best']
[cli][debug]  --retry-max=2
[cli][debug]  --stream-segment-threads=3
[cli][debug]  --stream-timeout=20.0
[cli][debug]  --hls-playlist-reload-attempts=3
[cli][debug]  --ffmpeg-ffmpeg="D:\_Downloads\TV+Streaming\youtubedl-streamlink\ffmpeg\ffmpeg.exe"
[cli][debug]  --generic-playlist-max=3
[cli][debug]  --generic-ignore-same-url=True
[cli][info] Found matching plugin vimeo for URL https://vimeo.com/event/3924129
[cli][error] Unable to validate response text: ValidationError(dict):
  Key 'uri' not found in <{'type': 'video', 'version': '1.0', 'provider_name': 'V...>
[cli][info] Waiting for streams, retrying every 1 second(s)
[cli][error] Unable to validate response text: ValidationError(dict):
  Key 'uri' not found in <{'type': 'video', 'version': '1.0', 'provider_name': 'V...>
[cli][error] Unable to validate response text: ValidationError(dict):
  Key 'uri' not found in <{'type': 'video', 'version': '1.0', 'provider_name': 'V...>
error: No playable streams found on this URL: https://vimeo.com/event/3924129



=========================


D:\_Downloads\TV+Streaming\youtubedl-streamlink\bin> .\streamlink.exe https://vimeo.com/890064882
[cli][debug] OS:         Windows 10
[cli][debug] Python:     3.11.6
[cli][debug] OpenSSL:    OpenSSL 3.0.11 19 Sep 2023
[cli][debug] Streamlink: 6.4.2
[cli][debug] Dependencies:
[cli][debug]  certifi: 2023.11.17
[cli][debug]  isodate: 0.6.1
[cli][debug]  lxml: 4.9.3
[cli][debug]  pycountry: 22.3.5
[cli][debug]  pycryptodome: 3.19.0
[cli][debug]  PySocks: 1.7.1
[cli][debug]  requests: 2.31.0
[cli][debug]  trio: 0.22.2
[cli][debug]  trio-websocket: 0.11.1
[cli][debug]  typing-extensions: 4.8.0
[cli][debug]  urllib3: 2.0.6
[cli][debug]  websocket-client: 1.6.3
[cli][debug] Arguments:
[cli][debug]  url=https://vimeo.com/890064882
[cli][debug]  --loglevel=debug
[cli][debug]  --player=D:\Program Files\VideoLAN\VLC\vlc.exe
[cli][debug]  --player-args=--qt-minimal-view
[cli][debug]  --default-stream=['720p', '720p_alt', '720p60', 'best']
[cli][debug]  --retry-max=2
[cli][debug]  --stream-segment-threads=3
[cli][debug]  --stream-timeout=20.0
[cli][debug]  --hls-playlist-reload-attempts=3
[cli][debug]  --ffmpeg-ffmpeg="D:\_Downloads\TV+Streaming\youtubedl-streamlink\ffmpeg\ffmpeg.exe"
[cli][debug]  --generic-playlist-max=3
[cli][debug]  --generic-ignore-same-url=True
[cli][info] Found matching plugin vimeo for URL https://vimeo.com/890064882
[utils.l10n][debug] Language code: en_US
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "D:\_Downloads\TV+Streaming\youtubedl-streamlink\bin\streamlink.exe\__main__.py", line 18, in <module>
  File "D:\_Downloads\TV+Streaming\youtubedl-streamlink\pkgs\streamlink_cli\main.py", line 929, in main
    handle_url()
  File "D:\_Downloads\TV+Streaming\youtubedl-streamlink\pkgs\streamlink_cli\main.py", line 549, in handle_url
    streams = fetch_streams_with_retry(plugin, retry_streams, retry_max)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\_Downloads\TV+Streaming\youtubedl-streamlink\pkgs\streamlink_cli\main.py", line 458, in fetch_streams_with_retry
    streams = fetch_streams(plugin)
              ^^^^^^^^^^^^^^^^^^^^^
  File "D:\_Downloads\TV+Streaming\youtubedl-streamlink\pkgs\streamlink_cli\main.py", line 449, in fetch_streams
    return plugin.streams(stream_types=args.stream_types,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\_Downloads\TV+Streaming\youtubedl-streamlink\pkgs\streamlink\plugin\plugin.py", line 375, in streams
    ostreams = list(ostreams)
               ^^^^^^^^^^^^^^
  File "D:\_Downloads\TV+Streaming\youtubedl-streamlink\pkgs\streamlink\plugins\vimeo.py", line 178, in _get_streams
    for url in dash.values():
               ^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'values'
```



Discussion:
> [cli][debug]  --generic-playlist-max=3
> [cli][debug]  --generic-ignore-same-url=True

Those are not part of Streamlink... Unrelated to the plugin issue though...
It seems the issue appears just with live events somehow. Tested with an static video (not a live event) that I found at https://vimeo.com/categories/events and the plugin works. 
I'll try to found a live video for testing...

```
\bin> .\streamlink.exe https://vimeo.com/737854276
[cli][debug] OS:         Windows 10
[cli][debug] Python:     3.11.6
[cli][debug] OpenSSL:    OpenSSL 3.0.11 19 Sep 2023
[cli][debug] Streamlink: 6.4.2
[cli][debug] Dependencies:
[cli][debug]  certifi: 2023.11.17
[cli][debug]  isodate: 0.6.1
[cli][debug]  lxml: 4.9.3
[cli][debug]  pycountry: 22.3.5
[cli][debug]  pycryptodome: 3.19.0
[cli][debug]  PySocks: 1.7.1
[cli][debug]  requests: 2.31.0
[cli][debug]  trio: 0.22.2
[cli][debug]  trio-websocket: 0.11.1
[cli][debug]  typing-extensions: 4.8.0
[cli][debug]  urllib3: 2.0.6
[cli][debug]  websocket-client: 1.6.3
[cli][debug] Arguments:
[cli][debug]  url=https://vimeo.com/737854276
[cli][debug]  --loglevel=debug
[cli][debug]  --player=D:\Program Files\VideoLAN\VLC\vlc.exe
[cli][debug]  --player-args=--qt-minimal-view
[cli][debug]  --default-stream=['720p', '720p_alt', '720p60', 'best']
[cli][debug]  --retry-max=2
[cli][debug]  --stream-segment-threads=3
[cli][debug]  --stream-timeout=20.0
[cli][debug]  --hls-playlist-reload-attempts=3
[cli][debug]  --ffmpeg-ffmpeg="D:\_Downloads\TV+Streaming\youtubedl-streamlink\ffmpeg\ffmpeg.exe"
[cli][debug]  --generic-playlist-max=3
[cli][debug]  --generic-ignore-same-url=True
[cli][info] Found matching plugin vimeo for URL https://vimeo.com/737854276
[utils.l10n][debug] Language code: en_US
[stream.ffmpegmux][warning] No valid FFmpeg binary was found. See the --ffmpeg-ffmpeg option.
[stream.ffmpegmux][warning] Muxing streams is unsupported! Only a subset of the available streams can be returned!
[utils.l10n][debug] Language code: en_US
[stream.dash][debug] Available languages for DASH audio streams: NONE (using: n/a)
[cli][info] Available streams: 360p_http, 240p (worst), 240p+a66k, 240p+a98k, 240p+a128k, 240p+a192k, 360p, 360p+a66k, 360p+a98k, 360p+a128k, 360p+a192k, 540p, 540p+a66k, 540p+a98k, 540p+a128k, 540p+a192k, 720p, 720p+a66k, 720p+a98k, 720p+a128k, 720p+a192k, 1080p, 1080p+a66k, 1080p+a98k, 1080p+a128k, 1080p+a192k (best)
[cli][info] Opening stream: 720p (hls)
[cli][info] Starting player: D:\Program Files\VideoLAN\VLC\vlc.exe
[stream.hls][debug] Reloading playlist
[cli][debug] Pre-buffering 8192 bytes
[stream.hls][debug] First Sequence: 0; Last Sequence: 630
[stream.hls][debug] Start offset: 0; Duration: None; Start Sequence: 0; End Sequence: 630
[stream.hls][debug] Adding segment 0 to queue
[stream.hls][debug] Adding segment 1 to queue
[stream.hls][debug] Adding segment 2 to queue
[stream.hls][debug] Adding segment 3 to queue
[stream.hls][debug] Adding segment 4 to queue
[stream.hls][debug] Adding segment 5 to queue
[stream.hls][debug] Adding segment 6 to queue
[stream.hls][debug] Adding segment 7 to queue
[stream.hls][debug] Adding segment 8 to queue
[stream.hls][debug] Adding segment 9 to queue
[stream.hls][debug] Adding segment 10 to queue
[stream.hls][debug] Adding segment 11 to queue
[stream.hls][debug] Adding segment 12 to queue
[stream.hls][debug] Adding segment 13 to queue
[stream.hls][debug] Adding segment 14 to queue
[stream.hls][debug] Adding segment 15 to queue
[stream.hls][debug] Adding segment 16 to queue
[stream.hls][debug] Adding segment 17 to queue
[stream.hls][debug] Adding segment 18 to queue
[stream.hls][debug] Adding segment 19 to queue
[stream.hls][debug] Adding segment 20 to queue
[stream.hls][debug] Adding segment 21 to queue
[stream.hls][debug] Writing segment 0 to output
[stream.hls][debug] Segment 0 complete
[cli.output][debug] Opening subprocess: ['D:\\Program Files\\VideoLAN\\VLC\\vlc.exe', '--input-title-format', 'https://vimeo.com/737854276', '--qt-minimal-view', '-']
[stream.hls][debug] Adding segment 22 to queue
[stream.hls][debug] Writing segment 1 to output
[stream.hls][debug] Segment 1 complete
[stream.hls][debug] Adding segment 23 to queue
[cli][debug] Writing stream to output
[stream.hls][debug] Writing segment 2 to output
[stream.hls][debug] Segment 2 complete
[stream.hls][debug] Adding segment 24 to queue
[stream.hls][debug] Writing segment 3 to output
[stream.hls][debug] Segment 3 complete
...

```

It's failing even sooner for me. (Find a livestream here: https://vimeo.com/search?live=now )
```
root@pegasus:/# streamlink https://vimeo.com/908518904 --loglevel=debug
[cli][info] streamlink is running as root! Be careful!
[cli][debug] OS:         Linux-6.7.1-arch1-1-x86_64-with
[cli][debug] Python:     3.11.7
[cli][debug] OpenSSL:    OpenSSL 3.1.4 24 Oct 2023
[cli][debug] Streamlink: 6.5.1
[cli][debug] Dependencies:
[cli][debug]  certifi: 2023.11.17
[cli][debug]  isodate: 0.6.1
[cli][debug]  lxml: 4.9.4
[cli][debug]  pycountry: 22.3.5
[cli][debug]  pycryptodome: 3.20.0
[cli][debug]  PySocks: 1.7.1
[cli][debug]  requests: 2.31.0
[cli][debug]  trio: 0.21.0
[cli][debug]  trio-websocket: 0.11.1
[cli][debug]  typing-extensions: 4.9.0
[cli][debug]  urllib3: 1.26.18
[cli][debug]  websocket-client: 1.7.0
[cli][debug] Arguments:
[cli][debug]  url=https://vimeo.com/908518904
[cli][debug]  --loglevel=debug
[cli][info] Found matching plugin vimeo for URL https://vimeo.com/908518904
[utils.l10n][debug] Language code: en_US
Traceback (most recent call last):
  File "/usr/bin/streamlink", line 8, in <module>
    sys.exit(main())
             ^^^^^^
  File "/usr/lib/python3.11/site-packages/streamlink_cli/main.py", line 934, in main
    handle_url()
  File "/usr/lib/python3.11/site-packages/streamlink_cli/main.py", line 556, in handle_url
    streams = fetch_streams(plugin)
              ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/streamlink_cli/main.py", line 454, in fetch_streams
    return plugin.streams(stream_types=args.stream_types,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/streamlink/plugin/plugin.py", line 375, in streams
    ostreams = list(ostreams)
               ^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/streamlink/plugins/vimeo.py", line 178, in _get_streams
    for url in dash.values():
               ^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'values'
```
Same error for me with a live stream.

Resolving patch:
diff --git a/src/streamlink/plugins/vimeo.py b/src/streamlink/plugins/vimeo.py
--- a/src/streamlink/plugins/vimeo.py
+++ b/src/streamlink/plugins/vimeo.py
@@ -171,10 +171,12 @@ def _get_streams(self):
 
         streams = []
 
+        hls = hls or {}
         for url in hls.values():
             streams.extend(HLSStream.parse_variant_playlist(self.session, url).items())
             break
 
+        dash = dash or {}
         for url in dash.values():
             p = urlparse(url)
             if p.path.endswith("dash.mpd"):


Test patch: