Repository: yt-dlp
Issue: [AlJazeera] ERROR: No suitable extractor (BrightcoveNew) found for URL
Labels: site-bug,patch-available

### 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)
- [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 I'm willing to share it if required

### Region

US

### Provide a description that is worded well enough to be understood

Trying to pull Brightcove embedded videos from aljazeera.com such as https://www.aljazeera.com/news/2023/9/13/putin-kim-share-warm-welcomes-in-during-second-meeting-in-four-years

ERROR: No suitable extractor (BrightcoveNew) found for URL ERROR: No suitable extractor (BrightcoveNew) found for URL https://players.brightcove.net/911432371001/csvTfAlKW_default/index.html?videoId=
 
The videoId is not being picked.

I'm not sure how to fix the issue in processing the site (haven't looked to deep on site support code), but the videoId can be pulled with javascript 

```
// Extract the video ID from the video-js tag
    const videoElement = document.querySelector('video-js');
    const videoId = videoElement.getAttribute('data-video-id');
    console.log(videoID);

```
a full method to generate the URL from the page with BrightcoveNew embedded players can use the following function in dev tools javascript console:

```
function generateBrightcoveURL() {
    // Extract the video ID from the video-js tag
    const videoElement = document.querySelector('video-js');
    const videoId = videoElement.getAttribute('data-video-id');
    console.log('videoId:',videoId);
    
    // Extract the account ID and player ID from the script src attribute
    const scriptElement = document.querySelector('script[src*="brightcove.net"]');
    const scriptSrc = scriptElement.getAttribute('src');
    const accountIdMatch = scriptSrc.match(/brightcove\.net\/(\d+)\//);
    const playerIdMatch = scriptSrc.match(/net\/\d+\/([^_]+)/);
    const embedIdMatch = scriptSrc.match(/_([^/]+)\//);

    if (accountIdMatch && playerIdMatch && embedIdMatch) {
        const accountId = accountIdMatch[1];
        const playerId = playerIdMatch[1];
        const embedId = embedIdMatch[1];

        // Construct the Brightcove URL
        const brightcoveURL = `https://players.brightcove.net/${accountId}/${playerId}_${embedId}/index.html?videoId=${videoId}`;
        
        console.log('Brightcove URL:', brightcoveURL);
        return brightcoveURL;
    } else {
        console.error('Could not extract necessary details to construct the Brightcove URL');
    }
}

// Run the function to generate the URL
generateBrightcoveURL();

```
Run yt-dlp with the brightcoveURL


### 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
yt-dlp -vU https://www.aljazeera.com/news/2023/9/13/putin-kim-share-warm-welcomes-in-during-second-meeting-in-four-years
[debug] Command-line config: ['-vU', 'https://www.aljazeera.com/news/2023/9/13/putin-kim-share-warm-welcomes-in-during-second-meeting-in-four-years']
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version stable@2024.07.09 from yt-dlp/yt-dlp [7ead7332a] (pip)
[debug] Python 3.12.4 (CPython x86_64 64bit) - macOS-12.7.5-x86_64-i386-64bit (OpenSSL 3.3.1 4 Jun 2024)
[debug] exe versions: none
[debug] Optional libraries: Cryptodome-3.20.0, brotli-1.1.0, certifi-2024.07.04, mutagen-1.47.0, requests-2.32.3, sqlite3-3.46.0, urllib3-2.2.2, websockets-12.0
[debug] Proxy map: {}
[debug] Request Handlers: urllib, requests, websockets
[debug] Loaded 1834 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Latest version: stable@2024.07.09 from yt-dlp/yt-dlp
yt-dlp is up to date (stable@2024.07.09 from yt-dlp/yt-dlp)
[AlJazeera] Extracting URL: https://www.aljazeera.com/news/2023/9/13/putin-kim-share-warm-welcomes-in-during-second-meeting-in-four-years
[AlJazeera] putin-kim-share-warm-welcomes-in-during-second-meeting-in-four-years: Downloading JSON metadata
ERROR: No suitable extractor (BrightcoveNew) found for URL https://players.brightcove.net/911432371001/csvTfAlKW_default/index.html?videoId=
  File "/usr/local/bin/yt-dlp", line 8, in <module>
    sys.exit(main())
  File "/usr/local/Cellar/yt-dlp/2024.7.9/libexec/lib/python3.12/site-packages/yt_dlp/__init__.py", line 1081, in main
    _exit(*variadic(_real_main(argv)))
  File "/usr/local/Cellar/yt-dlp/2024.7.9/libexec/lib/python3.12/site-packages/yt_dlp/__init__.py", line 1071, in _real_main
    return ydl.download(all_urls)
  File "/usr/local/Cellar/yt-dlp/2024.7.9/libexec/lib/python3.12/site-packages/yt_dlp/YoutubeDL.py", line 3602, in download
    self.__download_wrapper(self.extract_info)(
  File "/usr/local/Cellar/yt-dlp/2024.7.9/libexec/lib/python3.12/site-packages/yt_dlp/YoutubeDL.py", line 3577, in wrapper
    res = func(*args, **kwargs)
  File "/usr/local/Cellar/yt-dlp/2024.7.9/libexec/lib/python3.12/site-packages/yt_dlp/YoutubeDL.py", line 1611, in extract_info
    return self.__extract_info(url, self.get_info_extractor(key), download, extra_info, process)
  File "/usr/local/Cellar/yt-dlp/2024.7.9/libexec/lib/python3.12/site-packages/yt_dlp/YoutubeDL.py", line 1622, in wrapper
    return func(self, *args, **kwargs)
  File "/usr/local/Cellar/yt-dlp/2024.7.9/libexec/lib/python3.12/site-packages/yt_dlp/YoutubeDL.py", line 1778, in __extract_info
    return self.process_ie_result(ie_result, download, extra_info)
  File "/usr/local/Cellar/yt-dlp/2024.7.9/libexec/lib/python3.12/site-packages/yt_dlp/YoutubeDL.py", line 1863, in process_ie_result
    info = self.extract_info(
  File "/usr/local/Cellar/yt-dlp/2024.7.9/libexec/lib/python3.12/site-packages/yt_dlp/YoutubeDL.py", line 1614, in extract_info
    self.report_error(f'No suitable extractor{format_field(ie_key, None, " (%s)")} found for URL {url}',
  File "/usr/local/Cellar/yt-dlp/2024.7.9/libexec/lib/python3.12/site-packages/yt_dlp/YoutubeDL.py", line 1088, in report_error
    self.trouble(f'{self._format_err("ERROR:", self.Styles.ERROR)} {message}', *args, **kwargs)
  File "/usr/local/Cellar/yt-dlp/2024.7.9/libexec/lib/python3.12/site-packages/yt_dlp/YoutubeDL.py", line 1016, in trouble
    tb_data = traceback.format_list(traceback.extract_stack())
```