From 61bb22ce448ce5a4848d180e3a9b06feae003cab Mon Sep 17 00:00:00 2001 From: Emiliano Frascaro Date: Thu, 4 Jun 2026 09:39:11 +0200 Subject: [PATCH] Fix overlay _air: probesize su intake RTMP e rilevamento zombie Senza analyzeduration/probesize l'overlay non pubblicava su _air; YouTube restava in attesa. Esclusi processi ffmpeg zombie da running?. Co-authored-by: Cursor --- backend/app/models/stream_event.rb | 2 +- backend/app/services/streams/overlay_relay.rb | 6 +++++- backend/app/services/streams/youtube_relay.rb | 5 ++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/backend/app/models/stream_event.rb b/backend/app/models/stream_event.rb index 4d8cdf5..c6b2bfb 100644 --- a/backend/app/models/stream_event.rb +++ b/backend/app/models/stream_event.rb @@ -1,7 +1,7 @@ class StreamEvent < ApplicationRecord EVENT_TYPES = %w[ connected disconnected reconnected quality_changed error paused resumed - started ended network_test pairing + started ended network_test pairing youtube_ready ].freeze belongs_to :stream_session diff --git a/backend/app/services/streams/overlay_relay.rb b/backend/app/services/streams/overlay_relay.rb index 3b65191..92f13c1 100644 --- a/backend/app/services/streams/overlay_relay.rb +++ b/backend/app/services/streams/overlay_relay.rb @@ -30,6 +30,7 @@ module Streams ffmpeg_pid = Process.spawn( "ffmpeg", "-nostdin", "-hide_banner", "-loglevel", "warning", "-fflags", "+genpts+discardcorrupt", + "-analyzeduration", "10000000", "-probesize", "10000000", "-rw_timeout", "15000000", "-i", intake, "-f", "image2pipe", "-framerate", overlay_fps.to_s, "-i", pipe.to_s, @@ -193,9 +194,12 @@ module Streams end def process_alive?(pid) + stat = File.read("/proc/#{pid.to_i}/stat") + return false if stat.split[2] == "Z" + Process.kill(0, pid.to_i) true - rescue Errno::ESRCH, Errno::EPERM + rescue Errno::ESRCH, Errno::EPERM, Errno::ENOENT false end diff --git a/backend/app/services/streams/youtube_relay.rb b/backend/app/services/streams/youtube_relay.rb index 171ee17..4a80099 100644 --- a/backend/app/services/streams/youtube_relay.rb +++ b/backend/app/services/streams/youtube_relay.rb @@ -129,9 +129,12 @@ module Streams end def process_alive?(pid) + stat = File.read("/proc/#{pid.to_i}/stat") + return false if stat.split[2] == "Z" + Process.kill(0, pid.to_i) true - rescue Errno::ESRCH, Errno::EPERM + rescue Errno::ESRCH, Errno::EPERM, Errno::ENOENT false end