Update streamlit_app.py
Browse files- streamlit_app.py +21 -12
streamlit_app.py
CHANGED
|
@@ -324,17 +324,18 @@ def get_tiktok_stream_url():
|
|
| 324 |
return None
|
| 325 |
|
| 326 |
# ══════════════════════════════════════════════════════════════════════════════
|
| 327 |
-
# بدء البث (
|
| 328 |
# ══════════════════════════════════════════════════════════════════════════════
|
| 329 |
|
| 330 |
def start_stream(stream_key, stream_url):
|
| 331 |
if not stream_key or not stream_url:
|
| 332 |
return None
|
| 333 |
-
log("🎬 بدء بث جديد (yt-dlp +
|
| 334 |
rtmp_url = f"rtmp://a.rtmp.youtube.com/live2/{stream_key}"
|
| 335 |
|
| 336 |
try:
|
| 337 |
-
|
|
|
|
| 338 |
ffmpeg_cmd = [
|
| 339 |
"nice", "-n", "19", "ffmpeg",
|
| 340 |
"-hide_banner", "-loglevel", "warning",
|
|
@@ -356,8 +357,12 @@ def start_stream(stream_key, stream_url):
|
|
| 356 |
"-preset", "ultrafast",
|
| 357 |
"-b:v", "4500k",
|
| 358 |
"-maxrate", "4500k",
|
| 359 |
-
"-bufsize", "13500k",
|
| 360 |
"-pix_fmt", "yuv420p",
|
|
|
|
|
|
|
|
|
|
|
|
|
| 361 |
"-tune", "zerolatency",
|
| 362 |
"-g", "60",
|
| 363 |
"-force_key_frames", "expr:gte(t,n_forced*2)",
|
|
@@ -378,7 +383,7 @@ def start_stream(stream_key, stream_url):
|
|
| 378 |
stdout=subprocess.DEVNULL, stderr=open(FFMPEG_LOG, "w"),
|
| 379 |
preexec_fn=os.setsid
|
| 380 |
)
|
| 381 |
-
log(f"✅ بدأ البث (
|
| 382 |
return {"ffmpeg": ffmpeg_proc, "ytdlp": None}
|
| 383 |
except Exception as e:
|
| 384 |
log(f"❌ فشل بدء البث: {e}")
|
|
@@ -387,7 +392,7 @@ def start_stream(stream_key, stream_url):
|
|
| 387 |
def start_stream_streamlink(stream_key, stream_url):
|
| 388 |
if not stream_key or not stream_url:
|
| 389 |
return None
|
| 390 |
-
log("🎬 بدء بث (streamlink +
|
| 391 |
rtmp_url = f"rtmp://a.rtmp.youtube.com/live2/{stream_key}"
|
| 392 |
try:
|
| 393 |
sl_cmd = ["streamlink", "--stdout", "--loglevel", "warning"]
|
|
@@ -403,7 +408,7 @@ def start_stream_streamlink(stream_key, stream_url):
|
|
| 403 |
stream_url, "best"
|
| 404 |
])
|
| 405 |
|
| 406 |
-
vf_scale = "scale=1080:1920:force_original_aspect_ratio=increase,pad=1080:1920:(ow-iw)/2:(oh-ih)/2
|
| 407 |
ff_cmd = [
|
| 408 |
"nice", "-n", "19", "ffmpeg",
|
| 409 |
"-hide_banner", "-loglevel", "warning",
|
|
@@ -425,8 +430,12 @@ def start_stream_streamlink(stream_key, stream_url):
|
|
| 425 |
"-preset", "ultrafast",
|
| 426 |
"-b:v", "4500k",
|
| 427 |
"-maxrate", "4500k",
|
| 428 |
-
"-bufsize", "13500k",
|
| 429 |
"-pix_fmt", "yuv420p",
|
|
|
|
|
|
|
|
|
|
|
|
|
| 430 |
"-tune", "zerolatency",
|
| 431 |
"-g", "60",
|
| 432 |
"-force_key_frames", "expr:gte(t,n_forced*2)",
|
|
@@ -449,7 +458,7 @@ def start_stream_streamlink(stream_key, stream_url):
|
|
| 449 |
preexec_fn=os.setsid
|
| 450 |
)
|
| 451 |
sl_proc.stdout.close()
|
| 452 |
-
log(f"✅ بدأ البث (streamlink +
|
| 453 |
return {"ffmpeg": ff_proc, "ytdlp": sl_proc}
|
| 454 |
except Exception as e:
|
| 455 |
log(f"❌ فشل streamlink: {e}")
|
|
@@ -465,7 +474,7 @@ def kill_stream(processes):
|
|
| 465 |
log("💀 تم قتل عمليات البث")
|
| 466 |
|
| 467 |
# ══════════════════════════════════════════════════════════════════════════════
|
| 468 |
-
# محرك المراقبة
|
| 469 |
# ════════════════════════════════════���═════════════════════════════════════════
|
| 470 |
|
| 471 |
def is_monitor_running():
|
|
@@ -503,7 +512,7 @@ def run_monitor():
|
|
| 503 |
current_stream_key = None
|
| 504 |
consecutive_failures = 0
|
| 505 |
|
| 506 |
-
log("🚀 محرك المراقبة بدأ (
|
| 507 |
|
| 508 |
while True:
|
| 509 |
try:
|
|
@@ -605,7 +614,7 @@ if "monitor_thread" not in st.session_state:
|
|
| 605 |
# ══════════════════════════════════════════════════════════════════════════════
|
| 606 |
|
| 607 |
st.set_page_config(page_title="AutoStreamer Pro", page_icon="📡")
|
| 608 |
-
st.title("📡 رادار بث أحمد عبدالله (
|
| 609 |
|
| 610 |
st.subheader("⚙️ حالة الإعدادات")
|
| 611 |
c1, c2, c3 = st.columns(3)
|
|
|
|
| 324 |
return None
|
| 325 |
|
| 326 |
# ══════════════════════════════════════════════════════════════════════════════
|
| 327 |
+
# بدء البث (مع إعدادات الألوان الكاملة)
|
| 328 |
# ══════════════════════════════════════════════════════════════════════════════
|
| 329 |
|
| 330 |
def start_stream(stream_key, stream_url):
|
| 331 |
if not stream_key or not stream_url:
|
| 332 |
return None
|
| 333 |
+
log("🎬 بدء بث جديد (yt-dlp + ألوان صحيحة)...")
|
| 334 |
rtmp_url = f"rtmp://a.rtmp.youtube.com/live2/{stream_key}"
|
| 335 |
|
| 336 |
try:
|
| 337 |
+
# فلتر بدون setpts (نعتمد على copyts ومعالجة الطوابع الأخرى)
|
| 338 |
+
vf_scale = "scale=1080:1920:force_original_aspect_ratio=increase,pad=1080:1920:(ow-iw)/2:(oh-ih)/2"
|
| 339 |
ffmpeg_cmd = [
|
| 340 |
"nice", "-n", "19", "ffmpeg",
|
| 341 |
"-hide_banner", "-loglevel", "warning",
|
|
|
|
| 357 |
"-preset", "ultrafast",
|
| 358 |
"-b:v", "4500k",
|
| 359 |
"-maxrate", "4500k",
|
| 360 |
+
"-bufsize", "13500k",
|
| 361 |
"-pix_fmt", "yuv420p",
|
| 362 |
+
"-color_range", "tv",
|
| 363 |
+
"-color_primaries", "bt709",
|
| 364 |
+
"-color_trc", "bt709",
|
| 365 |
+
"-colorspace", "bt709",
|
| 366 |
"-tune", "zerolatency",
|
| 367 |
"-g", "60",
|
| 368 |
"-force_key_frames", "expr:gte(t,n_forced*2)",
|
|
|
|
| 383 |
stdout=subprocess.DEVNULL, stderr=open(FFMPEG_LOG, "w"),
|
| 384 |
preexec_fn=os.setsid
|
| 385 |
)
|
| 386 |
+
log(f"✅ بدأ البث (yt-dlp + ألوان) — ffmpeg PID: {ffmpeg_proc.pid}")
|
| 387 |
return {"ffmpeg": ffmpeg_proc, "ytdlp": None}
|
| 388 |
except Exception as e:
|
| 389 |
log(f"❌ فشل بدء البث: {e}")
|
|
|
|
| 392 |
def start_stream_streamlink(stream_key, stream_url):
|
| 393 |
if not stream_key or not stream_url:
|
| 394 |
return None
|
| 395 |
+
log("🎬 بدء بث (streamlink + ألوان صحيحة)...")
|
| 396 |
rtmp_url = f"rtmp://a.rtmp.youtube.com/live2/{stream_key}"
|
| 397 |
try:
|
| 398 |
sl_cmd = ["streamlink", "--stdout", "--loglevel", "warning"]
|
|
|
|
| 408 |
stream_url, "best"
|
| 409 |
])
|
| 410 |
|
| 411 |
+
vf_scale = "scale=1080:1920:force_original_aspect_ratio=increase,pad=1080:1920:(ow-iw)/2:(oh-ih)/2"
|
| 412 |
ff_cmd = [
|
| 413 |
"nice", "-n", "19", "ffmpeg",
|
| 414 |
"-hide_banner", "-loglevel", "warning",
|
|
|
|
| 430 |
"-preset", "ultrafast",
|
| 431 |
"-b:v", "4500k",
|
| 432 |
"-maxrate", "4500k",
|
| 433 |
+
"-bufsize", "13500k",
|
| 434 |
"-pix_fmt", "yuv420p",
|
| 435 |
+
"-color_range", "tv",
|
| 436 |
+
"-color_primaries", "bt709",
|
| 437 |
+
"-color_trc", "bt709",
|
| 438 |
+
"-colorspace", "bt709",
|
| 439 |
"-tune", "zerolatency",
|
| 440 |
"-g", "60",
|
| 441 |
"-force_key_frames", "expr:gte(t,n_forced*2)",
|
|
|
|
| 458 |
preexec_fn=os.setsid
|
| 459 |
)
|
| 460 |
sl_proc.stdout.close()
|
| 461 |
+
log(f"✅ بدأ البث (streamlink + ألوان) PID: {ff_proc.pid}")
|
| 462 |
return {"ffmpeg": ff_proc, "ytdlp": sl_proc}
|
| 463 |
except Exception as e:
|
| 464 |
log(f"❌ فشل streamlink: {e}")
|
|
|
|
| 474 |
log("💀 تم قتل عمليات البث")
|
| 475 |
|
| 476 |
# ══════════════════════════════════════════════════════════════════════════════
|
| 477 |
+
# محرك المراقبة
|
| 478 |
# ════════════════════════════════════���═════════════════════════════════════════
|
| 479 |
|
| 480 |
def is_monitor_running():
|
|
|
|
| 512 |
current_stream_key = None
|
| 513 |
consecutive_failures = 0
|
| 514 |
|
| 515 |
+
log("🚀 محرك المراقبة بدأ (ألوان طبيعية)...")
|
| 516 |
|
| 517 |
while True:
|
| 518 |
try:
|
|
|
|
| 614 |
# ══════════════════════════════════════════════════════════════════════════════
|
| 615 |
|
| 616 |
st.set_page_config(page_title="AutoStreamer Pro", page_icon="📡")
|
| 617 |
+
st.title("📡 رادار بث أحمد عبدالله (ألوان طبيعية)")
|
| 618 |
|
| 619 |
st.subheader("⚙️ حالة الإعدادات")
|
| 620 |
c1, c2, c3 = st.columns(3)
|