require "./base_controller" require "../utils/url_validator" module FosdemRecorder class DownloadController < BaseController def self.process(url) UrlValidator.validate_event! url meta = EventPage.get_meta(url) now = Time.local #Time::Location.load("Europe/Brussels") event_start = meta.event_start raise "Event start is missing!" if event_start.nil? event_stop = meta.event_stop raise "Event stop is missing!" if event_stop.nil? event_start_localtime = event_start.to_local postpone_download = (event_start_localtime >= now) # compute remaining duration when needed duration = Duration.new(start: event_start, stop: event_stop) remaining_duration = duration.from_now timeformat = event_start_localtime.to_s("%H:%M %Y-%m-%d") # FIXME: mark the file as partial cmd = [ "ffmpeg", # First the stream URL "-i", meta.stream_url, # Then the codec (simple copy) "-c", "copy", # Fix malformed AAC bitstream when detected "-bsf:a", "aac_adtstoasc", # Make the stream playable as we download it "-movflags", "frag_keyframe+empty_moov+default_base_moof+faststart", # Set record duration "-t", remaining_duration.to_s, # Set output filename "\"#{meta.title_sanitized}.mp4\"" ].join(" ") if postpone_download cmd = "echo #{cmd} | at #{timeformat}" else cmd = "echo #{cmd} | at now" end puts "Command: #{cmd}".colorize.fore(:yellow) system cmd end end end