class Video
Attributes
action[RW]
driver[RW]
extended[RW]
format[RW]
image_count[RW]
platform[RW]
rate[RW]
seconds[RW]
udid[RW]
Public Class Methods
new(options)
click to toggle source
# File lib/flick/video.rb, line 5 def initialize options Flick::Checker.action options[:action] Flick::Checker.platform options[:platform] Flick::Checker.format options[:format] self.action = options[:action] self.platform = options[:platform] case self.platform when "ios" self.driver = Flick::Ios.new options when "android" self.driver = Flick::Android.new options end self.image_count = options[:count] self.seconds = options[:seconds].to_f self.rate = options[:rate].to_f self.extended = options[:extend].to_b self.udid = self.driver.udid self.format = options[:format] end
Public Instance Methods
android()
click to toggle source
# File lib/flick/video.rb, line 25 def android platform == "android" end
ios()
click to toggle source
# File lib/flick/video.rb, line 29 def ios platform == "ios" end
run()
click to toggle source
# File lib/flick/video.rb, line 33 def run self.send(action) end
start()
click to toggle source
# File lib/flick/video.rb, line 37 def start driver.clear_files puts "\nStarting Recoder!!!" if driver.recordable? if extended puts "In extended mode." Flick::Checker.system_dependency "mp4box" loop_record else start_record end else Flick::Checker.system_dependency "ffmpeg" start_screenshot_record end end
stop()
click to toggle source
# File lib/flick/video.rb, line 54 def stop puts "\nStopping Recorder!!!" if driver.recordable? stop_record else stop_screenshot_recording end sleep 1 driver.clear_files end
Private Instance Methods
convert_images_to_mp4()
click to toggle source
# File lib/flick/video.rb, line 145 def convert_images_to_mp4 remove_zero_byte_images %x(ffmpeg -loglevel quiet -framerate #{rate} -pattern_type glob -i '#{driver.flick_dir}/screenshot-#{udid}*.png' -c:v libx264 -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" #{driver.flick_dir}/#{driver.name}.mp4) end
gif()
click to toggle source
# File lib/flick/video.rb, line 135 def gif convert_images_to_mp4 unless driver.recordable? %x(ffmpeg -loglevel quiet -i #{driver.flick_dir}/#{driver.name}.mp4 -pix_fmt rgb24 #{driver.outdir}/#{driver.name}.gif) end
loop_record()
click to toggle source
# File lib/flick/video.rb, line 77 def loop_record Flick::System.kill_process "video", udid $0 = "flick-video-#{udid}" SimpleDaemon.daemonize! command = -> do count = "%03d" % 1 loop do unless Flick::System.process_running? "#{udid}-" driver.screenrecord "video-#{udid}-#{count}" count.next! end end end command.call end
mp4()
click to toggle source
# File lib/flick/video.rb, line 140 def mp4 convert_images_to_mp4 File.rename "#{driver.flick_dir}/#{driver.name}.mp4", "#{driver.outdir}/#{driver.name}.mp4" unless format == "gif" end
remove_zero_byte_images()
click to toggle source
# File lib/flick/video.rb, line 150 def remove_zero_byte_images Dir.glob("#{driver.flick_dir}/screenshot-#{udid}*.png").each do |f| File.delete f if File.zero? f end end
start_record()
click to toggle source
# File lib/flick/video.rb, line 67 def start_record Flick::System.kill_process "video", udid $0 = "flick-video-#{udid}" SimpleDaemon.daemonize! command = -> do driver.screenrecord "video-#{udid}-single" end command.call end
start_screenshot_record()
click to toggle source
# File lib/flick/video.rb, line 108 def start_screenshot_record Flick::System.kill_process "screenshot", udid puts "Process will stop after #{image_count} screenshots.\n" $0 = "flick-screenshot-#{udid}" SimpleDaemon.daemonize! command = -> do count = "%03d" % 1 loop do if count.to_i <= image_count driver.screenshot "screenshot-#{udid}-#{count}" count.next!; sleep seconds else stop_screenshot_recording break end end end command.call end
stop_record()
click to toggle source
# File lib/flick/video.rb, line 93 def stop_record Flick::System.kill_process "video", udid sleep 5 #wait for video process to finish driver.pull_files "video" files = Dir.glob("#{driver.flick_dir}/video-#{udid}*.mp4").sort return if files.empty? files.each { |file| system("mp4box -cat #{file} #{driver.flick_dir}/#{driver.name}.mp4") } puts "Saving to #{driver.outdir}/#{driver.name}.#{format}" if format == "gif" gif else File.rename "#{driver.flick_dir}/#{driver.name}.mp4", "#{driver.outdir}/#{driver.name}.mp4" end end
stop_screenshot_recording()
click to toggle source
# File lib/flick/video.rb, line 128 def stop_screenshot_recording driver.pull_files "screenshot" if android Flick::System.kill_process "screenshot", udid puts "Saving to #{driver.outdir}/#{driver.name}.#{format}" self.send(format) end