Spaces:
Paused
Paused
Update streamlit_app.py
Browse files- streamlit_app.py +18 -13
streamlit_app.py
CHANGED
|
@@ -61,10 +61,10 @@ def get_tiktok_stream_url():
|
|
| 61 |
pass
|
| 62 |
return None
|
| 63 |
|
| 64 |
-
def
|
| 65 |
if not stream_key or not stream_url:
|
| 66 |
return None
|
| 67 |
-
log("🎬 بدء البث
|
| 68 |
rtmp_url = f"rtmp://a.rtmp.youtube.com/live2/{stream_key}"
|
| 69 |
|
| 70 |
cmd = [
|
|
@@ -99,13 +99,18 @@ def start_stream_stable(stream_key, stream_url):
|
|
| 99 |
"-correct_ts_overflow", "1",
|
| 100 |
"-max_interleave_delta", "0",
|
| 101 |
|
| 102 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 103 |
"-c:v", "libx264",
|
| 104 |
"-preset", "ultrafast",
|
| 105 |
-
"-crf", "
|
| 106 |
-
"-maxrate", "
|
| 107 |
-
"-minrate", "
|
| 108 |
-
"-bufsize", "
|
| 109 |
"-g", "60",
|
| 110 |
"-vsync", "2",
|
| 111 |
"-x264-params", "nal-hrd=cbr",
|
|
@@ -115,12 +120,12 @@ def start_stream_stable(stream_key, stream_url):
|
|
| 115 |
"-color_trc", "bt709",
|
| 116 |
"-colorspace", "bt709",
|
| 117 |
|
| 118 |
-
# صوت – بسيط
|
| 119 |
"-c:a", "aac",
|
| 120 |
"-b:a", "192k",
|
| 121 |
"-ac", "2",
|
| 122 |
"-ar", "44100",
|
| 123 |
-
"-async", "1",
|
| 124 |
|
| 125 |
# إرسال سلس
|
| 126 |
"-max_muxing_queue_size", "65535",
|
|
@@ -154,7 +159,7 @@ def run_monitor():
|
|
| 154 |
was_streaming = False
|
| 155 |
consecutive_fails = 0
|
| 156 |
|
| 157 |
-
log("🚀 محرك البث ال
|
| 158 |
|
| 159 |
while True:
|
| 160 |
try:
|
|
@@ -165,7 +170,7 @@ def run_monitor():
|
|
| 165 |
log("🟢 بدء بث جديد...")
|
| 166 |
if processes:
|
| 167 |
kill_process_tree(processes["ffmpeg"].pid)
|
| 168 |
-
processes =
|
| 169 |
if processes:
|
| 170 |
is_streaming = True
|
| 171 |
was_streaming = True
|
|
@@ -173,7 +178,7 @@ def run_monitor():
|
|
| 173 |
else:
|
| 174 |
if is_streaming and processes and processes["ffmpeg"].poll() is not None:
|
| 175 |
log("⚠️ ffmpeg مات، إعادة تشغيل...")
|
| 176 |
-
processes =
|
| 177 |
if not processes:
|
| 178 |
is_streaming = False
|
| 179 |
was_streaming = False
|
|
@@ -195,7 +200,7 @@ def run_monitor():
|
|
| 195 |
time.sleep(10)
|
| 196 |
|
| 197 |
if __name__ == "__main__":
|
| 198 |
-
log("✅ بدء تشغيل المحرك
|
| 199 |
t = threading.Thread(target=run_monitor, daemon=True)
|
| 200 |
t.start()
|
| 201 |
while True:
|
|
|
|
| 61 |
pass
|
| 62 |
return None
|
| 63 |
|
| 64 |
+
def start_stream_high_quality(stream_key, stream_url):
|
| 65 |
if not stream_key or not stream_url:
|
| 66 |
return None
|
| 67 |
+
log("🎬 بدء البث (1080p + جودة عالية)...")
|
| 68 |
rtmp_url = f"rtmp://a.rtmp.youtube.com/live2/{stream_key}"
|
| 69 |
|
| 70 |
cmd = [
|
|
|
|
| 99 |
"-correct_ts_overflow", "1",
|
| 100 |
"-max_interleave_delta", "0",
|
| 101 |
|
| 102 |
+
# ═══════════════════════════════════
|
| 103 |
+
# فلتر 1080×1920 (شاشة كاملة للجوال)
|
| 104 |
+
# ═══════════════════════════════════
|
| 105 |
+
"-vf", "scale=1080:1920:force_original_aspect_ratio=increase,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black:eval=frame",
|
| 106 |
+
|
| 107 |
+
# فيديو – جودة 1080p مستقرة
|
| 108 |
"-c:v", "libx264",
|
| 109 |
"-preset", "ultrafast",
|
| 110 |
+
"-crf", "18", # جودة أعلى
|
| 111 |
+
"-maxrate", "8000k", # سقف عالٍ للجودة
|
| 112 |
+
"-minrate", "5000k", # أدنى مستوى ممتاز
|
| 113 |
+
"-bufsize", "16000k", # بفر ترميز كبير
|
| 114 |
"-g", "60",
|
| 115 |
"-vsync", "2",
|
| 116 |
"-x264-params", "nal-hrd=cbr",
|
|
|
|
| 120 |
"-color_trc", "bt709",
|
| 121 |
"-colorspace", "bt709",
|
| 122 |
|
| 123 |
+
# صوت – بسيط ومتناسق
|
| 124 |
"-c:a", "aac",
|
| 125 |
"-b:a", "192k",
|
| 126 |
"-ac", "2",
|
| 127 |
"-ar", "44100",
|
| 128 |
+
"-async", "1",
|
| 129 |
|
| 130 |
# إرسال سلس
|
| 131 |
"-max_muxing_queue_size", "65535",
|
|
|
|
| 159 |
was_streaming = False
|
| 160 |
consecutive_fails = 0
|
| 161 |
|
| 162 |
+
log("🚀 محرك البث 1080p عالي الجودة")
|
| 163 |
|
| 164 |
while True:
|
| 165 |
try:
|
|
|
|
| 170 |
log("🟢 بدء بث جديد...")
|
| 171 |
if processes:
|
| 172 |
kill_process_tree(processes["ffmpeg"].pid)
|
| 173 |
+
processes = start_stream_high_quality(STREAM_KEY, stream_url)
|
| 174 |
if processes:
|
| 175 |
is_streaming = True
|
| 176 |
was_streaming = True
|
|
|
|
| 178 |
else:
|
| 179 |
if is_streaming and processes and processes["ffmpeg"].poll() is not None:
|
| 180 |
log("⚠️ ffmpeg مات، إعادة تشغيل...")
|
| 181 |
+
processes = start_stream_high_quality(STREAM_KEY, stream_url)
|
| 182 |
if not processes:
|
| 183 |
is_streaming = False
|
| 184 |
was_streaming = False
|
|
|
|
| 200 |
time.sleep(10)
|
| 201 |
|
| 202 |
if __name__ == "__main__":
|
| 203 |
+
log("✅ بدء تشغيل المحرك 1080p")
|
| 204 |
t = threading.Thread(target=run_monitor, daemon=True)
|
| 205 |
t.start()
|
| 206 |
while True:
|