prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  cybergame.tv plugin not work for livestreams
  `[cli][info] Found matching plugin cybergame for URL http://cybergame.tv/sharkisfinetoo/`
  `[cli][info] Available streams: 720p (worst, best)`
  `[cli][info] Opening stream: 720p (rtmp)`
  `[cli][error] No data returned from stream`
  For stream
  `http://cybergame.tv/<channel>`
  Internet Download Manager  produces a link like
  `rtmp://cybergametv.cdnvideo.ru/cybergame//<channel>`
  VODs fine.
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `src/streamlink/plugins/cybergame.py`
  Content:
  ```
  1 import re
  2 
  3 from streamlink.compat import urlparse
  4 from streamlink.plugin import Plugin
  5 from streamlink.plugin.api import http, validate
  6 from streamlink.stream import RTMPStream
  7 
  8 PLAYLIST_URL = "http://api.cybergame.tv/p/playlist.smil"
  9 
  10 _url_re = re.compile("""
  11     http(s)?://(\w+\.)?cybergame.tv
  12     (?:
  13         /videos/(?P<video_id>\d+)
  14     )?
  15     (?:
  16         /(?P<channel>[^/&?]+)
  17     )?
  18 """, re.VERBOSE)
  19 
  20 _playlist_schema = validate.Schema(
  21     validate.union({
  22         "base": validate.all(
  23             validate.xml_find("./head/meta"),
  24             validate.get("base"),
  25             validate.url(scheme="rtmp")
  26         ),
  27         "videos": validate.all(
  28             validate.xml_findall(".//video"),
  29             [
  30                 validate.union({
  31                     "src": validate.all(
  32                         validate.get("src"),
  33                         validate.text
  34                     ),
  35                     "height": validate.all(
  36                         validate.get("height"),
  37                         validate.text,
  38                         validate.transform(int)
  39                     )
  40                 })
  41             ]
  42         )
  43     })
  44 )
  45 
  46 
  47 class Cybergame(Plugin):
  48     @classmethod
  49     def can_handle_url(self, url):
  50         return _url_re.match(url)
  51 
  52     def _get_playlist(self, **params):
  53         res = http.get(PLAYLIST_URL, params=params)
  54         playlist = http.xml(res, schema=_playlist_schema)
  55         streams = {}
  56         for video in playlist["videos"]:
  57             name = "{0}p".format(video["height"])
  58             stream = RTMPStream(self.session, {
  59                 "rtmp": "{0}/{1}".format(playlist["base"], video["src"]),
  60                 "app": urlparse(playlist["base"]).path[1:],
  61                 "pageUrl": self.url,
  62                 "rtmp": playlist["base"],
  63                 "playpath": video["src"],
  64                 "live": True
  65             })
  66             streams[name] = stream
  67 
  68         return streams
  69 
  70     def _get_streams(self):
  71         match = _url_re.match(self.url)
  72         video_id = match.group("video_id")
  73         channel = match.group("channel")
  74 
  75         if video_id:
  76             return self._get_playlist(vod=video_id)
  77         elif channel:
  78             return self._get_playlist(channel=channel)
  79 
  80 __plugin__ = Cybergame
  81
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/src/streamlink/plugins/cybergame.py b/src/streamlink/plugins/cybergame.py
  --- a/src/streamlink/plugins/cybergame.py
  +++ b/src/streamlink/plugins/cybergame.py
  @@ -5,6 +5,7 @@
   from streamlink.plugin.api import http, validate
   from streamlink.stream import RTMPStream
   
  +LIVE_STREAM_URL = "rtmp://stream1.cybergame.tv:2936/live/"
   PLAYLIST_URL = "http://api.cybergame.tv/p/playlist.smil"
   
   _url_re = re.compile("""
  @@ -46,7 +47,7 @@
   
   class Cybergame(Plugin):
       @classmethod
  -    def can_handle_url(self, url):
  +    def can_handle_url(cls, url):
           return _url_re.match(url)
   
       def _get_playlist(self, **params):
  @@ -75,6 +76,10 @@
           if video_id:
               return self._get_playlist(vod=video_id)
           elif channel:
  -            return self._get_playlist(channel=channel)
  +            return {'live': RTMPStream(
  +                self.session,
  +                dict(rtmp=LIVE_STREAM_URL, app="live", pageUrl=self.url, playpath=channel, live=True)
  +            )}
  +
   
   __plugin__ = Cybergame
  
verification_info: {"golden_diff": "diff --git a/src/streamlink/plugins/cybergame.py b/src/streamlink/plugins/cybergame.py\n--- a/src/streamlink/plugins/cybergame.py\n+++ b/src/streamlink/plugins/cybergame.py\n@@ -5,6 +5,7 @@\n from streamlink.plugin.api import http, validate\n from streamlink.stream import RTMPStream\n \n+LIVE_STREAM_URL = \"rtmp://stream1.cybergame.tv:2936/live/\"\n PLAYLIST_URL = \"http://api.cybergame.tv/p/playlist.smil\"\n \n _url_re = re.compile(\"\"\"\n@@ -46,7 +47,7 @@\n \n class Cybergame(Plugin):\n     @classmethod\n-    def can_handle_url(self, url):\n+    def can_handle_url(cls, url):\n         return _url_re.match(url)\n \n     def _get_playlist(self, **params):\n@@ -75,6 +76,10 @@\n         if video_id:\n             return self._get_playlist(vod=video_id)\n         elif channel:\n-            return self._get_playlist(channel=channel)\n+            return {'live': RTMPStream(\n+                self.session,\n+                dict(rtmp=LIVE_STREAM_URL, app=\"live\", pageUrl=self.url, playpath=channel, live=True)\n+            )}\n+\n \n __plugin__ = Cybergame\n", "issue": "cybergame.tv plugin not work for livestreams\n`[cli][info] Found matching plugin cybergame for URL http://cybergame.tv/sharkisfinetoo/`\r\n`[cli][info] Available streams: 720p (worst, best)`\r\n`[cli][info] Opening stream: 720p (rtmp)`\r\n`[cli][error] No data returned from stream`\r\nFor stream\r\n`http://cybergame.tv/<channel>`\r\nInternet Download Manager  produces a link like\r\n`rtmp://cybergametv.cdnvideo.ru/cybergame//<channel>`\r\nVODs fine.\n", "before_files": [{"content": "import re\n\nfrom streamlink.compat import urlparse\nfrom streamlink.plugin import Plugin\nfrom streamlink.plugin.api import http, validate\nfrom streamlink.stream import RTMPStream\n\nPLAYLIST_URL = \"http://api.cybergame.tv/p/playlist.smil\"\n\n_url_re = re.compile(\"\"\"\n    http(s)?://(\\w+\\.)?cybergame.tv\n    (?:\n        /videos/(?P<video_id>\\d+)\n    )?\n    (?:\n        /(?P<channel>[^/&?]+)\n    )?\n\"\"\", re.VERBOSE)\n\n_playlist_schema = validate.Schema(\n    validate.union({\n        \"base\": validate.all(\n            validate.xml_find(\"./head/meta\"),\n            validate.get(\"base\"),\n            validate.url(scheme=\"rtmp\")\n        ),\n        \"videos\": validate.all(\n            validate.xml_findall(\".//video\"),\n            [\n                validate.union({\n                    \"src\": validate.all(\n                        validate.get(\"src\"),\n                        validate.text\n                    ),\n                    \"height\": validate.all(\n                        validate.get(\"height\"),\n                        validate.text,\n                        validate.transform(int)\n                    )\n                })\n            ]\n        )\n    })\n)\n\n\nclass Cybergame(Plugin):\n    @classmethod\n    def can_handle_url(self, url):\n        return _url_re.match(url)\n\n    def _get_playlist(self, **params):\n        res = http.get(PLAYLIST_URL, params=params)\n        playlist = http.xml(res, schema=_playlist_schema)\n        streams = {}\n        for video in playlist[\"videos\"]:\n            name = \"{0}p\".format(video[\"height\"])\n            stream = RTMPStream(self.session, {\n                \"rtmp\": \"{0}/{1}\".format(playlist[\"base\"], video[\"src\"]),\n                \"app\": urlparse(playlist[\"base\"]).path[1:],\n                \"pageUrl\": self.url,\n                \"rtmp\": playlist[\"base\"],\n                \"playpath\": video[\"src\"],\n                \"live\": True\n            })\n            streams[name] = stream\n\n        return streams\n\n    def _get_streams(self):\n        match = _url_re.match(self.url)\n        video_id = match.group(\"video_id\")\n        channel = match.group(\"channel\")\n\n        if video_id:\n            return self._get_playlist(vod=video_id)\n        elif channel:\n            return self._get_playlist(channel=channel)\n\n__plugin__ = Cybergame\n", "path": "src/streamlink/plugins/cybergame.py"}], "after_files": [{"content": "import re\n\nfrom streamlink.compat import urlparse\nfrom streamlink.plugin import Plugin\nfrom streamlink.plugin.api import http, validate\nfrom streamlink.stream import RTMPStream\n\nLIVE_STREAM_URL = \"rtmp://stream1.cybergame.tv:2936/live/\"\nPLAYLIST_URL = \"http://api.cybergame.tv/p/playlist.smil\"\n\n_url_re = re.compile(\"\"\"\n    http(s)?://(\\w+\\.)?cybergame.tv\n    (?:\n        /videos/(?P<video_id>\\d+)\n    )?\n    (?:\n        /(?P<channel>[^/&?]+)\n    )?\n\"\"\", re.VERBOSE)\n\n_playlist_schema = validate.Schema(\n    validate.union({\n        \"base\": validate.all(\n            validate.xml_find(\"./head/meta\"),\n            validate.get(\"base\"),\n            validate.url(scheme=\"rtmp\")\n        ),\n        \"videos\": validate.all(\n            validate.xml_findall(\".//video\"),\n            [\n                validate.union({\n                    \"src\": validate.all(\n                        validate.get(\"src\"),\n                        validate.text\n                    ),\n                    \"height\": validate.all(\n                        validate.get(\"height\"),\n                        validate.text,\n                        validate.transform(int)\n                    )\n                })\n            ]\n        )\n    })\n)\n\n\nclass Cybergame(Plugin):\n    @classmethod\n    def can_handle_url(cls, url):\n        return _url_re.match(url)\n\n    def _get_playlist(self, **params):\n        res = http.get(PLAYLIST_URL, params=params)\n        playlist = http.xml(res, schema=_playlist_schema)\n        streams = {}\n        for video in playlist[\"videos\"]:\n            name = \"{0}p\".format(video[\"height\"])\n            stream = RTMPStream(self.session, {\n                \"rtmp\": \"{0}/{1}\".format(playlist[\"base\"], video[\"src\"]),\n                \"app\": urlparse(playlist[\"base\"]).path[1:],\n                \"pageUrl\": self.url,\n                \"rtmp\": playlist[\"base\"],\n                \"playpath\": video[\"src\"],\n                \"live\": True\n            })\n            streams[name] = stream\n\n        return streams\n\n    def _get_streams(self):\n        match = _url_re.match(self.url)\n        video_id = match.group(\"video_id\")\n        channel = match.group(\"channel\")\n\n        if video_id:\n            return self._get_playlist(vod=video_id)\n        elif channel:\n            return {'live': RTMPStream(\n                self.session,\n                dict(rtmp=LIVE_STREAM_URL, app=\"live\", pageUrl=self.url, playpath=channel, live=True)\n            )}\n\n\n__plugin__ = Cybergame\n", "path": "src/streamlink/plugins/cybergame.py"}]}