StreamingCommunity 2.5.2__py3-none-any.whl → 2.5.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of StreamingCommunity might be problematic. Click here for more details.
- StreamingCommunity/Api/Player/Helper/Vixcloud/js_parser.py +143 -143
- StreamingCommunity/Api/Player/Helper/Vixcloud/util.py +136 -136
- StreamingCommunity/Api/Player/ddl.py +89 -89
- StreamingCommunity/Api/Player/maxstream.py +151 -151
- StreamingCommunity/Api/Player/supervideo.py +193 -193
- StreamingCommunity/Api/Player/vixcloud.py +272 -272
- StreamingCommunity/Api/Site/1337xx/__init__.py +51 -50
- StreamingCommunity/Api/Site/1337xx/costant.py +14 -14
- StreamingCommunity/Api/Site/1337xx/site.py +87 -89
- StreamingCommunity/Api/Site/1337xx/title.py +63 -64
- StreamingCommunity/Api/Site/altadefinizionegratis/__init__.py +74 -50
- StreamingCommunity/Api/Site/altadefinizionegratis/costant.py +21 -19
- StreamingCommunity/Api/Site/altadefinizionegratis/film.py +81 -72
- StreamingCommunity/Api/Site/altadefinizionegratis/site.py +116 -94
- StreamingCommunity/Api/Site/animeunity/__init__.py +75 -50
- StreamingCommunity/Api/Site/animeunity/costant.py +21 -19
- StreamingCommunity/Api/Site/animeunity/film_serie.py +171 -134
- StreamingCommunity/Api/Site/animeunity/site.py +191 -174
- StreamingCommunity/Api/Site/animeunity/util/ScrapeSerie.py +97 -97
- StreamingCommunity/Api/Site/cb01new/__init__.py +51 -51
- StreamingCommunity/Api/Site/cb01new/costant.py +19 -19
- StreamingCommunity/Api/Site/cb01new/film.py +61 -71
- StreamingCommunity/Api/Site/cb01new/site.py +82 -82
- StreamingCommunity/Api/Site/ddlstreamitaly/__init__.py +55 -55
- StreamingCommunity/Api/Site/ddlstreamitaly/costant.py +20 -20
- StreamingCommunity/Api/Site/ddlstreamitaly/series.py +149 -145
- StreamingCommunity/Api/Site/ddlstreamitaly/site.py +98 -98
- StreamingCommunity/Api/Site/ddlstreamitaly/util/ScrapeSerie.py +84 -84
- StreamingCommunity/Api/Site/guardaserie/__init__.py +50 -50
- StreamingCommunity/Api/Site/guardaserie/costant.py +19 -19
- StreamingCommunity/Api/Site/guardaserie/series.py +199 -198
- StreamingCommunity/Api/Site/guardaserie/site.py +89 -89
- StreamingCommunity/Api/Site/guardaserie/util/ScrapeSerie.py +110 -110
- StreamingCommunity/Api/Site/ilcorsaronero/__init__.py +51 -51
- StreamingCommunity/Api/Site/ilcorsaronero/costant.py +18 -18
- StreamingCommunity/Api/Site/ilcorsaronero/site.py +71 -71
- StreamingCommunity/Api/Site/ilcorsaronero/title.py +44 -44
- StreamingCommunity/Api/Site/ilcorsaronero/util/ilCorsarScraper.py +149 -149
- StreamingCommunity/Api/Site/mostraguarda/__init__.py +48 -48
- StreamingCommunity/Api/Site/mostraguarda/costant.py +18 -18
- StreamingCommunity/Api/Site/mostraguarda/film.py +90 -101
- StreamingCommunity/Api/Site/streamingcommunity/__init__.py +79 -55
- StreamingCommunity/Api/Site/streamingcommunity/costant.py +21 -19
- StreamingCommunity/Api/Site/streamingcommunity/film.py +86 -75
- StreamingCommunity/Api/Site/streamingcommunity/series.py +259 -207
- StreamingCommunity/Api/Site/streamingcommunity/site.py +156 -142
- StreamingCommunity/Api/Site/streamingcommunity/util/ScrapeSerie.py +124 -124
- StreamingCommunity/Api/Template/Class/SearchType.py +101 -101
- StreamingCommunity/Api/Template/Util/__init__.py +4 -4
- StreamingCommunity/Api/Template/Util/get_domain.py +201 -201
- StreamingCommunity/Api/Template/Util/manage_ep.py +178 -178
- StreamingCommunity/Api/Template/Util/recall_search.py +37 -37
- StreamingCommunity/Api/Template/__init__.py +2 -2
- StreamingCommunity/Api/Template/site.py +87 -87
- StreamingCommunity/Lib/Downloader/HLS/downloader.py +529 -1008
- StreamingCommunity/Lib/Downloader/HLS/proxyes.py +110 -110
- StreamingCommunity/Lib/Downloader/HLS/segments.py +446 -573
- StreamingCommunity/Lib/Downloader/MP4/downloader.py +181 -155
- StreamingCommunity/Lib/Downloader/TOR/downloader.py +297 -295
- StreamingCommunity/Lib/Downloader/__init__.py +4 -4
- StreamingCommunity/Lib/FFmpeg/__init__.py +4 -4
- StreamingCommunity/Lib/FFmpeg/capture.py +170 -170
- StreamingCommunity/Lib/FFmpeg/command.py +264 -296
- StreamingCommunity/Lib/FFmpeg/util.py +248 -248
- StreamingCommunity/Lib/M3U8/__init__.py +5 -5
- StreamingCommunity/Lib/M3U8/decryptor.py +164 -164
- StreamingCommunity/Lib/M3U8/estimator.py +146 -228
- StreamingCommunity/Lib/M3U8/parser.py +666 -666
- StreamingCommunity/Lib/M3U8/url_fixer.py +57 -57
- StreamingCommunity/Lib/TMBD/__init__.py +1 -1
- StreamingCommunity/Lib/TMBD/obj_tmbd.py +39 -39
- StreamingCommunity/Lib/TMBD/tmdb.py +345 -345
- StreamingCommunity/TelegramHelp/__init__.py +0 -0
- StreamingCommunity/TelegramHelp/request_manager.py +82 -0
- StreamingCommunity/TelegramHelp/session.py +56 -0
- StreamingCommunity/TelegramHelp/telegram_bot.py +561 -0
- StreamingCommunity/Upload/update.py +75 -67
- StreamingCommunity/Upload/version.py +5 -5
- StreamingCommunity/Util/_jsonConfig.py +227 -228
- StreamingCommunity/Util/call_stack.py +42 -42
- StreamingCommunity/Util/color.py +20 -20
- StreamingCommunity/Util/console.py +12 -12
- StreamingCommunity/Util/ffmpeg_installer.py +342 -370
- StreamingCommunity/Util/headers.py +159 -159
- StreamingCommunity/Util/logger.py +61 -61
- StreamingCommunity/Util/message.py +36 -64
- StreamingCommunity/Util/os.py +500 -507
- StreamingCommunity/Util/table.py +271 -228
- StreamingCommunity/run.py +352 -245
- {StreamingCommunity-2.5.2.dist-info → StreamingCommunity-2.5.5.dist-info}/LICENSE +674 -674
- {StreamingCommunity-2.5.2.dist-info → StreamingCommunity-2.5.5.dist-info}/METADATA +601 -543
- StreamingCommunity-2.5.5.dist-info/RECORD +96 -0
- {StreamingCommunity-2.5.2.dist-info → StreamingCommunity-2.5.5.dist-info}/entry_points.txt +0 -1
- StreamingCommunity/Api/Player/Helper/Vixcloud/__pycache__/js_parser.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Player/Helper/Vixcloud/__pycache__/js_parser.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Player/Helper/Vixcloud/__pycache__/util.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Player/Helper/Vixcloud/__pycache__/util.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/ddl.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/ddl.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/maxstream.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/maxstream.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/supervideo.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/supervideo.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/vixcloud.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/vixcloud.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/title.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/title.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/film.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/film.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/film_serie.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/film_serie.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/util/__pycache__/ScrapeSerie.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/util/__pycache__/ScrapeSerie.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/film.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/film.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/series.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/series.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/util/__pycache__/ScrapeSerie.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/util/__pycache__/ScrapeSerie.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/series.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/series.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/util/__pycache__/ScrapeSerie.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/util/__pycache__/ScrapeSerie.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/title.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/title.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/util/__pycache__/ilCorsarScraper.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/util/__pycache__/ilCorsarScraper.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/mostraguarda/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/mostraguarda/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/mostraguarda/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/mostraguarda/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/mostraguarda/__pycache__/film.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/mostraguarda/__pycache__/film.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/film.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/film.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/series.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/series.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/util/__pycache__/ScrapeSerie.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/util/__pycache__/ScrapeSerie.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Template/Class/__pycache__/SearchType.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Template/Class/__pycache__/SearchType.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/get_domain.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/get_domain.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/manage_ep.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/manage_ep.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/recall_search.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/recall_search.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Template/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Template/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Template/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Template/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/Downloader/HLS/__pycache__/downloader.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/Downloader/HLS/__pycache__/downloader.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/Downloader/HLS/__pycache__/proxyes.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/Downloader/HLS/__pycache__/proxyes.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/Downloader/HLS/__pycache__/segments.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/Downloader/HLS/__pycache__/segments.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/Downloader/MP4/__pycache__/downloader.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/Downloader/MP4/__pycache__/downloader.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/Downloader/TOR/__pycache__/downloader.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/Downloader/TOR/__pycache__/downloader.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/Downloader/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/Downloader/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/capture.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/capture.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/command.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/command.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/util.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/util.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/decryptor.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/decryptor.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/estimator.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/estimator.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/parser.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/parser.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/url_fixer.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/url_fixer.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/TMBD/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/TMBD/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/TMBD/__pycache__/obj_tmbd.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/TMBD/__pycache__/obj_tmbd.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/TMBD/__pycache__/tmdb.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/TMBD/__pycache__/tmdb.cpython-39.pyc +0 -0
- StreamingCommunity/Upload/__pycache__/update.cpython-313.pyc +0 -0
- StreamingCommunity/Upload/__pycache__/update.cpython-39.pyc +0 -0
- StreamingCommunity/Upload/__pycache__/version.cpython-313.pyc +0 -0
- StreamingCommunity/Upload/__pycache__/version.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/_jsonConfig.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/_jsonConfig.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/call_stack.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/call_stack.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/color.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/color.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/console.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/console.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/ffmpeg_installer.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/ffmpeg_installer.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/headers.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/headers.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/logger.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/logger.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/message.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/message.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/os.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/os.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/table.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/table.cpython-39.pyc +0 -0
- StreamingCommunity/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/__pycache__/run.cpython-313.pyc +0 -0
- StreamingCommunity/__pycache__/run.cpython-39.pyc +0 -0
- StreamingCommunity-2.5.2.dist-info/RECORD +0 -264
- {StreamingCommunity-2.5.2.dist-info → StreamingCommunity-2.5.5.dist-info}/WHEEL +0 -0
- {StreamingCommunity-2.5.2.dist-info → StreamingCommunity-2.5.5.dist-info}/top_level.txt +0 -0
|
@@ -1,165 +1,165 @@
|
|
|
1
|
-
# 03.04.24
|
|
2
|
-
|
|
3
|
-
import sys
|
|
4
|
-
import time
|
|
5
|
-
import logging
|
|
6
|
-
import subprocess
|
|
7
|
-
import importlib.util
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
# Internal utilities
|
|
11
|
-
from StreamingCommunity.Util.console import console
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
# Check if Crypto module is installed
|
|
15
|
-
crypto_spec = importlib.util.find_spec("Cryptodome")
|
|
16
|
-
crypto_installed = crypto_spec is not None
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
if crypto_installed:
|
|
20
|
-
logging.info("[cyan]Decrypy use: Cryptodomex")
|
|
21
|
-
from Cryptodome.Cipher import AES
|
|
22
|
-
from Cryptodome.Util.Padding import unpad
|
|
23
|
-
|
|
24
|
-
class M3U8_Decryption:
|
|
25
|
-
"""
|
|
26
|
-
Class for decrypting M3U8 playlist content using AES encryption when the Crypto module is available.
|
|
27
|
-
"""
|
|
28
|
-
def __init__(self, key: bytes, iv: bytes, method: str) -> None:
|
|
29
|
-
"""
|
|
30
|
-
Initialize the M3U8_Decryption object.
|
|
31
|
-
|
|
32
|
-
Parameters:
|
|
33
|
-
- key (bytes): The encryption key.
|
|
34
|
-
- iv (bytes): The initialization vector (IV).
|
|
35
|
-
- method (str): The encryption method.
|
|
36
|
-
"""
|
|
37
|
-
self.key = key
|
|
38
|
-
self.iv = iv
|
|
39
|
-
if "0x" in str(iv):
|
|
40
|
-
self.iv = bytes.fromhex(iv.replace("0x", ""))
|
|
41
|
-
self.method = method
|
|
42
|
-
|
|
43
|
-
# Precreate cipher based on encryption method
|
|
44
|
-
if self.method == "AES":
|
|
45
|
-
self.cipher = AES.new(self.key, AES.MODE_ECB)
|
|
46
|
-
elif self.method == "AES-128":
|
|
47
|
-
self.cipher = AES.new(self.key[:16], AES.MODE_CBC, iv=self.iv)
|
|
48
|
-
elif self.method == "AES-128-CTR":
|
|
49
|
-
self.cipher = AES.new(self.key[:16], AES.MODE_CTR, nonce=self.iv)
|
|
50
|
-
else:
|
|
51
|
-
raise ValueError("Invalid or unsupported method")
|
|
52
|
-
|
|
53
|
-
def decrypt(self, ciphertext: bytes) -> bytes:
|
|
54
|
-
"""
|
|
55
|
-
Decrypt the ciphertext using the specified encryption method.
|
|
56
|
-
|
|
57
|
-
Parameters:
|
|
58
|
-
- ciphertext (bytes): The encrypted content to decrypt.
|
|
59
|
-
|
|
60
|
-
Returns:
|
|
61
|
-
bytes: The decrypted content.
|
|
62
|
-
"""
|
|
63
|
-
start = time.perf_counter_ns()
|
|
64
|
-
#logging.info(f"Ciphertext: {ciphertext}")
|
|
65
|
-
|
|
66
|
-
# Decrypt based on encryption method
|
|
67
|
-
if self.method in {"AES", "AES-128"}:
|
|
68
|
-
decrypted_data = self.cipher.decrypt(ciphertext)
|
|
69
|
-
decrypted_content = unpad(decrypted_data, AES.block_size)
|
|
70
|
-
|
|
71
|
-
elif self.method == "AES-128-CTR":
|
|
72
|
-
decrypted_content = self.cipher.decrypt(ciphertext)
|
|
73
|
-
else:
|
|
74
|
-
raise ValueError("Invalid or unsupported method")
|
|
75
|
-
|
|
76
|
-
end = time.perf_counter_ns()
|
|
77
|
-
|
|
78
|
-
# Calculate elapsed time with high precision
|
|
79
|
-
elapsed_nanoseconds = end - start
|
|
80
|
-
elapsed_milliseconds = elapsed_nanoseconds / 1_000_000
|
|
81
|
-
elapsed_seconds = elapsed_nanoseconds / 1_000_000_000
|
|
82
|
-
|
|
83
|
-
# Print performance metrics
|
|
84
|
-
logging.info(f"[Crypto Decryption Performance]")
|
|
85
|
-
logging.info(f"Method: {self.method}")
|
|
86
|
-
logging.info(f"Decryption Time: {elapsed_milliseconds:.4f} ms ({elapsed_seconds:.6f} s)")
|
|
87
|
-
logging.info(f"Decrypted Content Length: {len(decrypted_content)} bytes")
|
|
88
|
-
|
|
89
|
-
return decrypted_content
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
else:
|
|
93
|
-
|
|
94
|
-
# Check if openssl command is available
|
|
95
|
-
try:
|
|
96
|
-
openssl_available = subprocess.run(["openssl", "version"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL).returncode == 0
|
|
97
|
-
logging.info("[cyan]Decrypy use: OPENSSL")
|
|
98
|
-
except:
|
|
99
|
-
openssl_available = False
|
|
100
|
-
|
|
101
|
-
if not openssl_available:
|
|
102
|
-
console.log("[red]Neither python library: pycryptodomex nor openssl software is installed. Please install either one of them. Read readme.md [Requirement].")
|
|
103
|
-
sys.exit(0)
|
|
104
|
-
|
|
105
|
-
class M3U8_Decryption:
|
|
106
|
-
"""
|
|
107
|
-
Class for decrypting M3U8 playlist content using OpenSSL when the Crypto module is not available.
|
|
108
|
-
"""
|
|
109
|
-
def __init__(self, key: bytes, iv: bytes, method: str) -> None:
|
|
110
|
-
"""
|
|
111
|
-
Initialize the M3U8_Decryption object.
|
|
112
|
-
|
|
113
|
-
Parameters:
|
|
114
|
-
- key (bytes): The encryption key.
|
|
115
|
-
- iv (bytes): The initialization vector (IV).
|
|
116
|
-
- method (str): The encryption method.
|
|
117
|
-
"""
|
|
118
|
-
self.key = key
|
|
119
|
-
self.iv = iv
|
|
120
|
-
if "0x" in str(iv):
|
|
121
|
-
self.iv = bytes.fromhex(iv.replace("0x", ""))
|
|
122
|
-
self.method = method
|
|
123
|
-
logging.info(f"Decrypt add: ('key': {self.key}, 'iv': {self.iv}, 'method': {self.method})")
|
|
124
|
-
|
|
125
|
-
def decrypt(self, ciphertext: bytes) -> bytes:
|
|
126
|
-
"""
|
|
127
|
-
Decrypt the ciphertext using the specified encryption method.
|
|
128
|
-
|
|
129
|
-
Parameters:
|
|
130
|
-
- ciphertext (bytes): The encrypted content to decrypt.
|
|
131
|
-
|
|
132
|
-
Returns:
|
|
133
|
-
bytes: The decrypted content.
|
|
134
|
-
"""
|
|
135
|
-
start = time.perf_counter_ns()
|
|
136
|
-
|
|
137
|
-
# Construct OpenSSL command based on encryption method
|
|
138
|
-
if self.method == "AES":
|
|
139
|
-
openssl_cmd = f'openssl enc -d -aes-256-ecb -K {self.key.hex()} -nosalt'
|
|
140
|
-
elif self.method == "AES-128":
|
|
141
|
-
openssl_cmd = f'openssl enc -d -aes-128-cbc -K {self.key[:16].hex()} -iv {self.iv.hex()}'
|
|
142
|
-
elif self.method == "AES-128-CTR":
|
|
143
|
-
openssl_cmd = f'openssl enc -d -aes-128-ctr -K {self.key[:16].hex()} -iv {self.iv.hex()}'
|
|
144
|
-
else:
|
|
145
|
-
raise ValueError("Invalid or unsupported method")
|
|
146
|
-
|
|
147
|
-
try:
|
|
148
|
-
decrypted_content = subprocess.check_output(openssl_cmd.split(), input=ciphertext, stderr=subprocess.STDOUT)
|
|
149
|
-
except subprocess.CalledProcessError as e:
|
|
150
|
-
raise ValueError(f"Decryption failed: {e.output.decode()}")
|
|
151
|
-
|
|
152
|
-
end = time.perf_counter_ns()
|
|
153
|
-
|
|
154
|
-
# Calculate elapsed time with high precision
|
|
155
|
-
elapsed_nanoseconds = end - start
|
|
156
|
-
elapsed_milliseconds = elapsed_nanoseconds / 1_000_000
|
|
157
|
-
elapsed_seconds = elapsed_nanoseconds / 1_000_000_000
|
|
158
|
-
|
|
159
|
-
# Print performance metrics
|
|
160
|
-
logging.info(f"[OpenSSL Decryption Performance]")
|
|
161
|
-
logging.info(f"Method: {self.method}")
|
|
162
|
-
logging.info(f"Decryption Time: {elapsed_milliseconds:.4f} ms ({elapsed_seconds:.6f} s)")
|
|
163
|
-
logging.info(f"Decrypted Content Length: {len(decrypted_content)} bytes")
|
|
164
|
-
|
|
1
|
+
# 03.04.24
|
|
2
|
+
|
|
3
|
+
import sys
|
|
4
|
+
import time
|
|
5
|
+
import logging
|
|
6
|
+
import subprocess
|
|
7
|
+
import importlib.util
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
# Internal utilities
|
|
11
|
+
from StreamingCommunity.Util.console import console
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# Check if Crypto module is installed
|
|
15
|
+
crypto_spec = importlib.util.find_spec("Cryptodome")
|
|
16
|
+
crypto_installed = crypto_spec is not None
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
if crypto_installed:
|
|
20
|
+
logging.info("[cyan]Decrypy use: Cryptodomex")
|
|
21
|
+
from Cryptodome.Cipher import AES
|
|
22
|
+
from Cryptodome.Util.Padding import unpad
|
|
23
|
+
|
|
24
|
+
class M3U8_Decryption:
|
|
25
|
+
"""
|
|
26
|
+
Class for decrypting M3U8 playlist content using AES encryption when the Crypto module is available.
|
|
27
|
+
"""
|
|
28
|
+
def __init__(self, key: bytes, iv: bytes, method: str) -> None:
|
|
29
|
+
"""
|
|
30
|
+
Initialize the M3U8_Decryption object.
|
|
31
|
+
|
|
32
|
+
Parameters:
|
|
33
|
+
- key (bytes): The encryption key.
|
|
34
|
+
- iv (bytes): The initialization vector (IV).
|
|
35
|
+
- method (str): The encryption method.
|
|
36
|
+
"""
|
|
37
|
+
self.key = key
|
|
38
|
+
self.iv = iv
|
|
39
|
+
if "0x" in str(iv):
|
|
40
|
+
self.iv = bytes.fromhex(iv.replace("0x", ""))
|
|
41
|
+
self.method = method
|
|
42
|
+
|
|
43
|
+
# Precreate cipher based on encryption method
|
|
44
|
+
if self.method == "AES":
|
|
45
|
+
self.cipher = AES.new(self.key, AES.MODE_ECB)
|
|
46
|
+
elif self.method == "AES-128":
|
|
47
|
+
self.cipher = AES.new(self.key[:16], AES.MODE_CBC, iv=self.iv)
|
|
48
|
+
elif self.method == "AES-128-CTR":
|
|
49
|
+
self.cipher = AES.new(self.key[:16], AES.MODE_CTR, nonce=self.iv)
|
|
50
|
+
else:
|
|
51
|
+
raise ValueError("Invalid or unsupported method")
|
|
52
|
+
|
|
53
|
+
def decrypt(self, ciphertext: bytes) -> bytes:
|
|
54
|
+
"""
|
|
55
|
+
Decrypt the ciphertext using the specified encryption method.
|
|
56
|
+
|
|
57
|
+
Parameters:
|
|
58
|
+
- ciphertext (bytes): The encrypted content to decrypt.
|
|
59
|
+
|
|
60
|
+
Returns:
|
|
61
|
+
bytes: The decrypted content.
|
|
62
|
+
"""
|
|
63
|
+
start = time.perf_counter_ns()
|
|
64
|
+
#logging.info(f"Ciphertext: {ciphertext}")
|
|
65
|
+
|
|
66
|
+
# Decrypt based on encryption method
|
|
67
|
+
if self.method in {"AES", "AES-128"}:
|
|
68
|
+
decrypted_data = self.cipher.decrypt(ciphertext)
|
|
69
|
+
decrypted_content = unpad(decrypted_data, AES.block_size)
|
|
70
|
+
|
|
71
|
+
elif self.method == "AES-128-CTR":
|
|
72
|
+
decrypted_content = self.cipher.decrypt(ciphertext)
|
|
73
|
+
else:
|
|
74
|
+
raise ValueError("Invalid or unsupported method")
|
|
75
|
+
|
|
76
|
+
end = time.perf_counter_ns()
|
|
77
|
+
|
|
78
|
+
# Calculate elapsed time with high precision
|
|
79
|
+
elapsed_nanoseconds = end - start
|
|
80
|
+
elapsed_milliseconds = elapsed_nanoseconds / 1_000_000
|
|
81
|
+
elapsed_seconds = elapsed_nanoseconds / 1_000_000_000
|
|
82
|
+
|
|
83
|
+
# Print performance metrics
|
|
84
|
+
logging.info(f"[Crypto Decryption Performance]")
|
|
85
|
+
logging.info(f"Method: {self.method}")
|
|
86
|
+
logging.info(f"Decryption Time: {elapsed_milliseconds:.4f} ms ({elapsed_seconds:.6f} s)")
|
|
87
|
+
logging.info(f"Decrypted Content Length: {len(decrypted_content)} bytes")
|
|
88
|
+
|
|
89
|
+
return decrypted_content
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
else:
|
|
93
|
+
|
|
94
|
+
# Check if openssl command is available
|
|
95
|
+
try:
|
|
96
|
+
openssl_available = subprocess.run(["openssl", "version"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL).returncode == 0
|
|
97
|
+
logging.info("[cyan]Decrypy use: OPENSSL")
|
|
98
|
+
except:
|
|
99
|
+
openssl_available = False
|
|
100
|
+
|
|
101
|
+
if not openssl_available:
|
|
102
|
+
console.log("[red]Neither python library: pycryptodomex nor openssl software is installed. Please install either one of them. Read readme.md [Requirement].")
|
|
103
|
+
sys.exit(0)
|
|
104
|
+
|
|
105
|
+
class M3U8_Decryption:
|
|
106
|
+
"""
|
|
107
|
+
Class for decrypting M3U8 playlist content using OpenSSL when the Crypto module is not available.
|
|
108
|
+
"""
|
|
109
|
+
def __init__(self, key: bytes, iv: bytes, method: str) -> None:
|
|
110
|
+
"""
|
|
111
|
+
Initialize the M3U8_Decryption object.
|
|
112
|
+
|
|
113
|
+
Parameters:
|
|
114
|
+
- key (bytes): The encryption key.
|
|
115
|
+
- iv (bytes): The initialization vector (IV).
|
|
116
|
+
- method (str): The encryption method.
|
|
117
|
+
"""
|
|
118
|
+
self.key = key
|
|
119
|
+
self.iv = iv
|
|
120
|
+
if "0x" in str(iv):
|
|
121
|
+
self.iv = bytes.fromhex(iv.replace("0x", ""))
|
|
122
|
+
self.method = method
|
|
123
|
+
logging.info(f"Decrypt add: ('key': {self.key}, 'iv': {self.iv}, 'method': {self.method})")
|
|
124
|
+
|
|
125
|
+
def decrypt(self, ciphertext: bytes) -> bytes:
|
|
126
|
+
"""
|
|
127
|
+
Decrypt the ciphertext using the specified encryption method.
|
|
128
|
+
|
|
129
|
+
Parameters:
|
|
130
|
+
- ciphertext (bytes): The encrypted content to decrypt.
|
|
131
|
+
|
|
132
|
+
Returns:
|
|
133
|
+
bytes: The decrypted content.
|
|
134
|
+
"""
|
|
135
|
+
start = time.perf_counter_ns()
|
|
136
|
+
|
|
137
|
+
# Construct OpenSSL command based on encryption method
|
|
138
|
+
if self.method == "AES":
|
|
139
|
+
openssl_cmd = f'openssl enc -d -aes-256-ecb -K {self.key.hex()} -nosalt'
|
|
140
|
+
elif self.method == "AES-128":
|
|
141
|
+
openssl_cmd = f'openssl enc -d -aes-128-cbc -K {self.key[:16].hex()} -iv {self.iv.hex()}'
|
|
142
|
+
elif self.method == "AES-128-CTR":
|
|
143
|
+
openssl_cmd = f'openssl enc -d -aes-128-ctr -K {self.key[:16].hex()} -iv {self.iv.hex()}'
|
|
144
|
+
else:
|
|
145
|
+
raise ValueError("Invalid or unsupported method")
|
|
146
|
+
|
|
147
|
+
try:
|
|
148
|
+
decrypted_content = subprocess.check_output(openssl_cmd.split(), input=ciphertext, stderr=subprocess.STDOUT)
|
|
149
|
+
except subprocess.CalledProcessError as e:
|
|
150
|
+
raise ValueError(f"Decryption failed: {e.output.decode()}")
|
|
151
|
+
|
|
152
|
+
end = time.perf_counter_ns()
|
|
153
|
+
|
|
154
|
+
# Calculate elapsed time with high precision
|
|
155
|
+
elapsed_nanoseconds = end - start
|
|
156
|
+
elapsed_milliseconds = elapsed_nanoseconds / 1_000_000
|
|
157
|
+
elapsed_seconds = elapsed_nanoseconds / 1_000_000_000
|
|
158
|
+
|
|
159
|
+
# Print performance metrics
|
|
160
|
+
logging.info(f"[OpenSSL Decryption Performance]")
|
|
161
|
+
logging.info(f"Method: {self.method}")
|
|
162
|
+
logging.info(f"Decryption Time: {elapsed_milliseconds:.4f} ms ({elapsed_seconds:.6f} s)")
|
|
163
|
+
logging.info(f"Decrypted Content Length: {len(decrypted_content)} bytes")
|
|
164
|
+
|
|
165
165
|
return decrypted_content
|