Spaces:
Running
Running
Prayer: re-request YouTube live when ingest is healthy but stuck in liveStarting
Browse files- youtube_manager.py +19 -0
youtube_manager.py
CHANGED
|
@@ -1716,6 +1716,25 @@ class ManagedYouTube:
|
|
| 1716 |
self.stream_health(key,user,ev)
|
| 1717 |
ev=self.journal.read()['events'].get(key) or ev
|
| 1718 |
self._ingest_copy_watchdog(key,user,ev)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1719 |
return
|
| 1720 |
|
| 1721 |
# life is expected to be 'ready' or 'testing' for a newly bound event
|
|
|
|
| 1716 |
self.stream_health(key,user,ev)
|
| 1717 |
ev=self.journal.read()['events'].get(key) or ev
|
| 1718 |
self._ingest_copy_watchdog(key,user,ev)
|
| 1719 |
+
# Measured Prayer-Time-Bot: life=liveStarting, health=ok, out≈wall for 10+ min,
|
| 1720 |
+
# public never left «starting». Re-request live while ingest is healthy.
|
| 1721 |
+
if life=='liveStarting' and needs_poll:
|
| 1722 |
+
healthy=(str(ev.get('youtube_health') or '') in ('good','ok'))
|
| 1723 |
+
try:
|
| 1724 |
+
snap=(self.senders.get(key) or {}).get('sender')
|
| 1725 |
+
out=float((snap.snapshot() if snap else {}).get('output_seconds') or 0)
|
| 1726 |
+
except Exception:
|
| 1727 |
+
out=0.0
|
| 1728 |
+
if healthy or out>=30:
|
| 1729 |
+
if not ev.get('was_live'):
|
| 1730 |
+
self.event_update(key,was_live=True,phase='starting')
|
| 1731 |
+
try:
|
| 1732 |
+
self.api.call('liveBroadcasts/transition','POST',{'part':'id,status','id':ev['broadcast_id'],'broadcastStatus':'live'})
|
| 1733 |
+
self.event_note(key,'يوتيوب يستقبل؛ أُعيد طلب التحويل من liveStarting إلى مباشر')
|
| 1734 |
+
self.log(user,'[LIVE] إعادة طلب live من liveStarting '+str(ev.get('broadcast_id')))
|
| 1735 |
+
except APIError as e:
|
| 1736 |
+
# already transitioning / not allowed — keep copy, do not tear down
|
| 1737 |
+
self.log(user,'[LIVE] تحويل liveStarting: '+self.safe_error(e)[:120])
|
| 1738 |
return
|
| 1739 |
|
| 1740 |
# life is expected to be 'ready' or 'testing' for a newly bound event
|