Repository: yt-dlp
Issue: NBC/ThePlatform Extractor "HTTP Error 403: Forbidden" With Some Videos.  Unrecognized DRM?
Labels: DRM,account-needed,geo-blocked,site-bug

### 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 that yt-dlp is broken on a **supported** site
- [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 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)
- [ ] 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 I'm willing to share it if required

### Region

United States of America

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

The NBC/ThePlatform extractor seems to fail on some NBC/SyFy movies with "HTTP Error 403: Forbidden" errors apparently related to invalid video URLs and no HLS formats found, so it thinks only images are available.  Maybe there has been a modest change to some movie pages for some reason and a small update to the extractor will fix it.  Otherwise, it might be that some movies are being DRM'ed and the current logic in the extractor(s) isn't identifying that situation.  My example of a failure case is from the movie "The Terminator".  I thought it might be a global change of the site, or something impacting just the SyFy movies, but things still worked with an older SyFy movie that had downloaded fine before ("Caved In: Prehistoric Terror").  For comparison, I included the output from that successful case in the second half of the verbose output below.

### 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: ['-v', 'https://www.nbc.com/syfy-movies/video/the-terminator/4053509']
[debug] Encodings: locale cp1252, fs utf-8, pref cp1252, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version nightly@2024.10.01.232843 from yt-dlp/yt-dlp-nightly-builds [e59c82a74] (win_exe)
[debug] Python 3.8.10 (CPython AMD64 64bit) - Windows-10-10.0.19045-SP0 (OpenSSL 1.1.1k  25 Mar 2021)
[debug] exe versions: none
[debug] Optional libraries: Cryptodome-3.20.0, brotli-1.1.0, certifi-2024.08.30, curl_cffi-0.5.10, mutagen-1.47.0, requests-2.32.3, sqlite3-3.35.5, urllib3-2.2.3, websockets-13.1
[debug] Proxy map: {}
[debug] Request Handlers: urllib, requests, websockets, curl_cffi
[debug] Loaded 1838 extractors
[NBC] Extracting URL: https://www.nbc.com/syfy-movies/video/the-terminator/4053509
[NBC] 4053509: Downloading JSON metadata
[NBC] 4053509: Downloading JSON metadata
[debug] Loading ap-mvpd.nbcentertainment from cache
[NBC] 4053509: Retrieving Media Token
[ThePlatform] Extracting URL: http://link.theplatform.com/s/NnzsPC/media/guid/2304990266/4053509?mbr=true&manifest=m3u&switch=HLSServiceSecure&auth=%3CsignatureInfo%3EQEjscQpT5uNpzB7uTsQgpfPhrfOl5Fbm2pNOqQa1x3WX9UZ9l0ozV7BxQ3g0HE4fVGcl87ymH8g9Svegfbpki14HZ%2BDWkdIjmMQE6K59BZrM9B%2FrBhdWOSb%2FoMWZr3QX72P7vEYVvbFAgh3qnlXCPmdnYrKw8U%2B%2B9KyLxHYHccE%3D%3CsignatureInfo%3E%3CauthToken%3E%3CsessionGUID%3E90089f8249a9c90a7a87345572d92521%3C%2FsessionGUID%3E%3CrequestorID%3Enbcentertainment%3C%2FrequestorID%3E%3CresourceID%3E%3C%21%5BCDATA%5B%3Crss+version%3D%222.0%22+xmlns%3Amedia%3D%22http%3A%2F%2Fsearch.yahoo.com%2Fmrss%2F%22%3E%3Cchannel%3E%3Ctitle%3Esyfy%3C%2Ftitle%3E%3Citem%3E%3Ctitle%3EThe+Terminator%3C%2Ftitle%3E%3Cguid%3E4053509%3C%2Fguid%3E%3Cmedia%3Arating+scheme%3D%22urn%3Av-chip%22%3ETV-MA%3C%2Fmedia%3Arating%3E%3C%2Fitem%3E%3C%2Fchannel%3E%3C%2Frss%3E%5D%5D%3E%3C%2FresourceID%3E%3Cttl%3E420000%3C%2Fttl%3E%3CissueTime%3E2024-10-01+23%3A03%3A27+-0700%3C%2FissueTime%3E%3CmvpdId%3ESpectrum%3C%2FmvpdId%3E%3C%2FauthToken%3E#__youtubedl_smuggle=%7B%22force_smil_url%22%3A+true%7D
[ThePlatform] 4053509: Downloading SMIL data
[ThePlatform] 4053509: Checking video URL
[ThePlatform] 4053509: video URL is invalid, skipping: HTTP Error 403: Forbidden
[ThePlatform] 4053509: Checking for HLS formats
WARNING: [ThePlatform] No HLS formats found: HTTP Error 403: Forbidden
[ThePlatform] 4053509: Downloading JSON metadata
WARNING: Only images are available for download. use --list-formats to see them
[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
[debug] Default format spec: best/bestvideo+bestaudio
ERROR: [ThePlatform] 4053509: Requested format is not available. Use --list-formats for a list of available formats
Traceback (most recent call last):
  File "yt_dlp\YoutubeDL.py", line 1626, in wrapper
  File "yt_dlp\YoutubeDL.py", line 1782, in __extract_info
  File "yt_dlp\YoutubeDL.py", line 1894, in process_ie_result
  File "yt_dlp\YoutubeDL.py", line 1841, in process_ie_result
  File "yt_dlp\YoutubeDL.py", line 2977, in process_video_result
yt_dlp.utils.ExtractorError: [ThePlatform] 4053509: Requested format is not available. Use --list-formats for a list of available formats



[debug] Command-line config: ['-v', 'https://www.nbc.com/syfy-movies/video/caved-in-prehistoric-terror/3837162']
[debug] Encodings: locale cp1252, fs utf-8, pref cp1252, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version nightly@2024.10.01.232843 from yt-dlp/yt-dlp-nightly-builds [e59c82a74] (win_exe)
[debug] Python 3.8.10 (CPython AMD64 64bit) - Windows-10-10.0.19045-SP0 (OpenSSL 1.1.1k  25 Mar 2021)
[debug] exe versions: none
[debug] Optional libraries: Cryptodome-3.20.0, brotli-1.1.0, certifi-2024.08.30, curl_cffi-0.5.10, mutagen-1.47.0, requests-2.32.3, sqlite3-3.35.5, urllib3-2.2.3, websockets-13.1
[debug] Proxy map: {}
[debug] Request Handlers: urllib, requests, websockets, curl_cffi
[debug] Loaded 1838 extractors
[NBC] Extracting URL: https://www.nbc.com/syfy-movies/video/caved-in-prehistoric-terror/3837162
[NBC] 3837162: Downloading JSON metadata
[NBC] 3837162: Downloading JSON metadata
[debug] Loading ap-mvpd.nbcentertainment from cache
[NBC] 3837162: Retrieving Media Token
[ThePlatform] Extracting URL: http://link.theplatform.com/s/NnzsPC/media/guid/2304990266/3837162?mbr=true&manifest=m3u&switch=HLSServiceSecure&auth=%3CsignatureInfo%3ESeCEn9so9wj17VWIooYz15CRCuHxXZJHatLOD81MZeFuHjXgYhMz2Zj31aeT5zFEA7m%2B9620CpMj2WIKW2vqtR41%2F3MBltWDeDovcmXoXzipioCjJk7VKVM%2BKlCl7xN4iM7hIdsymVjh2rakqGpq6YbI9TOe2%2F6rF2kH9aQV5Pc%3D%3CsignatureInfo%3E%3CauthToken%3E%3CsessionGUID%3E90089f8249a9c90a7a87345572d92521%3C%2FsessionGUID%3E%3CrequestorID%3Enbcentertainment%3C%2FrequestorID%3E%3CresourceID%3E%3C%21%5BCDATA%5B%3Crss+version%3D%222.0%22+xmlns%3Amedia%3D%22http%3A%2F%2Fsearch.yahoo.com%2Fmrss%2F%22%3E%3Cchannel%3E%3Ctitle%3Esyfy%3C%2Ftitle%3E%3Citem%3E%3Ctitle%3ECaved+In%3A+Prehistoric+Terror%3C%2Ftitle%3E%3Cguid%3E3837162%3C%2Fguid%3E%3Cmedia%3Arating+scheme%3D%22urn%3Av-chip%22%3ETV-14%3C%2Fmedia%3Arating%3E%3C%2Fitem%3E%3C%2Fchannel%3E%3C%2Frss%3E%5D%5D%3E%3C%2FresourceID%3E%3Cttl%3E420000%3C%2Fttl%3E%3CissueTime%3E2024-10-01+23%3A17%3A22+-0700%3C%2FissueTime%3E%3CmvpdId%3ESpectrum%3C%2FmvpdId%3E%3C%2FauthToken%3E#__youtubedl_smuggle=%7B%22force_smil_url%22%3A+true%7D
[ThePlatform] 3837162: Downloading SMIL data
[ThePlatform] 3837162: Downloading m3u8 information
[ThePlatform] 3837162: Downloading JSON metadata
[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
[debug] Default format spec: best/bestvideo+bestaudio
[info] 3837162: Downloading 1 format(s): hls-8106
[debug] Invoking hlsnative downloader on "https://vod-lf-oneapp-prd.akamaized.net/prod/video/kdZ/ix8/3837162/1688054046254-QFQEv/7830k_1080_hls/7830k_1080_hls.m3u8"
[hlsnative] Downloading m3u8 manifest
[hlsnative] Total fragments: 883
[download] Destination: Caved In： Prehistoric Terror [3837162].mp4
[debug] File locking is not supported. Proceeding without locking
[download] 100% of    5.00GiB in 00:03:02 at 28.07MiB/s
WARNING: 3837162: Possible MPEG-TS in MP4 container or malformed AAC timestamps. Install ffmpeg to fix this automatically
```