import ssl import logging import random import re from websocket import create_connection from streamlink.plugin import Plugin from streamlink.plugin.api import validate, utils from streamlink.stream import RTMPStream SWF_URL = 'http://showup.tv/flash/suStreamer.swf' RANDOM_UID = '%032x' % random.getrandbits(128) JSON_UID = u'{"id":0,"value":["%s",""]}' JSON_CHANNEL = u'{"id":2,"value":["%s"]}' _url_re = re.compile(r'https?://(\w+.)?showup\.tv/(?P<channel>[A-Za-z0-9_-]+)') _websocket_url_re = re.compile(r'''socket\.connect\(["'](?P<ws>[^"']+)["']\)''') _schema = validate.Schema(validate.get('value')) log = logging.getLogger(__name__) class ShowUp(Plugin): @classmethod def can_handle_url(cls, url): return _url_re.match(url) def _get_stream_id(self, channel, ws_url): ws = create_connection(ws_url, sslopt={"cert_reqs": ssl.CERT_NONE}) ws.send(JSON_UID % RANDOM_UID) ws.send(JSON_CHANNEL % channel) # STREAM_ID result = ws.recv() data = utils.parse_json(result, schema=_schema) log.debug('DATA 1 {0}'.format(data)) if 'failure' in data: ws.close() return False, False # RTMP CDN result_2 = ws.recv() data2 = utils.parse_json(result_2, schema=_schema) log.debug('DATA 2 {0}'.format(data2)) if 'failure' in data2: ws.close() return False, False # ERROR result_3 = ws.recv() data3 = utils.parse_json(result_3, schema=_schema) log.debug('DATA 3 {0}'.format(data3)) if 'failure' in data3: ws.close() return False, False return data[0], data2[1] def _get_websocket(self, html): ws_url = _websocket_url_re.search(html) if ws_url: ws_host = ws_url.group('ws') if ':' in ws_host: ws_host, ws_port = ws_host.split(':') return 'wss://%s' % ws_host def _get_streams(self): log.debug('Version 2018-08-19') log.info('This is a custom plugin.') url_match = _url_re.match(self.url) channel = url_match.group('channel') log.debug('Channel name: {0}'.format(channel)) self.session.http.parse_headers('Referer: %s' % self.url) self.session.http.parse_cookies('accept_rules=true') page = self.session.http.get(self.url) ws_url = self._get_websocket(page.text) log.debug('WebSocket: {0}'.format(ws_url)) stream_id, rtmp_cdn = self._get_stream_id(channel, ws_url) if not (stream_id or rtmp_cdn): log.error('Channel is not available.') return log.debug('Stream ID: {0}'.format(stream_id)) log.debug('RTMP CDN: {0}'.format(rtmp_cdn)) stream = RTMPStream(self.session, { 'rtmp': 'rtmp://{0}:1935/webrtc'.format(rtmp_cdn), 'pageUrl': self.url, 'playpath': '{0}_aac'.format(stream_id), 'swfVfy': SWF_URL, 'live': True }) return {'live': stream} __plugin__ = ShowUp
c:\temp λ streamlink -l debug https://showup.tv/DajMiUsmiech best [cli][debug] OS: Windows 8.1 [cli][debug] Python: 3.6.3 [cli][debug] Streamlink: 0.14.2 [cli][debug] Requests(2.18.4), Socks(1.6.7), Websocket(0.44.0) [cli][info] Found matching plugin showup for URL https://showup.tv/DajMiUsmiech [plugin.showup][debug] Version 2018-08-19 [plugin.showup][info] This is a custom plugin. [plugin.showup][debug] Channel name: DajMiUsmiech [plugin.showup][debug] WebSocket: wss://j02.showup.tv [plugin.showup][debug] DATA 1 ['b95d43342d738ccf6d0dd399b6ed48c3'] [plugin.showup][debug] DATA 2 ['joined', 'cdn-t02.showup.tv'] [plugin.showup][debug] DATA 3 ['Afro boli brzuszek :DAJ CALUSKA W PEPUSZEK ^^ '] [plugin.showup][debug] Stream ID: b95d43342d738ccf6d0dd399b6ed48c3 [plugin.showup][debug] RTMP CDN: cdn-t02.showup.tv [cli][info] Available streams: live (worst, best) [cli][info] Opening stream: live (rtmp) [stream.streamprocess][debug] Spawning command: C:\tools\rtmpdump.exe --flv - --live --pageUrl https://showup.tv/DajMiUsmiech --playpath b95d43342d738ccf6d0dd399b6ed48c3_aac --rtmp rtmp://cdn-t02.showup.tv:1935/webrtc --swfVfy http://showup.tv/flash/suStreamer.swf [cli][debug] Pre-buffering 8192 bytes [cli][info] Starting player: "C:\Program Files\VideoLAN\VLC\vlc.exe" [cli][debug] Writing stream to output [cli][info] Player closed [cli][info] Stream ended [cli][info] Closing currently open stream...
ws.connect(ws_url, sslopt={"cert_reqs": ssl.CERT_NONE})
Вчера, 20:18
Вчера, 19:20
Вчера, 15:38
Вчера, 15:37
Вчера, 15:36
Вчера, 15:14
1 мая 2026 22:54
30 апреля 2026 15:23
30 апреля 2026 10:16
29 апреля 2026 22:14
29 апреля 2026 15:27
28 апреля 2026 21:47
21 апреля 2026 00:16
13 апреля 2026 00:13
12 апреля 2026 23:28
11 апреля 2026 23:09
4 апреля 2026 16:11
4 апреля 2026 10:24
25 марта 2026 11:17
25 марта 2026 10:46
24 марта 2026 18:14
5 марта 2026 04:50
25 февраля 2026 18:39
19 февраля 2026 20:48
16 февраля 2026 15:27
14 февраля 2026 16:33
5 февраля 2026 01:07
3 февраля 2026 18:18
20 января 2026 21:11
20 января 2026 16:37
20 января 2026 10:47
19 января 2026 00:38
15 января 2026 22:17
15 января 2026 18:49
14 января 2026 02:49
12 января 2026 23:18
4 января 2026 09:47
3 января 2026 14:32
30 декабря 2025 03:05
26 декабря 2025 21:29
22 декабря 2025 21:38
13 декабря 2025 14:51