Spaces:
Sleeping
Sleeping
Update main.py
Browse files
main.py
CHANGED
|
@@ -4,6 +4,7 @@ import subprocess
|
|
| 4 |
from datetime import datetime
|
| 5 |
from flask import Flask
|
| 6 |
import threading
|
|
|
|
| 7 |
|
| 8 |
# 1. إعداد سيرفر ويب وهمي لمنع وضع النوم
|
| 9 |
app = Flask(__name__)
|
|
@@ -16,21 +17,38 @@ def run_flask():
|
|
| 16 |
|
| 17 |
# 2. إعدادات البث (يوتيوب)
|
| 18 |
STREAM_URL = "rtmp://a.rtmp.youtube.com/live2/"
|
| 19 |
-
import os
|
| 20 |
-
|
| 21 |
-
# قراءة مفتاح البث من الـ Secrets بأمان
|
| 22 |
STREAM_KEY = os.environ.get("STREAM_KEY")
|
| 23 |
|
| 24 |
-
# تأكد من أن المفتاح موجود لتجنب الأخطاء
|
| 25 |
-
if not STREAM_KEY:
|
| 26 |
-
print("Error: STREAM_KEY not found in Secrets!")
|
| 27 |
-
|
| 28 |
# موعد رمضان المتوقع (20 مارس 2026)
|
| 29 |
RAMADAN_DATE = datetime(2026, 3, 20, 0, 0, 0)
|
| 30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
def start_stream():
|
| 32 |
-
|
| 33 |
-
|
|
|
|
|
|
|
|
|
|
| 34 |
ffmpeg_cmd = [
|
| 35 |
'ffmpeg',
|
| 36 |
'-re', '-f', 'lavfi', '-i', 'color=c=black:s=1280x720:r=30',
|
|
@@ -41,16 +59,22 @@ def start_stream():
|
|
| 41 |
f"{STREAM_URL}{STREAM_KEY}"
|
| 42 |
]
|
| 43 |
|
| 44 |
-
|
|
|
|
| 45 |
|
| 46 |
if __name__ == "__main__":
|
| 47 |
-
# تشغيل سيرفر الويب
|
| 48 |
threading.Thread(target=run_flask, daemon=True).start()
|
| 49 |
|
| 50 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 51 |
while True:
|
| 52 |
try:
|
| 53 |
start_stream()
|
| 54 |
except Exception as e:
|
| 55 |
-
print(f"Error: {e}")
|
| 56 |
time.sleep(10)
|
|
|
|
| 4 |
from datetime import datetime
|
| 5 |
from flask import Flask
|
| 6 |
import threading
|
| 7 |
+
import sys
|
| 8 |
|
| 9 |
# 1. إعداد سيرفر ويب وهمي لمنع وضع النوم
|
| 10 |
app = Flask(__name__)
|
|
|
|
| 17 |
|
| 18 |
# 2. إعدادات البث (يوتيوب)
|
| 19 |
STREAM_URL = "rtmp://a.rtmp.youtube.com/live2/"
|
|
|
|
|
|
|
|
|
|
| 20 |
STREAM_KEY = os.environ.get("STREAM_KEY")
|
| 21 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
# موعد رمضان المتوقع (20 مارس 2026)
|
| 23 |
RAMADAN_DATE = datetime(2026, 3, 20, 0, 0, 0)
|
| 24 |
|
| 25 |
+
# --- وظيفة عداد الشاشة ---
|
| 26 |
+
def print_console_countdown():
|
| 27 |
+
while True:
|
| 28 |
+
now = datetime.now()
|
| 29 |
+
remaining = RAMADAN_DATE - now
|
| 30 |
+
|
| 31 |
+
if remaining.total_seconds() > 0:
|
| 32 |
+
# حساب الأيام، الساعات، الدقائق، والثواني
|
| 33 |
+
days = remaining.days
|
| 34 |
+
hours, rem = divmod(remaining.seconds, 3600)
|
| 35 |
+
minutes, seconds = divmod(rem, 60)
|
| 36 |
+
|
| 37 |
+
# طباعة العداد في سطر واحد يتحدث باستمرار (\r تعيد المؤشر لأول السطر)
|
| 38 |
+
sys.stdout.write(f"\r[Live Monitor] Remaining: {days} Days {hours:02}:{minutes:02}:{seconds:02} | Press Ctrl+C to stop")
|
| 39 |
+
sys.stdout.flush()
|
| 40 |
+
else:
|
| 41 |
+
sys.stdout.write("\r[!!!] RAMADAN HAS STARTED! Mubarak! ")
|
| 42 |
+
sys.stdout.flush()
|
| 43 |
+
|
| 44 |
+
time.sleep(1)
|
| 45 |
+
|
| 46 |
def start_stream():
|
| 47 |
+
if not STREAM_KEY:
|
| 48 |
+
print("\nError: STREAM_KEY not found in Secrets!")
|
| 49 |
+
return
|
| 50 |
+
|
| 51 |
+
# فلتر FFmpeg ذكي يحسب الوقت للبث
|
| 52 |
ffmpeg_cmd = [
|
| 53 |
'ffmpeg',
|
| 54 |
'-re', '-f', 'lavfi', '-i', 'color=c=black:s=1280x720:r=30',
|
|
|
|
| 59 |
f"{STREAM_URL}{STREAM_KEY}"
|
| 60 |
]
|
| 61 |
|
| 62 |
+
# تشغيل البث وإخفاء رسائل FFmpeg المزعجة لنرى العداد بوضوح
|
| 63 |
+
subprocess.run(ffmpeg_cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
| 64 |
|
| 65 |
if __name__ == "__main__":
|
| 66 |
+
# 1. تشغيل سيرفر الويب (للمنصة)
|
| 67 |
threading.Thread(target=run_flask, daemon=True).start()
|
| 68 |
|
| 69 |
+
# 2. تشغيل عداد الشاشة (للمراقبة)
|
| 70 |
+
threading.Thread(target=print_console_countdown, daemon=True).start()
|
| 71 |
+
|
| 72 |
+
print("--- Ramadan Stream System Started ---")
|
| 73 |
+
print(f"Target Date: {RAMADAN_DATE}")
|
| 74 |
+
|
| 75 |
while True:
|
| 76 |
try:
|
| 77 |
start_stream()
|
| 78 |
except Exception as e:
|
| 79 |
+
print(f"\nStream Error: {e}")
|
| 80 |
time.sleep(10)
|