--- yt_dlp/extractor/yandexvideo.py.b	2000-01-01 04:01:00.000000000 +0300
+++ yt_dlp/extractor/yandexvideo.py	2025-01-26 01:11:32.374406912 +0300
@@ -257,18 +257,39 @@
         if redirect:
             video_id = self._match_id(redirect)
             webpage = self._download_webpage(redirect, video_id, note='Redirecting')
+###        print('GETTING DATA\n')
         data_json = self._search_json(
-            r'("data"\s*:|data\s*=)', webpage, 'metadata', video_id, contains_pattern=r'{["\']_*serverState_*video.+}')
-        serverstate = self._search_regex(r'(_+serverState_+video-site_[^_]+_+)', webpage, 'server state')
+            r'var _params=\(', webpage, 'metadata', video_id, contains_pattern=r'{.+streamsResponse.+}')
+###        print('DATA = [[[[[[[[[', data_json, ']]]]]]]]]')
         uploader = self._search_regex(r'(<a\s*class=["\']card-channel-link[^"\']+["\'][^>]+>)',
                                       webpage, 'uploader', default='<a>')
         uploader_name = extract_attributes(uploader).get('aria-label')
-        item_id = traverse_obj(data_json, (serverstate, 'videoViewer', 'openedItemId', {str}))
-        video_json = traverse_obj(data_json, (serverstate, 'videoViewer', 'items', item_id, {dict})) or {}
+        video_meta = traverse_obj(data_json, ('ssrData', 'videoMetaResponse', {dict}))
+        video_meta2 = traverse_obj(video_meta, ('video', {dict}))
+###        m3u8_url = traverse_obj(video_meta2, ('id', {str}))
+###        print("m3u8 url = ", m3u8_url)
+        streams = traverse_obj(data_json, ('ssrData', 'streamsResponse', 'SingleStream', 0, {dict}))
+###        print('streams=',streams)
 
         formats, subtitles = [], {}
-        for s_url in traverse_obj(video_json, ('video', 'streams', ..., {url_or_none})):
-            ext = determine_ext(s_url)
+#        for s_url in traverse_obj(streams, ('StreamInfo', ..., ..., {url_or_none})):
+#  there is also "OutputStreamWithAudioMute" streams, don't know if they even needed
+#  for MPD, audio stream is separate anyway so the're redundant
+        for s_url in traverse_obj(streams, ('StreamInfo', ..., "OutputStream", {url_or_none})):
+###            print('found URL = ',s_url)
+            ext = determine_ext(s_url,'mpd')
+###            print('found ext = ',ext)
+            if ext == 'mpd':
+                fmts, subs = self._extract_mpd_formats_and_subtitles(s_url, video_id, mpd_id='dash')
+            elif ext == 'm3u8':
+                fmts, subs = self._extract_m3u8_formats_and_subtitles(s_url, video_id, 'mp4')
+            formats.extend(fmts)
+            subtitles = self._merge_subtitles(subtitles, subs)
+# 2024-01-25 now streams found here, don't know if older ^ location still used for some videos
+        for s_url in traverse_obj(video_meta2, ('streams', ..., {url_or_none})):
+###            print('found URL = ',s_url)
+            ext = determine_ext(s_url,'mpd')
+###            print('found ext = ',ext)
             if ext == 'mpd':
                 fmts, subs = self._extract_mpd_formats_and_subtitles(s_url, video_id, mpd_id='dash')
             elif ext == 'm3u8':
@@ -277,15 +298,15 @@
             subtitles = self._merge_subtitles(subtitles, subs)
         return {
             'id': video_id,
-            'title': video_json.get('title') or self._og_search_title(webpage),
+            'title': video_meta.get('title') or self._og_search_title(webpage),
             'formats': formats,
             'subtitles': subtitles,
-            'duration': int_or_none(video_json.get('duration')),
-            'view_count': int_or_none(video_json.get('views')),
-            'timestamp': int_or_none(video_json.get('publicationDate')),
-            'uploader': uploader_name or data_json.get('authorName') or try_get(data_json, lambda x: x['publisher']['name']),
-            'description': video_json.get('description') or self._og_search_description(webpage),
-            'thumbnail': self._og_search_thumbnail(webpage) or try_get(data_json, lambda x: x['og']['imageUrl']),
+            'duration': int_or_none(video_meta2.get('duration')),
+            'view_count': int_or_none(video_meta2.get('views')),
+            'timestamp': int_or_none(video_meta.get('publicationDate')),
+            'uploader': uploader_name or try_get(video_meta, lambda x: x['source']['title']),
+            'description': video_meta.get('description') or self._og_search_description(webpage),
+            'thumbnail': self._og_search_thumbnail(webpage) or video_meta.get('image'),
         }
 
 
