Repository: yt-dlp/yt-dlp

Issue:
[xvideos] not supported new url format
### 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

BR

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

new xv url format is not compatible anymore to yt-dlp, download only low quality

### 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 --hls-prefer-native -o video.mp4 'https://www.xvideos.com/video.uckofkv4e3d/teste_de_madrasta_e_meia-irma_se_sou_gay_-_macy_meadows_e_sydney_paige_-_terapia_familiar_-_alex_adams' -vU
[debug] Command-line config: ['--hls-prefer-native', '-o', 'video.mp4', 'https://www.xvideos.com/video.uckofkv4e3d/teste_de_madrasta_e_meia-irma_se_sou_gay_-_macy_meadows_e_sydney_paige_-_terapia_familiar_-_alex_adams', '-vU']
[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.03.10 from yt-dlp/yt-dlp [615a84447] (zip)
[debug] Python 3.9.2 (CPython x86_64 64bit) - Linux-5.10.0-23-amd64-x86_64-with-glibc2.31 (OpenSSL 1.1.1w  11 Sep 2023, glibc 2.31)
[debug] exe versions: ffmpeg 5.1.1-static (setts), ffprobe 5.1.1-static
[debug] Optional libraries: certifi-2024.02.02, requests-2.31.0, sqlite3-3.34.1, urllib3-2.2.0
[debug] Proxy map: {}
[debug] Request Handlers: urllib, requests
[debug] Loaded 1803 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Latest version: stable@2024.03.10 from yt-dlp/yt-dlp
yt-dlp is up to date (stable@2024.03.10 from yt-dlp/yt-dlp)
[generic] Extracting URL: https://www.xvideos.com/video.uckofkv4e3d/teste_de_madrasta_e_meia-irma_se_sou_gay_-_macy_meadows_e_sydney_paige_-_terapia_familiar_-_alex_adams
[generic] teste_de_madrasta_e_meia-irma_se_sou_gay_-_macy_meadows_e_sydney_paige_-_terapia_familiar_-_alex_adams: Downloading webpage
[redirect] Following redirect to https://www.xvideos.com/video.uckofkv4e3d/step_mom_and_step_sister_test_if_i_m_gay_-_macy_meadows_and_sydney_paige_-_family_therapy_-_alex_adams
[generic] Extracting URL: https://www.xvideos.com/video.uckofkv4e3d/step_mom_and_step_sister_test_if_i_m_gay_-_macy_meadows_and_sydney_paige_-_family_therapy_-_alex_adams
[generic] step_mom_and_step_sister_test_if_i_m_gay_-_macy_meadows_and_sydney_paige_-_family_therapy_-_alex_adams: Downloading webpage
WARNING: [generic] Falling back on generic information extractor
[generic] step_mom_and_step_sister_test_if_i_m_gay_-_macy_meadows_and_sydney_paige_-_family_therapy_-_alex_adams: Extracting information
[debug] Looking for embeds
[debug] Identified a JSON LD
[generic] Extracting URL: https://cdn77-vid-mp4.xvideos-cdn.com/heDEl7YzaARYDM6vhAfohA==,1710857035/videos/mp4/1/2/d/xvideos.com_12d8dd3274f9ccfd1246bbe532f238b1.mp4?ui=MTM1LjE4MS42Mi4xNDItL3ZpZGVvLnVja29ma3Y0ZTNkL3N0ZXBfbW9tX2Fu#__youtubedl_smuggle=%7B%22force_videoid%22%3A+%22step_mom_and_step_sister_test_if_i_m_gay_-_macy_meadows_and_sydney_paige_-_family_therapy_-_alex_adams%22%2C+%22to_generic%22%3A+true%2C+%22referer%22%3A+%22https%3A%2F%2Fwww.xvideos.com%2Fvideo.uckofkv4e3d%2Fstep_mom_and_step_sister_test_if_i_m_gay_-_macy_meadows_and_sydney_paige_-_family_therapy_-_alex_adams%22%7D
[generic] step_mom_and_step_sister_test_if_i_m_gay_-_macy_meadows_and_sydney_paige_-_family_therapy_-_alex_adams: Downloading webpage
[debug] Identified a direct video link
[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: bestvideo*+bestaudio/best
[info] step_mom_and_step_sister_test_if_i_m_gay_-_macy_meadows_and_sydney_paige_-_family_therapy_-_alex_adams: Downloading 1 format(s): mp4
[debug] Invoking http downloader on "https://cdn77-vid-mp4.xvideos-cdn.com/heDEl7YzaARYDM6vhAfohA==,1710857035/videos/mp4/1/2/d/xvideos.com_12d8dd3274f9ccfd1246bbe532f238b1.mp4?ui=MTM1LjE4MS42Mi4xNDItL3ZpZGVvLnVja29ma3Y0ZTNkL3N0ZXBfbW9tX2Fu"
[download] Destination: video.mp4
[download] 100% of   43.59MiB in 00:00:00 at 82.71MiB/s
```



Discussion:
# yt-dlp --hls-prefer-native -o video2.mp4 'https://www.xvideos.com/embedframe/uckofkv4e3d' -vU
[debug] Command-line config: ['--hls-prefer-native', '-o', 'video2.mp4', 'https://www.xvideos.com/embedframe/uckofkv4e3d', '-vU']
[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.03.10 from yt-dlp/yt-dlp [615a84447] (zip)
[debug] Python 3.9.2 (CPython x86_64 64bit) - Linux-5.10.0-23-amd64-x86_64-with-glibc2.31 (OpenSSL 1.1.1w  11 Sep 2023, glibc 2.31)
[debug] exe versions: ffmpeg 5.1.1-static (setts), ffprobe 5.1.1-static
[debug] Optional libraries: certifi-2024.02.02, requests-2.31.0, sqlite3-3.34.1, urllib3-2.2.0
[debug] Proxy map: {}
[debug] Request Handlers: urllib, requests
[debug] Loaded 1803 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Latest version: stable@2024.03.10 from yt-dlp/yt-dlp
yt-dlp is up to date (stable@2024.03.10 from yt-dlp/yt-dlp)
[generic] Extracting URL: https://www.xvideos.com/embedframe/uckofkv4e3d
[generic] uckofkv4e3d: Downloading webpage
WARNING: [generic] Falling back on generic information extractor
[generic] uckofkv4e3d: Extracting information
[debug] Looking for embeds
ERROR: Unsupported URL: https://www.xvideos.com/embedframe/uckofkv4e3d
Traceback (most recent call last):
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 1594, in wrapper
    return func(self, *args, **kwargs)
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 1729, in __extract_info
    ie_result = ie.extract(url)
  File "/usr/local/bin/yt-dlp/yt_dlp/extractor/common.py", line 732, in extract
    ie_result = self._real_extract(url)
  File "/usr/local/bin/yt-dlp/yt_dlp/extractor/generic.py", line 2530, in _real_extract
    raise UnsupportedError(url)
yt_dlp.utils.UnsupportedError: Unsupported URL: https://www.xvideos.com/embedframe/uckofkv4e3d


Resolving patch:
diff --git a/yt_dlp/extractor/xvideos.py b/yt_dlp/extractor/xvideos.py
--- a/yt_dlp/extractor/xvideos.py
+++ b/yt_dlp/extractor/xvideos.py
@@ -15,35 +15,35 @@ class XVideosIE(InfoExtractor):
     _VALID_URL = r'''(?x)
                     https?://
                         (?:
-                            (?:[^/]+\.)?xvideos2?\.com/video|
-                            (?:www\.)?xvideos\.es/video|
+                            (?:[^/]+\.)?xvideos2?\.com/video\.?|
+                            (?:www\.)?xvideos\.es/video\.?|
                             (?:www|flashservice)\.xvideos\.com/embedframe/|
                             static-hw\.xvideos\.com/swf/xv-player\.swf\?.*?\bid_video=
                         )
-                        (?P<id>[0-9]+)
+                        (?P<id>[0-9a-z]+)
                     '''
     _TESTS = [{
-        'url': 'https://www.xvideos.com/video4588838/motorcycle_guy_cucks_influencer_steals_his_gf',
-        'md5': '14cea69fcb84db54293b1e971466c2e1',
+        'url': 'http://xvideos.com/video.ucuvbkfda4e/a_beautiful_red-haired_stranger_was_refused_but_still_came_to_my_room_for_sex',
+        'md5': '396255a900a6bddb3e98985f0b86c3fd',
         'info_dict': {
-            'id': '4588838',
+            'id': 'ucuvbkfda4e',
             'ext': 'mp4',
-            'title': 'Motorcycle Guy Cucks Influencer, Steals his GF',
-            'duration': 108,
+            'title': 'A Beautiful Red-Haired Stranger Was Refused, But Still Came To My Room For Sex',
+            'duration': 1238,
             'age_limit': 18,
-            'thumbnail': r're:^https://img-hw.xvideos-cdn.com/.+\.jpg',
+            'thumbnail': r're:^https://cdn\d+-pic.xvideos-cdn.com/.+\.jpg',
         }
     }, {
         # Broken HLS formats
         'url': 'https://www.xvideos.com/video65982001/what_s_her_name',
-        'md5': 'b82d7d7ef7d65a84b1fa6965f81f95a5',
+        'md5': '56742808292c8fa1418e4538c262c58b',
         'info_dict': {
             'id': '65982001',
             'ext': 'mp4',
             'title': 'what\'s her name?',
             'duration': 120,
             'age_limit': 18,
-            'thumbnail': r're:^https://img-hw.xvideos-cdn.com/.+\.jpg',
+            'thumbnail': r're:^https://cdn\d+-pic.xvideos-cdn.com/.+\.jpg',
         }
     }, {
         'url': 'https://flashservice.xvideos.com/embedframe/4588838',
@@ -90,6 +90,18 @@ class XVideosIE(InfoExtractor):
     }, {
         'url': 'https://de.xvideos.com/video4588838/biker_takes_his_girl',
         'only_matching': True
+    }, {
+        'url': 'https://flashservice.xvideos.com/embedframe/ucuvbkfda4e',
+        'only_matching': True,
+    }, {
+        'url': 'https://www.xvideos.com/embedframe/ucuvbkfda4e',
+        'only_matching': True,
+    }, {
+        'url': 'http://static-hw.xvideos.com/swf/xv-player.swf?id_video=ucuvbkfda4e',
+        'only_matching': True,
+    }, {
+        'url': 'https://xvideos.es/video.ucuvbkfda4e/a_beautiful_red-haired_stranger_was_refused_but_still_came_to_my_room_for_sex',
+        'only_matching': True
     }]
 
     def _real_extract(self, url):


Test patch: