Repository: yt-dlp
Issue: [WDR] extractor parses the same manifest url twice... 
Labels: site-bug,triage,needs-investigating

### 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 bug unrelated to a specific site
- [X] I've verified that I'm running yt-dlp version **2023.03.04** ([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 all URLs and arguments with special characters are [properly quoted or escaped](https://github.com/yt-dlp/yt-dlp/wiki/FAQ#video-url-contains-an-ampersand--and-im-getting-some-strange-output-1-2839-or-v-is-not-recognized-as-an-internal-or-external-command)
- [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)

### Provide a description that is worded well enough to be understood
This is worrying me...
- **Could there be more plugins (extractors) affected?**
- **As for example on the related ARD network plugins?**
- **And what about other extractors?!**

<hr>
But let's start from the beginning...

I created a pull request for the [WDR plugin](https://github.com/yt-dlp/yt-dlp/pull/6548) thinking I may omit creating an issue about "it", but I realized this is technically a _slightly_ bigger _thing_*, so I decided now to open this issue after all.

*this could be up for debate depending on the main developers viewpoint of course

yt-dlp parses manifests (i.e. m3u8 "master" urls) from within the plugin, but the issue of WDR has made me aware that we sort-of kinda probably have better safeguards in place that don't cause us to have a situation where the extractor-plugin generates the "media formats" for the same url twice. there could be a generic filter applied to all services before they actually handle the urls.

I should say, I am not too familiar with the way, yt-dlp actually works and handles everything, down to the bone.

But generically speaking, I do believe it should be possible to apply a "duplicate manifest check" for every service in a simple way. - Implementing this may require a simple re-write for affected plug-ins (or all plug-ins if you're trying to be thorough, maybe similar to the way I did with WDR plugin, see PR above)

FYI, the verbose log below includes my implemented fix from PR above, so you won't find the mistake mentioned there, sorry for that.

### 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] 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
>yt-dlp -vU -F https://kinder.wdr.de/tv/die-sendung-mit-der-maus/av/video-krone-des-hieron-100.html
[debug] Command-line config: ['-vU', '-F', 'https://kinder.wdr.de/tv/die-sendung-mit-der-maus/av/video-krone-des-hieron-100.html']
[debug] Home config "yt-dlp.conf": ['--format', 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best', '--hls-use-mpegts', '--write-sub', '--all-subs', '--sub-format', 'srt/ssa/ass/vtt/dfxp/ttml/best', '--convert-subs', 'srt', '--ap-mso', 'Verizon', '--ap-username', 'PRIVATE', '--ap-password', 'PRIVATE', '--output', '%(title)s.%(format_id)s.%(ext)s']
[debug] Encodings: locale cp1252, fs utf-8, pref cp1252, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version 2023.01.06 [6becd25] (pip)
[debug] Python 3.10.2 (CPython AMD64 64bit) - Windows-10-10.0.19045-SP0 (OpenSSL 1.1.1m  14 Dec 2021)
[debug] exe versions: ffmpeg 2022-02-17-git-2812508086-essentials_build-www.gyan.dev (setts), ffprobe 2022-02-17-git-2812508086-essentials_build-www.gyan.dev
[debug] Optional libraries: Cryptodome-3.14.1, brotli-None, certifi-2021.10.08, mutagen-1.45.1, sqlite3-2.6.0, websockets-10.1
[debug] Proxy map: {}
[debug] Loaded 1760 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Latest version: 2023.03.04, Current version: 2023.01.06
[debug] Downloading _update_spec from https://github.com/yt-dlp/yt-dlp/releases/download/2023.03.04/_update_spec
ERROR: You installed yt-dlp with pip or using the wheel from PyPi; Use that to update
[debug] Using fake IP 53.200.88.136 (DE) as X-Forwarded-For
[WDRPage] Extracting URL: https://kinder.wdr.de/tv/die-sendung-mit-der-maus/av/video-krone-des-hieron-100.html
[WDRPage] video-krone-des-hieron-100: Downloading webpage
[download] Downloading playlist: video-krone-des-hieron-100
[WDRPage] Playlist video-krone-des-hieron-100: Downloading 1 items of 1
[download] Downloading item 1 of 1
[debug] Using fake IP 53.75.42.185 (DE) as X-Forwarded-For
[WDR] Extracting URL: http://deviceids-medp.wdr.de/ondemand/277/2773214.js
[WDR] 2773214: Downloading JSON metadata
[WDR] 2773214: Downloading m3u8 information
[debug] Formats sorted by: hasvid, ie_pref, lang, quality, res, fps, hdr:12(7), vcodec:vp9.2(10), channels, acodec, filesize, fs_approx, tbr, vbr, abr, asr, proto, vext, aext, hasaud, source, id
[info] Available formats for mdb-2773214:
ID       EXT RESOLUTION FPS │   TBR PROTO │ VCODEC        VBR ACODEC    ABR
───────────────────────────────────────────────────────────────────────────
hls-615  mp4 480x270     50 │  616k m3u8  │ avc1.4d401e  616k mp4a.40.2  0k
hls-1021 mp4 640x360     50 │ 1022k m3u8  │ avc1.4d401f 1022k mp4a.40.2  0k
hls-1273 mp4 960x540     50 │ 1273k m3u8  │ avc1.4d401f 1273k mp4a.40.2  0k
hls-2682 mp4 1280x720    50 │ 2682k m3u8  │ avc1.640020 2682k mp4a.40.2  0k
hls-4173 mp4 1920x1080   50 │ 4174k m3u8  │ avc1.64002a 4174k mp4a.40.2  0k
[download] Finished downloading playlist: video-krone-des-hieron-100
```