diff --git a/src/streamlink/plugins/live_russia_tv.py b/src/streamlink/plugins/live_russia_tv.py
index d28d314c..e8860718 100644
--- a/src/streamlink/plugins/live_russia_tv.py
+++ b/src/streamlink/plugins/live_russia_tv.py
@@ -1,33 +1,81 @@
+import logging
 import re
+
 from streamlink.plugin import Plugin
-from streamlink.plugin.api import http
-from streamlink.stream import HLSStream
+from streamlink.plugin.api import http, validate
+from streamlink.plugin.api.utils import itertags
+from streamlink.stream import HLSStream, HTTPStream
+
+log = logging.getLogger(__name__)
+
 
 class LiveRussia(Plugin):
-    url_re = re.compile(r"https?://(?:www.)?live.russia.tv/index/index/channel_id/")
-    iframe_re = re.compile(r"""<iframe[^>]*src=["']([^'"]+)["'][^>]*>""")
-    stream_re = re.compile(r"""window.pl.data.*m3u8":"(.*)"}.*};""")
+    url_re = re.compile(r"https?://(?:www\.|live\.)?russia.tv")
+    _data_re = re.compile(r"""window\.pl\.data\.([\w_]+)\s*=\s*['"]?(.*?)['"]?;""")
 
     @classmethod
     def can_handle_url(cls, url):
         return cls.url_re.match(url) is not None
 
+    def _get_iframe_url(self, url):
+        res = http.get(url)
+        for iframe in itertags(res.text, 'iframe'):
+            src = iframe.attributes.get("src")
+            if src:
+                return src
+
+    def _get_stream_info_url(self, url):
+        data = {}
+        res = http.get(url)
+        for m in self._data_re.finditer(res.text):
+            data[m.group(1)] = m.group(2)
+
+        log.debug("Got pl_data={0}".format(data))
+
+        if data:
+            if data["isVod"] == '0':
+                return "https:{domain}/iframe/datalive/id/{id}/sid/{sid}".format(**data)
+            else:
+                return "https:{domain}/iframe/datavideo/id/{id}/sid/{sid}".format(**data)
+
     def _get_streams(self):
-        res = http.get(self.url)
-        iframe_result = re.search(self.iframe_re, res.text)
+        iframe_url = self._get_iframe_url(self.url)
+
+        if iframe_url:
+            log.debug("Found iframe URL={0}".format(iframe_url))
+            info_url = self._get_stream_info_url(iframe_url)
+
+            if info_url:
+                log.debug("Getting info from URL: {0}".format(info_url))
+                res = http.get(info_url, headers={"Referer": iframe_url})
+                data = http.json(res)
+
+                if data['status'] == 200:
+                    for media in data['data']['playlist']['medialist']:
+                        if media['errors']:
+                            log.error(media['errors'].replace('\n', '').replace('\r', ''))
+
+                        for media_type in media.get('sources', []):
+
+                            if media_type == "m3u8":
+                                hls_url = media['sources'][media_type]['auto']
+                                for s in HLSStream.parse_variant_playlist(self.session, hls_url).items():
+                                    yield s
+
+                            if media_type == "http":
+                                for pix, url in media['sources'][media_type].items():
+                                    yield "{0}p".format(pix), HTTPStream(self.session, url)
+                else:
+                    log.error("An error occurred: {0}".format(data['errors'].replace('\n', '').replace('\r', '')))
+            else:
+                log.error("Unable to get stream info URL")
+        else:
+            log.error("Could not find video iframe")
+
 
-        if not iframe_result:
-            self.logger.error("The requested content is unavailable.")
-            return
 
-        res = http.get(iframe_result.group(1))
-        stream_url_result = re.search(self.stream_re, res.text)
 
-        if not stream_url_result:
-            self.logger.error("The requested content is unavailable.")
-            return
 
-        return HLSStream.parse_variant_playlist(self.session, stream_url_result.group(1))
 
 
-__plugin__ = LiveRussia
\ No newline at end of file
+__plugin__ = LiveRussia

Problem with live.russia.tv
I have  Problem with the Plugin live.russia.tv : 
```
#SERVICE 4097:0:1:0:0:0:224:0:0:0:http%3a//127.0.0.1%3a8088/https%3a//live.russia.tv/index/index/channel_id/76:Москва 24 HD
#DESCRIPTION Москва 24 HD
#SERVICE 4097:0:1:0:0:0:449:0:0:0:http%3a//127.0.0.1%3a8088/https%3a//live.russia.tv/index/index/channel_id/1:Rossija 1 HD
#DESCRIPTION Rossija 1 HD
#SERVICE 4097:0:1:0:0:0:445:0:0:0:http%3a//127.0.0.1%3a8088/https%3a//live.russia.tv/index/index/channel_id/82:Rossija RTR HD
#DESCRIPTION Rossija RTR HD
#SERVICE 4097:0:1:0:0:0:447:0:0:0:http%3a//127.0.0.1%3a8088/https%3a//live.russia.tv/index/index/channel_id/3:Rossija 24 HD
#DESCRIPTION Rossija 24 HD
```
The Channels not working on streamlink - from PC work the channels ok.
diff --git a/tests/test_plugin_liverussiatv.py b/tests/test_plugin_liverussiatv.py
index 9310f999..f58c3dbc 100644
--- a/tests/test_plugin_liverussiatv.py
+++ b/tests/test_plugin_liverussiatv.py
@@ -2,12 +2,16 @@ import unittest
 
 from streamlink.plugins.live_russia_tv import LiveRussia
 
+
 class TestPluginLiveRussiaTv(unittest.TestCase):
     def test_can_handle_url(self):
         # should match
         self.assertTrue(LiveRussia.can_handle_url('https://live.russia.tv/index/index/channel_id/1'))
         self.assertTrue(LiveRussia.can_handle_url('https://live.russia.tv/index/index/channel_id/199'))
+        self.assertTrue(LiveRussia.can_handle_url('https://live.russia.tv/'))
+        self.assertTrue(LiveRussia.can_handle_url('http://live.russia.tv/somethingelse'))
+        self.assertTrue(LiveRussia.can_handle_url('https://russia.tv/fifaworldcup/games/1832668/video/1800840'))
 
-        # shouldn't match
-        self.assertFalse(LiveRussia.can_handle_url('https://live.russia.tv/'))
-        self.assertFalse(LiveRussia.can_handle_url('http://live.russia.tv/wrongURI'))
\ No newline at end of file
+    def test_can_handle_url_negative(self):
+        self.assertFalse(LiveRussia.can_handle_url('http://live.france.tv/somethingelse'))
+        self.assertFalse(LiveRussia.can_handle_url('https://youtube.com/watch?v=4567uj'))

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest
apt-get update apt-get install -y gcc
3.6
dev-requirements.txt docs-requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster==0.7.13
attrs==22.2.0
Babel==2.11.0
certifi==2021.5.30
charset-normalizer==2.0.12
codecov==2.1.13
commonmark==0.9.1
coverage==6.2
distlib==0.3.9
docutils==0.18.1
freezegun==1.2.2
idna==3.10
imagesize==1.4.1
importlib-metadata==4.8.3
iniconfig==1.1.1
iso-639==0.4.5
iso3166==2.1.1
isodate==0.6.1
Jinja2==3.0.3
MarkupSafe==2.0.1
mock==5.2.0
packaging==21.3
pluggy==1.0.0
py==1.11.0
pycryptodome==3.21.0
Pygments==2.14.0
pynsist==2.8
pyparsing==3.1.4
PySocks==1.7.1
pytest==7.0.1
pytest-cov==4.0.0
python-dateutil==2.9.0.post0
pytz==2025.2
recommonmark==0.7.1
requests==2.27.1
requests-mock==1.12.1
requests_download==0.1.2
six==1.17.0
snowballstemmer==2.2.0
Sphinx==1.6.7
sphinxcontrib-serializinghtml==1.1.5
sphinxcontrib-websupport==1.2.4
-e git+https://github.com/streamlink/streamlink.git@215d78956138452353c06810785b7919e17a02a8#egg=streamlink
tomli==1.2.3
typing_extensions==4.1.1
urllib3==1.26.20
websocket-client==1.3.1
yarg==0.1.10
zipp==3.6.0

name: streamlink
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - alabaster==0.7.13
      - attrs==22.2.0
      - babel==2.11.0
      - charset-normalizer==2.0.12
      - codecov==2.1.13
      - commonmark==0.9.1
      - coverage==6.2
      - distlib==0.3.9
      - docutils==0.18.1
      - freezegun==1.2.2
      - idna==3.10
      - imagesize==1.4.1
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - iso-639==0.4.5
      - iso3166==2.1.1
      - isodate==0.6.1
      - jinja2==3.0.3
      - markupsafe==2.0.1
      - mock==5.2.0
      - packaging==21.3
      - pluggy==1.0.0
      - py==1.11.0
      - pycryptodome==3.21.0
      - pygments==2.14.0
      - pynsist==2.8
      - pyparsing==3.1.4
      - pysocks==1.7.1
      - pytest==7.0.1
      - pytest-cov==4.0.0
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - recommonmark==0.7.1
      - requests==2.27.1
      - requests-download==0.1.2
      - requests-mock==1.12.1
      - six==1.17.0
      - snowballstemmer==2.2.0
      - sphinx==1.6.7
      - sphinxcontrib-serializinghtml==1.1.5
      - sphinxcontrib-websupport==1.2.4
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - urllib3==1.26.20
      - websocket-client==1.3.1
      - yarg==0.1.10
      - zipp==3.6.0
prefix: /opt/conda/envs/streamlink

tests/test_plugin_liverussiatv.py::TestPluginLiveRussiaTv::test_can_handle_url
tests/test_plugin_liverussiatv.py::TestPluginLiveRussiaTv::test_can_handle_url_negative
src/streamlink/plugins/live_russia_tv.py
src/streamlink/plugins/live_russia_tv.py