Repository: yt-dlp/yt-dlp

Issue:
Site request radio1.be
### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

- [X] I understand that I will be **blocked** if I *intentionally* remove or skip any mandatory\* field

### Checklist

- [X] I'm reporting a new site support request
- [X] I've verified that I have **updated yt-dlp to nightly or master** ([update instructions](https://github.com/yt-dlp/yt-dlp#update-channels))
- [X] I've checked that all provided URLs are playable in a browser with the same IP and same login details
- [X] I've checked that none of provided URLs [violate any copyrights](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#is-the-website-primarily-used-for-piracy) or contain any [DRM](https://en.wikipedia.org/wiki/Digital_rights_management) to the best of my knowledge
- [X] I've searched [known issues](https://github.com/yt-dlp/yt-dlp/issues/3766) and the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar issues **including closed ones**. DO NOT post duplicates
- [X] I've read the [guidelines for opening an issue](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#opening-an-issue)
- [X] I've read about [sharing account credentials](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#are-you-willing-to-share-account-details-if-needed) and am willing to share it if required

### Region

World

### Example URLs

https://radio1.be/luister/select/de-ochtend/komt-n-va-volgend-jaar-op-in-wallonie

### Provide a description that is worded well enough to be understood

Site support request for Radio 1, a Belgiann radio channel operated by the Flemish public broadcaster Vlaamse Radio- en Televisieomroep (VRT)


### Provide verbose output that clearly demonstrates the problem

- [X] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)
- [ ] If using API, add `'verbose': True` to `YoutubeDL` params instead
- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below

### Complete Verbose Output

```shell
[debug] Command-line config: ['-vU', 'https://radio1.be/luister/select/de-ochtend/komt-n-va-volgend-jaar-op-in-wallonie']
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version nightly@2023.11.29.232714 from yt-dlp/yt-dlp-nightly-builds [6a9c7a2b5] (linux_exe)
[debug] Python 3.10.13 (CPython x86_64 64bit) - Linux-6.2.0-37-generic-x86_64-with-glibc2.35 (OpenSSL 3.2.0 23 Nov 2023, glibc 2.35)
[debug] exe versions: ffmpeg 4.4.2 (setts), ffprobe 4.4.2
[debug] Optional libraries: Cryptodome-3.19.0, brotli-1.1.0, certifi-2023.11.17, mutagen-1.47.0, requests-2.31.0, secretstorage-3.3.3, sqlite3-3.44.2, urllib3-2.1.0, websockets-12.0
[debug] Proxy map: {}
[debug] Request Handlers: urllib, requests, websockets
[debug] Loaded 1792 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp-nightly-builds/releases/latest
Latest version: nightly@2023.11.29.232714 from yt-dlp/yt-dlp-nightly-builds
yt-dlp is up to date (nightly@2023.11.29.232714 from yt-dlp/yt-dlp-nightly-builds)
[generic] Extracting URL: https://radio1.be/luister/select/de-ochtend/komt-n-va-volgend-jaar-op-in-wallonie
[generic] komt-n-va-volgend-jaar-op-in-wallonie: Downloading webpage
WARNING: [generic] Falling back on generic information extractor
[generic] komt-n-va-volgend-jaar-op-in-wallonie: Extracting information
[debug] Looking for embeds
ERROR: Unsupported URL: https://radio1.be/luister/select/de-ochtend/komt-n-va-volgend-jaar-op-in-wallonie
Traceback (most recent call last):
  File "yt_dlp/YoutubeDL.py", line 1570, in wrapper
  File "yt_dlp/YoutubeDL.py", line 1705, in __extract_info
  File "yt_dlp/extractor/common.py", line 717, in extract
  File "yt_dlp/extractor/generic.py", line 2531, in _real_extract
yt_dlp.utils.UnsupportedError: Unsupported URL: https://radio1.be/luister/select/de-ochtend/komt-n-va-volgend-jaar-op-in-wallonie
```



Discussion:
Not tested yet, but the link seems related to vrt.
In OP link, we can get the `id` from `__NEXT_DATA__` script tag especially in `props -> pageProps -> item`.
Here's the example:
```json
{
  "props": {
    "pageProps": {
      "programSlug": "de-ochtend",
      "audioSlug": "komt-n-va-volgend-jaar-op-in-wallonie",
      "pageKey": "select",
      "pageConfig": {
        "key": "select",
        "body": [],
        "banner": null,
        "channel": {
          "brand": {
            "setup": {
              "shareImage": "https://images.vrt.be/orig/2021/03/01/dfb311f4-7aa1-11eb-b07d-02b7b76bf47f.jpg"
            }
          }
        },
        "podcastsBody": null,
        "homeBody": null
      },
      "item": {
        "id": "eb6c22e9-544f-44f4-af39-cf8cccd29e22",
        "drupalId": "753569",
        "title": "Komt N-VA volgend jaar op in Wallonië?",
        "description": "In een opmerkelijk interview met het Laatste Nieuws heeft N-VA-voorzitter Bart De Wever laten verstaan dat hij met het idee speelt om volgend jaar met zijn partij op te komen in Wallonië. Zo zouden ook Walen kunnen stemmen voor N-VA.\n\nLuister naar Dave Sinardet, professor politieke wetenschappen aan de VUB en expert federalisme. \"Hij wil de scheiding tussen het Vlaamse en Waalse politiek landschap doorbreken.\" ",
        "content": "<p>In een opmerkelijk interview met het Laatste Nieuws heeft N-VA-voorzitter Bart De Wever laten verstaan dat hij met het idee speelt om volgend jaar met zijn partij op te komen in Wallonië. Zo zouden ook Walen kunnen stemmen voor N-VA.</p>\r\n\r\n<p><br />\r\nLuister naar Dave Sinardet,&nbsp;professor politieke wetenschappen aan de VUB en expert federalisme. \"Hij wil de scheiding tussen het Vlaamse en Waalse politiek landschap doorbreken.\"&nbsp;</p>\r\n",
        "startDate": "2023-12-03T07:35:35.184Z",
        "endDate": "2023-12-03T07:44:47.184Z",
        "mediaReference": "pbs-pub-7ab34a7d-864a-4656-a08f-a2071fa861f4$aud-b0dd5826-01f0-4fbb-a9e7-8646badafc0d",
        "aggregatorUrl": "https://media-services-public.vrt.be/vualto-video-aggregator-web/rest/external/v2",
        "twitter": "https://cds.vrt.radio/sites/default/files/styles/article_header_mobile/public/11/select/images/belgaimage-76118692_0.jpg?h=5bfabf5e&rnd=fe4f228d&itok=6ulF5K_D",
        "facebook": "https://cds.vrt.radio/sites/default/files/styles/article_header_mobile/public/11/select/images/belgaimage-76118692_0.jpg?h=5bfabf5e&rnd=fe4f228d&itok=6ulF5K_D",
        "image": {
          "mobile": {
            "w480": "https://cds.vrt.radio/sites/default/files/styles/article_header_mobile/public/11/select/images/belgaimage-76118692_0.jpg?h=5bfabf5e&rnd=fe4f228d&itok=6ulF5K_D",
            "w720": "https://cds.vrt.radio/sites/default/files/styles/article_header_tablet/public/11/select/images/belgaimage-76118692_0.jpg?h=5bfabf5e&rnd=fe4f228d&itok=15B2RfhD"
          },
          "desktop": {
            "w1080": "https://cds.vrt.radio/sites/default/files/styles/article_header_desktop/public/11/select/images/belgaimage-76118692_0.jpg?h=5bfabf5e&rnd=fe4f228d&itok=Jds8UlsG",
            "w1440": "https://cds.vrt.radio/sites/default/files/styles/article_header_desktop/public/11/select/images/belgaimage-76118692_0.jpg?h=5bfabf5e&rnd=fe4f228d&itok=Jds8UlsG",
            "w1620": "https://cds.vrt.radio/sites/default/files/styles/article_header_desktop/public/11/select/images/belgaimage-76118692_0.jpg?h=5bfabf5e&rnd=fe4f228d&itok=Jds8UlsG",
            "w1920": "https://cds.vrt.radio/sites/default/files/styles/article_header_desktop/public/11/select/images/belgaimage-76118692_0.jpg?h=5bfabf5e&rnd=fe4f228d&itok=Jds8UlsG",
            "w2160": "https://cds.vrt.radio/sites/default/files/styles/article_header_desktop/public/11/select/images/belgaimage-76118692_0.jpg?h=5bfabf5e&rnd=fe4f228d&itok=Jds8UlsG",
            "w2880": "https://cds.vrt.radio/sites/default/files/styles/article_header_desktop/public/11/select/images/belgaimage-76118692_0.jpg?h=5bfabf5e&rnd=fe4f228d&itok=Jds8UlsG",
            "w3840": "https://cds.vrt.radio/sites/default/files/styles/article_header_desktop/public/11/select/images/belgaimage-76118692_0.jpg?h=5bfabf5e&rnd=fe4f228d&itok=Jds8UlsG"
          }
        },
        "path": "/luister/select/de-ochtend/komt-n-va-volgend-jaar-op-in-wallonie",
        "tags": [],
        "program": {
          "code": "11och1",
          "slug": "de-ochtend",
          "image": "https://images.vrt.be/air_programs/2020/11/17/b0c8cdb6-28df-11eb-aae0-02b7b76bf47f.jpg",
          "name": "De Ochtend",
          "description": "",
          "nextBroadcast": "",
          "presenters": [
            {
              "name": "Jan Van Delm"
            }
          ],
          "channel": {
            "code": "11",
            "brand": {
              "setup": {
                "shareImage": "https://images.vrt.be/orig/2021/03/01/dfb311f4-7aa1-11eb-b07d-02b7b76bf47f.jpg"
              }
            }
          }
        },
        "entity": "select"
      },
      "statusCode": 200
    }
    ....
}
```

The site also request `https://media-services-public.vrt.be/vualto-video-aggregator-web/rest/external/v2/tokens` for getting tokens (imo same as the VRT extractor do).

In the browser (Firefox in Windows), the site seems to call api in `https://media-services-public.vrt.be/vualto-video-aggregator-web/rest/external/v2/videos/<id>?vrtPlayerToken=<token>&client=`. This url seems constructed from `<aggregatorUrl>/<mediaReference>` . This url will return response like this:
```json
{
  "duration": 552000,
  "skinType": "vod",
  "title": "Komt N-VA volgend jaar op in Wallonië?",
  "shortDescription": "<p>In een opmerkelijk interview met het Laatste Nieuws heeft N-VA-voorzitter Bart De Wever laten verstaan dat hij met het idee speelt om volgend jaar met zijn partij op te komen in Wallonië. Zo zouden ook Walen kunnen stemmen voor N-VA.</p>\r\n\r\n<p><br />\r\nLuister naar Dave Sinardet,&nbsp;professor politieke wetenschappen aan de VUB en expert federalisme. \"Hij wil de scheiding tussen het Vlaamse en Waalse politiek landschap doorbreken.\"&nbsp;</p>",
  "drm": null,
  "drmExpired": null,
  "videoRobustness": null,
  "aspectRatio": null,
  "posterImageUrl": null,
  "channelId": null,
  "targetUrls": [
    {
      "type": "hls",
      "url": "https://ondemand.vrtcdn.be/content/vod/aud-b0dd5826-01f0-4fbb-a9e7-8646badafc0d-CDN_2/aud-b0dd5826-01f0-4fbb-a9e7-8646badafc0d-CDN_2_nodrm_14c0b732-02d4-437a-96d9-a18647e52fae.ism/.m3u8?filter=%28%21%28type%3D%3D%22audio%22%26%26FourCC%21%3D%22AACL%22%29%29"
    },
    {
      "type": "mpeg_dash",
      "url": "https://ondemand.vrtcdn.be/content/vod/aud-b0dd5826-01f0-4fbb-a9e7-8646badafc0d-CDN_2/aud-b0dd5826-01f0-4fbb-a9e7-8646badafc0d-CDN_2_nodrm_14c0b732-02d4-437a-96d9-a18647e52fae.ism/.mpd?filter=%28%21%28type%3D%3D%22audio%22%26%26FourCC%21%3D%22AACL%22%29%29"
    }
  ],
  "playlist": {
    "content": []
  }
}
```

The url in `targetUrls` seems can be downloaded in yt-dlp (at least for hls, as i didn't test the dash file).
Here's the log in yt-dlp using the hls link:
```shell
> python -m yt_dlp -v -F "https://ondemand.vrtcdn.be/content/vod/aud-b0dd5826-01f0-4fbb-a9e7-8646badafc0d-CDN_2/aud-b0dd5826-01f0-4fbb-a9e7-8646badafc0d-CDN_2_nodrm_14c0b732-02d4-437a-96d9-a18647e52fae.ism/.m3u8?filter=%28%21%28type%3D%3D%22audio%22%26%26FourCC%21%3D%22AACL%22%29%29"
[debug] Command-line config: ['-v', '-F', 'https://ondemand.vrtcdn.be/content/vod/aud-b0dd5826-01f0-4fbb-a9e7-8646badafc0d-CDN_2/aud-b0dd5826-01f0-4fbb-a9e7-8646badafc0d-CDN_2_nodrm_14c0b732-02d4-437a-96d9-a18647e52fae.ism/.m3u8?filter=%28%21%28type%3D%3D%22audio%22%26%26FourCC%21%3D%22AACL%22%29%29']
[debug] Encodings: locale cp1252, fs utf-8, pref cp1252, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version stable@2023.12.30 from yt-dlp/yt-dlp [f10589e34] (source)
[debug] Lazy loading extractors is disabled
[debug] Git HEAD: 8e6e36517
[debug] Python 3.11.1 (CPython AMD64 64bit) - Windows-10-10.0.22621-SP0 (OpenSSL 1.1.1q  5 Jul 2022)
[debug] exe versions: ffmpeg 5.1.2-full_build-www.gyan.dev (setts), ffprobe 5.1.2-full_build-www.gyan.dev
[debug] Optional libraries: Cryptodome-3.16.0, brotli-1.0.9, certifi-2022.12.07, mutagen-1.46.0, sqlite3-3.39.4, websockets-10.4
[debug] Proxy map: {}
[debug] Request Handlers: urllib
[debug] Loaded 1798 extractors
[generic] Extracting URL: https://ondemand.vrtcdn.be/content/vod/aud-b0dd5826-01f0-4fbb-a9e7-8646badafc0d-CDN_2/aud-b0dd5826-01f0-4fbb-a9e7-8646badafc0d-CDN_2_nodrm_14c0b732-02d4-437a-96d9-a18647e52fae.ism/.m3u8?filter=%28%21%28type%3D%3D%22audio%22%26%26FourCC%21%3D%22AACL%22%29%29
[generic] .m3u8?filter=(!(type=="audio"&&FourCC!="AACL")): Downloading webpage
[debug] Identified a direct video link
[generic] .m3u8?filter=(!(type=="audio"&&FourCC!="AACL")): Downloading m3u8 information
[generic] .m3u8?filter=(!(type=="audio"&&FourCC!="AACL")): Checking m3u8 live status
[debug] Formats sorted by: hasvid, ie_pref, lang, quality, res, fps, hdr:12(7), vcodec:vp9.2(10), channels, acodec, size, br, asr, proto, vext, aext, hasaud, source, id
[info] Available formats for .m3u8?filter=(!(type=="audio"&&FourCC!="AACL")):
ID  EXT RESOLUTION │ FILESIZE  TBR PROTO │ VCODEC     ACODEC     ABR
────────────────────────────────────────────────────────────────────
136 mp4 audio only │ ~9.15MiB 136k m3u8  │ audio only mp4a.40.2 128k
```
However, i didn't know how to get response like browser with http client like `curl` (perhaps my `curl` version too low or something like that)
<details>
<summary>Log in curl while calling api</summary>

Using `-L` flag
```
> curl -v "https://media-services-public.vrt.be/vualto-video-aggregator-web/rest/external/v2/videos/pbs-pub-7ab34a7d-864a-4656-a08f-a2071fa861f4\$aud-b0dd5826-01f0-4fbb-a9e7-8646badafc0d?vrtPlayerToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MDU0NTY4MDAsImdlb0xvY2F0aW9uIjoiV09STEQiLCJhdXRoZW50aWNhdGVkIjpmYWxzZSwidXNlclN0YXR1cyI6IlVOS05PV04iLCJhZ2VDYXRlZ29yeSI6IlpFUk9fUExVUyIsInByZXZpZXdBbGxvd2VkIjpmYWxzZSwibWF4UXVhbGl0eSI6IkhEIiwiZHJtSW1wbGVtZW50YXRpb24iOiJXaWRldmluZSIsInRydXN0ZWRPcyI6dHJ1ZSwiZHJtQ2FwYWJpbGl0eSI6IlNXIn0.B4zFO_yalNDD9UaR7Ilzzy4NgO3dceQM6U9xFQZWheA&client=" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0" -H "Accept: */*" -H "Accept-Language: en-US,en;q=0.5" -H "Accept-Encoding: gzip, deflate, br" -H "Referer: https://radio1.be/" -H "Origin: https://radio1.be" -H "DNT: 1" -H "Sec-GPC: 1" -H "Connection: keep-alive" -H "Sec-Fetch-Dest: empty" -H "Sec-Fetch-Mode: cors" -H "Sec-Fetch-Site: cross-site" -H "TE: trailers" -L
*   Trying [2600:9000:23d0:8a00:a:ce1d:7fc0:93a1]:443...
*   Trying 18.161.97.125:443...
* Connected to media-services-public.vrt.be (2600:9000:23d0:8a00:a:ce1d:7fc0:93a1) port 443
* schannel: disabled automatic use of client certificate
* ALPN: curl offers http/1.1
* Recv failure: Connection was reset
* schannel: failed to receive handshake, SSL/TLS connection failed
* Closing connection
* schannel: shutting down SSL/TLS connection with media-services-public.vrt.be port 443
* Send failure: Connection was reset
* schannel: failed to send close msg: Failed sending data to the peer (bytes written: -1)
curl: (35) Recv failure: Connection was reset
```

Not using `-L` flag:
```
>curl -v "https://media-services-public.vrt.be/vualto-video-aggregator-web/rest/external/v2/videos/pbs-pub-7ab34a7d-864a-4656-a08f-a2071fa861f4\$aud-b0dd5826-01f0-4fbb-a9e7-8646badafc0d?vrtPlayerToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MDU0NTY4MDAsImdlb0xvY2F0aW9uIjoiV09STEQiLCJhdXRoZW50aWNhdGVkIjpmYWxzZSwidXNlclN0YXR1cyI6IlVOS05PV04iLCJhZ2VDYXRlZ29yeSI6IlpFUk9fUExVUyIsInByZXZpZXdBbGxvd2VkIjpmYWxzZSwibWF4UXVhbGl0eSI6IkhEIiwiZHJtSW1wbGVtZW50YXRpb24iOiJXaWRldmluZSIsInRydXN0ZWRPcyI6dHJ1ZSwiZHJtQ2FwYWJpbGl0eSI6IlNXIn0.B4zFO_yalNDD9UaR7Ilzzy4NgO3dceQM6U9xFQZWheA&client=" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0" -H "Accept: */*" -H "Accept-Language: en-US,en;q=0.5" -H "Accept-Encoding: gzip, deflate, br" -H "Referer: https://radio1.be/" -H "Origin: https://radio1.be" -H "DNT: 1" -H "Sec-GPC: 1" -H "Connection: keep-alive" -H "Sec-Fetch-Dest: empty" -H "Sec-Fetch-Mode: cors" -H "Sec-Fetch-Site: cross-site" -H "TE: trailers"
*   Trying [2600:9000:201d:4200:a:ce1d:7fc0:93a1]:443...
*   Trying 18.161.97.68:443...
* Connected to media-services-public.vrt.be (2600:9000:201d:4200:a:ce1d:7fc0:93a1) port 443
* schannel: disabled automatic use of client certificate
* ALPN: curl offers http/1.1
* ALPN: server accepted http/1.1
* using HTTP/1.1
> GET /vualto-video-aggregator-web/rest/external/v2/videos/pbs-pub-7ab34a7d-864a-4656-a08f-a2071fa861f4\$aud-b0dd5826-01f0-4fbb-a9e7-8646badafc0d?vrtPlayerToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MDU0NTY4MDAsImdlb0xvY2F0aW9uIjoiV09STEQiLCJhdXRoZW50aWNhdGVkIjpmYWxzZSwidXNlclN0YXR1cyI6IlVOS05PV04iLCJhZ2VDYXRlZ29yeSI6IlpFUk9fUExVUyIsInByZXZpZXdBbGxvd2VkIjpmYWxzZSwibWF4UXVhbGl0eSI6IkhEIiwiZHJtSW1wbGVtZW50YXRpb24iOiJXaWRldmluZSIsInRydXN0ZWRPcyI6dHJ1ZSwiZHJtQ2FwYWJpbGl0eSI6IlNXIn0.B4zFO_yalNDD9UaR7Ilzzy4NgO3dceQM6U9xFQZWheA&client= HTTP/1.1
> Host: media-services-public.vrt.be
> User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0
> Accept: */*
> Accept-Language: en-US,en;q=0.5
> Accept-Encoding: gzip, deflate, br
> Referer: https://radio1.be/
> Origin: https://radio1.be
> DNT: 1
> Sec-GPC: 1
> Connection: keep-alive
> Sec-Fetch-Dest: empty
> Sec-Fetch-Mode: cors
> Sec-Fetch-Site: cross-site
> TE: trailers
>
* schannel: remote party requests renegotiation
* schannel: renegotiating SSL/TLS connection
* schannel: SSL/TLS connection renegotiated
< HTTP/1.1 302 Found
< Server: CloudFront
< Date: Wed, 17 Jan 2024 01:24:51 GMT
< Content-Length: 0
< Connection: keep-alive
< Access-Control-Allow-Headers: content-type, DRM-Supports-PolEnd
< Access-Control-Allow-Methods: GET
< Access-Control-Allow-Origin: *
< Access-Control-Max-Age: 3600
< Location: /media-aggregator/v2/media-items/pbs-pub-7ab34a7d-864a-4656-a08f-a2071fa861f4\$aud-b0dd5826-01f0-4fbb-a9e7-8646badafc0d?vrtPlayerToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MDU0NTY4MDAsImdlb0xvY2F0aW9uIjoiV09STEQiLCJhdXRoZW50aWNhdGVkIjpmYWxzZSwidXNlclN0YXR1cyI6IlVOS05PV04iLCJhZ2VDYXRlZ29yeSI6IlpFUk9fUExVUyIsInByZXZpZXdBbGxvd2VkIjpmYWxzZSwibWF4UXVhbGl0eSI6IkhEIiwiZHJtSW1wbGVtZW50YXRpb24iOiJXaWRldmluZSIsInRydXN0ZWRPcyI6dHJ1ZSwiZHJtQ2FwYWJpbGl0eSI6IlNXIn0.B4zFO_yalNDD9UaR7Ilzzy4NgO3dceQM6U9xFQZWheA&client=
< X-Cache: FunctionGeneratedResponse from cloudfront
< Via: 1.1 297fb3da326382a83610b8eb79e2222e.cloudfront.net (CloudFront)
< X-Amz-Cf-Pop: LAX50-C1
< X-Amz-Cf-Id: xUmzPxWowGWizTd5AipPjLduFhTTGKngBrq-7F2IvgOcfZOGT572lw==
<
* Connection #0 to host media-services-public.vrt.be left intact
```
</details>

Resolving patch:
diff --git a/yt_dlp/extractor/_extractors.py b/yt_dlp/extractor/_extractors.py
--- a/yt_dlp/extractor/_extractors.py
+++ b/yt_dlp/extractor/_extractors.py
@@ -2289,6 +2289,7 @@
     VrtNUIE,
     KetnetIE,
     DagelijkseKostIE,
+    Radio1BeIE,
 )
 from .vtm import VTMIE
 from .medialaan import MedialaanIE
diff --git a/yt_dlp/extractor/vrt.py b/yt_dlp/extractor/vrt.py
--- a/yt_dlp/extractor/vrt.py
+++ b/yt_dlp/extractor/vrt.py
@@ -16,6 +16,7 @@
     join_nonempty,
     jwt_encode_hs256,
     make_archive_id,
+    merge_dicts,
     parse_age_limit,
     parse_iso8601,
     str_or_none,
@@ -425,3 +426,64 @@ def _real_extract(self, url):
                 ['description', 'twitter:description', 'og:description'], webpage),
             '_old_archive_ids': [make_archive_id('Canvas', video_id)],
         }
+
+
+class Radio1BeIE(VRTBaseIE):
+    _VALID_URL = r'https?://radio1\.be/(?:lees|luister/select)/(?P<id>[\w/-]+)'
+    _TESTS = [{
+        'url': 'https://radio1.be/luister/select/de-ochtend/komt-n-va-volgend-jaar-op-in-wallonie',
+        'info_dict': {
+            'id': 'eb6c22e9-544f-44f4-af39-cf8cccd29e22',
+            'title': 'Komt N-VA volgend jaar op in Wallonië?',
+            'display_id': 'de-ochtend/komt-n-va-volgend-jaar-op-in-wallonie',
+            'description': 'md5:b374ea1c9302f38362df9dea1931468e',
+            'thumbnail': r're:https?://cds\.vrt\.radio/[^/#\?&]+'
+        },
+        'playlist_mincount': 1
+    }, {
+        'url': 'https://radio1.be/lees/europese-unie-wil-onmiddellijke-humanitaire-pauze-en-duurzaam-staakt-het-vuren-in-gaza?view=web',
+        'info_dict': {
+            'id': '5d47f102-dbdb-4fa0-832b-26c1870311f2',
+            'title': 'Europese Unie wil "onmiddellijke humanitaire pauze" en "duurzaam staakt-het-vuren" in Gaza',
+            'description': 'md5:1aad1fae7d39edeffde5d3e67d276b64',
+            'thumbnail': r're:https?://cds\.vrt\.radio/[^/#\?&]+',
+            'display_id': 'europese-unie-wil-onmiddellijke-humanitaire-pauze-en-duurzaam-staakt-het-vuren-in-gaza'
+        },
+        'playlist_mincount': 1
+    }]
+
+    def _extract_video_entries(self, next_js_data, display_id):
+        video_data = traverse_obj(
+            next_js_data, ((None, ('paragraphs', ...)), {lambda x: x if x['mediaReference'] else None}))
+        for data in video_data:
+            media_reference = data['mediaReference']
+            formats, subtitles = self._extract_formats_and_subtitles(
+                self._call_api(media_reference), display_id)
+
+            yield {
+                'id': media_reference,
+                'formats': formats,
+                'subtitles': subtitles,
+                **traverse_obj(data, {
+                    'title': ('title', {str}),
+                    'description': ('body', {clean_html})
+                }),
+            }
+
+    def _real_extract(self, url):
+        display_id = self._match_id(url)
+        webpage = self._download_webpage(url, display_id)
+        next_js_data = self._search_nextjs_data(webpage, display_id)['props']['pageProps']['item']
+
+        return self.playlist_result(
+            self._extract_video_entries(next_js_data, display_id), **merge_dicts(traverse_obj(
+                next_js_data, ({
+                    'id': ('id', {str}),
+                    'title': ('title', {str}),
+                    'description': (('description', 'content'), {clean_html}),
+                }), get_all=False), {
+                    'display_id': display_id,
+                    'title': self._html_search_meta(['name', 'og:title', 'twitter:title'], webpage),
+                    'description': self._html_search_meta(['description', 'og:description', 'twitter:description'], webpage),
+                    'thumbnail': self._html_search_meta(['og:image', 'twitter:image'], webpage),
+            }))


Test patch: