class VideoConverter::OpenSSL
Attributes
bin[RW]
command[RW]
encryption_type[RW]
Public Class Methods
get_encryption_key(output)
click to toggle source
# File lib/video_converter/openssl.rb, line 43 def self.get_encryption_key(output) if output.encryption_key File.join(output.work_dir, "video.key") elsif output.encryption_key_url File.join(output.work_dir, "url.video.key") else File.join(output.work_dir, "#{output.filename}.key") end end
get_encryption_key_path(output)
click to toggle source
# File lib/video_converter/openssl.rb, line 29 def self.get_encryption_key_path(output) if output.encryption_key File.open(File.join(output.work_dir,'video.key'), 'wb') { |f| f.write output.encryption_key } 'video.key' elsif output.encryption_key_url uri = URI(output.encryption_key_url) File.open(File.join(output.work_dir,'url.video.key'), 'wb') { |f| f.puts Net::HTTP.get(uri.host, uri.path) } output.encryption_key_url else File.open(File.join(output.work_dir, "#{output.filename}.key"), 'wb') { |f| f.write SecureRandom.hex(8) } "#{output.filename}.key" end end
run(output)
click to toggle source
# File lib/video_converter/openssl.rb, line 12 def self.run(output) success = true playlist = File.join(output.work_dir, output.filename) File.write(playlist, File.read(playlist).sub("#EXTM3U\n", "#EXTM3U\n#EXT-X-KEY:METHOD=AES-128,URI=\"#{OpenSSL.get_encryption_key_path(output)}\"\n")) encryption_dir = FileUtils.mkdir_p("#{output.chunks_dir}_encrypted").first chunks = Dir::glob(File.join(output.chunks_dir, "*.ts")).sort do |c1, c2| File.basename(c1).match(/\d+/).to_s.to_i <=> File.basename(c2).match(/\d+/).to_s.to_i end chunks.each_with_index do |chunk, index| initialization_vector = "%032x" % index success &&= Command.new(command, prepare_params( :chunk => chunk, :encrypted_chunk => File.join(encryption_dir,File.basename(chunk)), :initialization_vector => initialization_vector, :encryption_key => OpenSSL.get_encryption_key(output) )).execute end remove_old_dir(output) if success success end
Private Class Methods
prepare_params(params)
click to toggle source
# File lib/video_converter/openssl.rb, line 55 def self.prepare_params(params) { :bin => bin, :encryption_type => encryption_type, :chunk => params[:chunk], :encrypted_chunk => params[:encrypted_chunk], :initialization_vector => params[:initialization_vector], :encryption_key => `hexdump -e '16/1 "%02x"' #{params[:encryption_key]}` } end
remove_old_dir(output)
click to toggle source
# File lib/video_converter/openssl.rb, line 66 def self.remove_old_dir(output) FileUtils.rm_r(output.chunks_dir) FileUtils.mv("#{output.chunks_dir}_encrypted", output.chunks_dir) FileUtils.rm (File.join(output.work_dir,'url.video.key')) if File.exists?(File.join(output.work_dir,'url.video.key')) end