Repository: yt-dlp
Issue: Site request for omroepzeeland.nl and omropfryslan.nl
Labels: site-request

### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

- [X] I understand that I will be **blocked** if I remove or skip any mandatory\* field

### Checklist

- [X] I'm reporting a new site support request
- [X] I've verified that I'm running yt-dlp version **2022.08.14** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
- [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/ytdl-org/youtube-dl#can-you-add-support-for-this-anime-video-site-or-site-which-shows-current-movies-for-free) or contain any [DRM](https://en.wikipedia.org/wiki/Digital_rights_management) to the best of my knowledge
- [X] I've searched 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)
- [ ] 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

Zeeland, Netherlands (I assume they don't do geoblocking)

### Example URLs

- Single tv episode: https://www.omroepzeeland.nl/radio/aflevering/zeeuwse-kamer/470335389
- Single radio episode: https://www.omroepzeeland.nl/radio/aflevering/zeeuwse-kamer/470335389
<br />

- News/zt40 page with single video: https://www.omroepzeeland.nl/nieuws/14752937/dit-is-waarom-je-straks-misschien-wel-door-roemenen-en-kroaten-verzorgd-wordt
<br />

- News/zt40 page with single audio: https://www.omroepzeeland.nl/zeeuwse-top-40/14827223/het-windorgel-farid-x-presta-britta-maria-en-secret-rendezvous
edit: for clarification, zt40 (`zeeuwse-top-40`) pages are effectively the same as news (`nieuws`) pages, videos aren't exclusive to news and audio isn't exclusive to zt40


- Live tv: https://www.omroepzeeland.nl/tv/omroep-zeeland-tv/live
- Live radio: https://www.omroepzeeland.nl/radio/omroep-zeeland-radio/live
<br />

- Single video: https://www.omroepzeeland.nl/video/BBB-en-BVNL-willen-dolgraag-meedoen-aan-St-ZNO220812BJ/bbb-en-bvnl-willen-meedoen-aan-statenverkiezingen-in-zeeland
<br />

- Single tv episode (old): https://www.omroepzeeland.nl/tv/aflevering/nehalennia-en-haar-tempel/370077612 (unplayable since recent web-site update, media still obtainable)


### Provide a description that is worded well enough to be understood
this is outdated, see [comment](https://github.com/yt-dlp/yt-dlp/issues/4676#issuecomment-1435980147)
> - For single episodes:
>   1. get the page
>   2. "id" is always after `singlecolumn",{},"`
>   3. use the id in the common bit
> - For news pages with video: 
>   1. get the page
>   2. id is always before `","video-asset"`
>   3. use id in common bit
> - For news pages with audio (edit: these don't have to be zeeuwse-top-40): 
>   1. get the page
>   2. id is always before `","audio-asset"`
>   3. use id in common bit
> - For live pages: 
>   1. get the page
>   2. id is always after `"mobile","tablet","desktop","header",`
>   3. use id in common bit
> - For video pages:
>   1. get the page
>   2. on the page is `"Contactgegevens","mobile","tablet","desktop","header",`, after which is a a date string of some sort, after which is the id
> - For old episode pages: 
>   1. try as normal episode page
>   3. if it doesn't work:
>   4. try removing `sourceid_string:` from the beginning 
>   5. try in common bit again
> <br>

Common Bit:

1. get `https://omroepzeeland.bbvms.com/p/regiogroei_zeeland_web_videoplayer/c/{id}.json`, substituting `{id}` with the id obtained earlier
2. process blueBillywig json, if already implemented, use that:
   1. parse the JSON
   1.5. check if `clipData.assets` exists, if not, fail (if tv episode, maybe try old)
   2. choose one of the assets (based on `height`, `width`, or bitrate aka `bandwidth` ), I will use number `n` from now (non-live video only)
   3. check `clipData.assets[n].src` isn't a relative path by checking if `clipData.assets[n].src` contains `dat.publicationData.defaultMediaAssetPath`, 
     if it does, the url of the video/audio/stream is `clipData.assets[n].src`
     if not: url of the video/audio/stream is `publicationData.defaultMediaAssetPath`+`clipData.assets[n].src`
   4. get the asset (audio is usually mp3, video mp4, live video m3u8, live audio is also mp3)
   5. if m3u8, process like m3u8, selecting video quality here instead of step 2.2
edit: the `clipData` object also contains the array `thumbnails`, which contains objects with the properties: `src`, `width`, `height` and `main`. the src is possibly also relative, like the asset source.
and possibly also `subtitles` in the same way, but I've never actually seen them exist.
edit 2: I assume sometimes there are multiple (news/zt40 pages) and sometimes, but not always, there is an audio-only asset in the assets array of a video (they don't have a width/height).
also, like the example zt40 page, there can be youtube embeds mixed in
 



### Provide verbose output that clearly demonstrates the problem

- [X] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)
- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below

### Complete Verbose Output

```shell
[debug] Command-line config: ['https://www.omroepzeeland.nl/nieuws/14752937/dit-is-waarom-je-straks-misschien-wel-door-roemenen-en-kroaten-verzorgd-wordt', '-vU']
[debug] Encodings: locale cp1252, fs utf-8, pref cp1252, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version 2022.08.14 [5593720] (win32_exe)
[debug] Python 3.8.10 (CPython 64bit) - Windows-10-10.0.19043-SP0
[debug] Checking exe version: ffmpeg -bsfs
[debug] Checking exe version: ffprobe -bsfs
[debug] exe versions: ffmpeg git-2020-05-22-38490cb, ffprobe git-2020-05-22-38490cb
[debug] Optional libraries: Cryptodome-3.15.0, brotli-1.0.9, certifi-2022.06.15, mutagen-1.45.1, sqlite3-2.6.0, websockets-10.3
[debug] Proxy map: {}
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Latest version: 2022.08.14, Current version: 2022.08.14
yt-dlp is up to date (2022.08.14)
[debug] [generic] Extracting URL: https://www.omroepzeeland.nl/nieuws/14752937/dit-is-waarom-je-straks-misschien-wel-door-roemenen-en-kroaten-verzorgd-wordt
[generic] dit-is-waarom-je-straks-misschien-wel-door-roemenen-en-kroaten-verzorgd-wordt: Downloading webpage
WARNING: [generic] Falling back on generic information extractor
[generic] dit-is-waarom-je-straks-misschien-wel-door-roemenen-en-kroaten-verzorgd-wordt: Extracting information
[debug] Looking for Brightcove embeds
[debug] Looking for embeds
ERROR: Unsupported URL: https://www.omroepzeeland.nl/nieuws/14752937/dit-is-waarom-je-straks-misschien-wel-door-roemenen-en-kroaten-verzorgd-wordt
Traceback (most recent call last):
  File "yt_dlp\YoutubeDL.py", line 1441, in wrapper
  File "yt_dlp\YoutubeDL.py", line 1517, in __extract_info
  File "yt_dlp\extractor\common.py", line 666, in extract
  File "yt_dlp\extractor\generic.py", line 3077, in _real_extract
yt_dlp.utils.UnsupportedError: Unsupported URL: https://www.omroepzeeland.nl/nieuws/14752937/dit-is-waarom-je-straks-misschien-wel-door-roemenen-en-kroaten-verzorgd-wordt
```