Download streamlit_app.py from Reooiq/Pro4: direct link, hf CLI and curl.
- Browser
- Download file 4.99 kB
-
https://huggingface.co/spaces/Reooiq/Pro4/resolve/main/streamlit_app.py
- Command line
-
hf download hf://spaces/Reooiq/Pro4/streamlit_app.py
-
curl -L -o streamlit_app.py https://huggingface.co/spaces/Reooiq/Pro4/resolve/main/streamlit_app.py
4.99 kB
| import streamlit as st | |
| import asyncio | |
| import subprocess | |
| import threading | |
| import time | |
| from datetime import datetime | |
| from TikTokLive import TikTokLiveClient | |
| # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| # โ๏ธ ุงูุฅุนุฏุงุฏุงุช | |
| # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| BROADCASTERS = [ | |
| { | |
| "tiktok": "@dharialshammarii0", | |
| "stream_key": "p0ep-37wz-q3yg-7twf-3acb", | |
| }, | |
| # ุฃุถู ุงูู ุฒูุฏ ุจููุณ ุงูุชูุณูู | |
| ] | |
| YT_RTMP_BASE = "rtmp://a.rtmp.youtube.com/live2/" | |
| POLL_INTERVAL = 60 # ุซุงููุฉ ุจูู ูู ูุญุต | |
| # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| # ๐ ุฏูุงู ุงูุจุซ ุงูุฌุฏูุฏุฉ (ุจุฏูู streamlink) | |
| # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| def stream_broadcaster(tiktok_username, stream_key): | |
| """ | |
| ุชุณุชุฎุฏู yt-dlp ูุงุณุชุฎุฑุงุฌ ุงูุจุซุ ูุชู ุฑูุฑู ุฅูู ffmpeg ูููุณุฎ ุงูู ุจุงุดุฑ ุฅูู ููุชููุจ. | |
| """ | |
| # ุฑุงุจุท ููุงุฉ TikTok | |
| url = f"https://www.tiktok.com/{tiktok_username}/live" | |
| # ุฃู ุฑ yt-dlp: ุงุณุชุฎุฑุงุฌ ุฃูุถู ุฌูุฏุฉ ูุฅุฎุฑุงุฌูุง ุฅูู stdout | |
| yt_dlp_cmd = f'yt-dlp -f best -o - "{url}"' | |
| # ุฃู ุฑ ffmpeg: ุงุณุชูุจุงู ุงูุฏูู ู ู stdin ููุณุฎู ู ุจุงุดุฑุฉ ูู RTMP | |
| ffmpeg_cmd = ( | |
| f"ffmpeg -hide_banner -loglevel error " | |
| f"-re -i pipe:0 " | |
| f"-c:v copy -c:a copy " | |
| f"-f flv {YT_RTMP_BASE}{stream_key}" | |
| ) | |
| # ุฏู ุฌ ุงูุฃู ุฑูู ูู ุณุทุฑ ูุงุญุฏ | |
| full_cmd = f"{yt_dlp_cmd} | {ffmpeg_cmd}" | |
| print(f"๐ด ุจุฏุก ุจุซ {tiktok_username} ุนุจุฑ yt-dlp...") | |
| try: | |
| proc = subprocess.Popen(full_cmd, shell=True) | |
| proc.wait() | |
| print(f"โน๏ธ ุงูุชูู ุจุซ {tiktok_username}") | |
| except Exception as e: | |
| print(f"โ ุฎุทุฃ ุฃุซูุงุก ุจุซ {tiktok_username}: {e}") | |
| def monitor_and_stream(): | |
| """ุงูู ุฑุงูุจุฉ ุงูู ุณุชู ุฑุฉ ูุชุดุบูู ุงูุจุซ ุนูุฏ ุงูุญุงุฌุฉ""" | |
| active_threads = {} | |
| while True: | |
| for broadcaster in BROADCASTERS: | |
| tiktok = broadcaster["tiktok"] | |
| key = broadcaster["stream_key"] | |
| try: | |
| client = TikTokLiveClient(unique_id=tiktok) | |
| is_live = asyncio.run(client.is_live()) | |
| except Exception as e: | |
| print(f"โ ๏ธ ุชุนุฐุฑ ูุญุต {tiktok}: {e}") | |
| continue | |
| if is_live and tiktok not in active_threads: | |
| t = threading.Thread( | |
| target=stream_broadcaster, | |
| args=(tiktok, key), | |
| daemon=True, | |
| ) | |
| t.start() | |
| active_threads[tiktok] = t | |
| elif not is_live and tiktok in active_threads: | |
| del active_threads[tiktok] | |
| time.sleep(POLL_INTERVAL) | |
| # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| # ๐ฌ ุจุฏุก ุงูู ุฑุงูุจุฉ ูู ุงูุฎูููุฉ | |
| # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| if "monitor_started" not in st.session_state: | |
| monitor_thread = threading.Thread( | |
| target=monitor_and_stream, | |
| name="TikTokMonitor", | |
| daemon=True, | |
| ) | |
| monitor_thread.start() | |
| st.session_state.monitor_started = True | |
| # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| # ๐จ ูุงุฌูุฉ ุงูู ุณุชุฎุฏู | |
| # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| st.set_page_config(page_title="TikTok 2 YouTube", page_icon="๐ด") | |
| st.title("๐ด ูุธุงู ุงูุจุซ ุงูุชููุงุฆู (ุงูุญู ุงูููุงุฆู)") | |
| st.markdown("### ุงูุญุณุงุจุงุช ุงูู ุฑุงูุจุฉ:") | |
| for b in BROADCASTERS: | |
| st.write(f"- {b['tiktok']}") | |
| st.success("ุงููุธุงู ูุนู ู ูู ุงูุฎูููุฉ. ูู ููู ุฅุบูุงู ุงูุตูุญุฉ.") | |
| st.caption(f"ุขุฎุฑ ุชุญุฏูุซ: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") |