Alide21 commited on
Commit
5ccc9df
·
verified ·
1 Parent(s): f3d400d

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +50 -39
main.py CHANGED
@@ -7,68 +7,79 @@ import threading
7
  import sys
8
 
9
  # ==========================================
10
- # إعدادات التحكم - غيّرها من هنا
11
  # ==========================================
12
- SHOW_MONITOR = True # اجعله False لتوفير موارد السيرفر وإخفاء العداد من الـ Logs
 
13
  RAMADAN_DATE = datetime(2026, 3, 20, 0, 0, 0)
14
- STREAM_URL = "rtmp://a.rtmp.youtube.com/live2/"
15
  STREAM_KEY = os.environ.get("STREAM_KEY")
 
16
  # ==========================================
17
 
18
  app = Flask(__name__)
19
- @app.route('/')
20
- def health_check():
21
- return "Stream is Running!", 200
22
 
23
- def run_flask():
24
- app.run(host='0.0.0.0', port=7860)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
 
26
  def print_console_countdown():
27
- """وظيفة مراقبة العداد في الـ Logs"""
28
- while SHOW_MONITOR:
29
- now = datetime.now()
30
- remaining = RAMADAN_DATE - now
31
- if remaining.total_seconds() > 0:
32
- days = remaining.days
33
- hours, rem = divmod(remaining.seconds, 3600)
34
- minutes, seconds = divmod(rem, 60)
35
- # استخدام \r لتحديث نفس السطر في الـ Logs
36
- output = f"\r[Monitor] Remaining: {days}d {hours:02}:{minutes:02}:{seconds:02}"
37
- sys.stdout.write(output)
38
- sys.stdout.flush()
39
  time.sleep(1)
40
 
41
  def start_stream():
42
  if not STREAM_KEY:
43
- print("\n[!] Error: STREAM_KEY is missing in Settings > Secrets")
44
  return
45
-
46
- # تم تحسين السطر ليكون أخف على المعالج (veryfast & zero-latency)
47
  ffmpeg_cmd = [
48
- 'ffmpeg',
49
- '-re', '-f', 'lavfi', '-i', 'color=c=black:s=1280x720:r=30',
50
  '-vf', f"drawtext=text='Ramadan 2026 Countdown':x=(w-text_w)/2:y=(h-text_h)/2-60:fontsize=70:fontcolor=white, "
51
  f"drawtext=text='%{{pts\\:localtime\\:{RAMADAN_DATE.timestamp()}\\:%d Days %H\\:%M\\:%S}}':x=(w-text_w)/2:y=(h-text_h)/2+60:fontsize=90:fontcolor=yellow",
52
- '-vcodec', 'libx264', '-preset', 'veryfast', '-tune', 'zerolatency',
53
- '-b:v', '1500k', '-f', 'flv', f"{STREAM_URL}{STREAM_KEY}"
54
  ]
55
-
56
- # إرسال مخرجات FFmpeg إلى الـ NULL ليبقى الـ Logs نظيفاً للعداد الخاص بنا
57
  subprocess.run(ffmpeg_cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
58
 
59
  if __name__ == "__main__":
60
- # تشغيل السيرفر لضمان بقاء الـ Space مستيقظاً
61
- threading.Thread(target=run_flask, daemon=True).start()
62
-
63
- # تشغيل العداد فقط إذا كان المفتاح True
64
- if SHOW_MONITOR:
65
  threading.Thread(target=print_console_countdown, daemon=True).start()
66
 
67
- print(f"\n--- System Active | Show Monitor: {SHOW_MONITOR} ---")
68
-
69
  while True:
70
  try:
71
  start_stream()
72
- except Exception as e:
73
- print(f"\nStream error: {e}")
74
- time.sleep(15)
 
7
  import sys
8
 
9
  # ==========================================
10
+ # إعدادات التحكم
11
  # ==========================================
12
+ SHOW_IN_APP = True # اجعله True لعرض العداد في صفحة الـ App البيضاء
13
+ SHOW_IN_LOGS = True # اجعله True لعرض العداد في شاشة الـ Logs السوداء
14
  RAMADAN_DATE = datetime(2026, 3, 20, 0, 0, 0)
 
15
  STREAM_KEY = os.environ.get("STREAM_KEY")
16
+ STREAM_URL = "rtmp://a.rtmp.youtube.com/live2/"
17
  # ==========================================
18
 
19
  app = Flask(__name__)
 
 
 
20
 
21
+ # دالة لحساب الوقت المتبقي وتنسيقه
22
+ def get_time_left():
23
+ remaining = RAMADAN_DATE - datetime.now()
24
+ if remaining.total_seconds() > 0:
25
+ days = remaining.days
26
+ hours, rem = divmod(remaining.seconds, 3600)
27
+ minutes, seconds = divmod(rem, 60)
28
+ return f"{days} يوم و {hours:02}:{minutes:02}:{seconds:02}"
29
+ return "بدأ شهر رمضان! مبارك عليكم"
30
+
31
+ @app.route('/')
32
+ def home():
33
+ if SHOW_IN_APP:
34
+ time_left = get_time_left()
35
+ # كود HTML بسيط لتحديث الصفحة كل ثانية وعرض العداد بشكل جميل
36
+ return f"""
37
+ <html>
38
+ <head>
39
+ <meta http-equiv="refresh" content="1">
40
+ <style>
41
+ body {{ font-family: sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; background: #1a1a1a; color: white; }}
42
+ .container {{ text-align: center; border: 2px solid yellow; padding: 40px; border-radius: 20px; }}
43
+ h1 {{ color: yellow; font-size: 3em; }}
44
+ p {{ font-size: 1.5em; }}
45
+ </style>
46
+ </head>
47
+ <body>
48
+ <div class="container">
49
+ <h1>عداد رمضان 2026</h1>
50
+ <p>الوقت المتبقي للبث المباشر:</p>
51
+ <div style="font-size: 2.5em; font-weight: bold;">{time_left}</div>
52
+ </div>
53
+ </body>
54
+ </html>
55
+ """
56
+ else:
57
+ return "Stream is Running! (Dashboard Disabled)", 200
58
 
59
  def print_console_countdown():
60
+ while SHOW_IN_LOGS:
61
+ sys.stdout.write(f"\r[Monitor] {get_time_left()}")
62
+ sys.stdout.flush()
 
 
 
 
 
 
 
 
 
63
  time.sleep(1)
64
 
65
  def start_stream():
66
  if not STREAM_KEY:
 
67
  return
 
 
68
  ffmpeg_cmd = [
69
+ 'ffmpeg', '-re', '-f', 'lavfi', '-i', 'color=c=black:s=1280x720:r=30',
 
70
  '-vf', f"drawtext=text='Ramadan 2026 Countdown':x=(w-text_w)/2:y=(h-text_h)/2-60:fontsize=70:fontcolor=white, "
71
  f"drawtext=text='%{{pts\\:localtime\\:{RAMADAN_DATE.timestamp()}\\:%d Days %H\\:%M\\:%S}}':x=(w-text_w)/2:y=(h-text_h)/2+60:fontsize=90:fontcolor=yellow",
72
+ '-vcodec', 'libx264', '-preset', 'veryfast', '-b:v', '1500k', '-f', 'flv', f"{STREAM_URL}{STREAM_KEY}"
 
73
  ]
 
 
74
  subprocess.run(ffmpeg_cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
75
 
76
  if __name__ == "__main__":
77
+ threading.Thread(target=lambda: app.run(host='0.0.0.0', port=7860), daemon=True).start()
78
+ if SHOW_IN_LOGS:
 
 
 
79
  threading.Thread(target=print_console_countdown, daemon=True).start()
80
 
 
 
81
  while True:
82
  try:
83
  start_stream()
84
+ except:
85
+ time.sleep(10)