head -c 5242880 bad.ts 1>badcp.ts
import random import re import json import urllib3 from streamlink.plugin import Plugin, pluginmatcher from streamlink.plugin.api import validate from streamlink.stream import HLSStream urllib3.disable_warnings() _url_re = re.compile(r"http(s)?://(www\.)?camsoda\.com/(?P<username>[^\"\']+)") _api_video_schema = validate.Schema( { "token": str, "edge_servers": [str], "stream_name": str } ) headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0", "Referer": "https://www.camsoda.com", "Host": "www.camsoda.com" } @pluginmatcher(_url_re) class Camsoda(Plugin): API_URL_VIDEO = "https://ww2.camsoda.com/api/v1/video/vtoken/{0}?username=guest_{1}" HLS_URL_VIDEO_EDGE = "https://{server}/{stream_name}_v1/index.m3u8?token={token}" HLS_URL_VIDEO = "https://{server}/mp4:{stream_name}_aac/playlist.m3u8?token={token}" def _get_api_video(self, username): url = self.API_URL_VIDEO.format(username, str(random.randint(1000, 99999))) response = self.session.http.get(url, headers=headers, verify=False, timeout=10) if response.status_code != 200: self.logger.error(f"Failed to get video API data, status code: {response.status_code}") return None try: data_video = response.json() if "status" in data_video and data_video["status"] == 0: self.logger.info(f"Nickname '{username}' is invalid") return None if "edge_servers" in data_video and not data_video["edge_servers"]: if "stream_name" in data_video: if not data_video["stream_name"]: self.logger.info(f"OFFLINE") else: self.logger.info(f"*****PRIVATE*****") return None validate.validate(_api_video_schema, data_video) except Exception as e: self.logger.error(f"Error parsing API response: {e}") return None return data_video def _get_streams(self): match = _url_re.match(self.url) username = match.group("username").replace("/", "") data_video = self._get_api_video(username) if not data_video: return hls_url = self.HLS_URL_VIDEO.format( server=data_video["edge_servers"][0], stream_name=data_video["stream_name"], token=data_video["token"] ) if "edge" in data_video["edge_servers"][0]: self.session.http.verify = False hls_url = self.HLS_URL_VIDEO_EDGE.format( server=data_video["edge_servers"][0], stream_name=data_video["stream_name"], token=data_video["token"] ) for s in HLSStream.parse_variant_playlist(self.session, hls_url).items(): yield s __plugin__ = Camsoda
import random import re import json import urllib3 from streamlink.plugin import Plugin, pluginmatcher from streamlink.plugin.api import validate from streamlink.stream import HLSStream urllib3.disable_warnings() _url_re = re.compile(r"http(s)?://(www\.)?camsoda\.com/(?P<username>[^\"\']+)") _api_video_schema = validate.Schema( { "token": str, "edge_servers": [str], "stream_name": str } ) headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0", "Referer": "https://www.camsoda.com", "Host": "www.camsoda.com" } proxies = { "http": "http://127.0.0.1:2080", "https": "http://127.0.0.1:2080" } @pluginmatcher(_url_re) class Camsoda(Plugin): API_URL_VIDEO = "https://ww2.camsoda.com/api/v1/video/vtoken/{0}?username=guest_{1}" HLS_URL_VIDEO_EDGE = "https://{server}/{stream_name}_v1/index.m3u8?token={token}" HLS_URL_VIDEO = "https://{server}/mp4:{stream_name}_aac/playlist.m3u8?token={token}" def _get_api_video(self, username): url = self.API_URL_VIDEO.format(username, str(random.randint(1000, 99999))) response = self.session.http.get(url, headers=headers, proxies=proxies, verify=False, timeout=10) if response.status_code != 200: self.logger.error(f"Failed to get video API data, status code: {response.status_code}") return None try: data_video = response.json() if "status" in data_video and data_video["status"] == 0: self.logger.info(f"Nickname '{username}' is invalid") return None if "edge_servers" in data_video and not data_video["edge_servers"]: if "stream_name" in data_video: if not data_video["stream_name"]: self.logger.info(f"OFFLINE") else: self.logger.info(f"*****PRIVATE*****") return None validate.validate(_api_video_schema, data_video) except Exception as e: self.logger.error(f"Error parsing API response: {e}") return None return data_video def _get_streams(self): match = _url_re.match(self.url) username = match.group("username").replace("/", "") data_video = self._get_api_video(username) if not data_video: return hls_url = self.HLS_URL_VIDEO.format( server=data_video["edge_servers"][0], stream_name=data_video["stream_name"], token=data_video["token"] ) if "edge" in data_video["edge_servers"][0]: self.session.http.verify = False hls_url = self.HLS_URL_VIDEO_EDGE.format( server=data_video["edge_servers"][0], stream_name=data_video["stream_name"], token=data_video["token"] ) for s in HLSStream.parse_variant_playlist(self.session, hls_url).items(): yield s __plugin__ = Camsoda
Вчера, 17:45
Вчера, 15:15
Вчера, 12:37
Вчера, 09:56
Вчера, 06:30
4 июня 2026 21:41
4 июня 2026 20:46
4 июня 2026 20:28
4 июня 2026 20:23
4 июня 2026 19:54
4 июня 2026 17:16
4 июня 2026 15:42
4 июня 2026 15:31
4 июня 2026 15:04
31 мая 2026 23:34
31 мая 2026 16:13
30 мая 2026 10:33
29 мая 2026 18:20
29 мая 2026 16:17
28 мая 2026 19:27
27 мая 2026 23:14
27 мая 2026 21:35
24 мая 2026 23:08
24 мая 2026 20:57
15 мая 2026 07:53
15 мая 2026 00:43
14 мая 2026 17:33
14 мая 2026 17:32
7 мая 2026 00:36
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