class ActiveEncode::EngineAdapters::ZencoderAdapter

Public Instance Methods

cancel(id) click to toggle source
# File lib/active_encode/engine_adapters/zencoder_adapter.rb, line 15
def cancel(id)
  response = Zencoder::Job.cancel(id)
  build_encode(get_job_details(id)) if response.success?
end
create(input_url, _options = {}) click to toggle source

TODO: add a stub for an input helper (supplied by an initializer) that transforms encode.input.url into a zencoder accepted url

# File lib/active_encode/engine_adapters/zencoder_adapter.rb, line 6
def create(input_url, _options = {})
  response = Zencoder::Job.create(input: input_url.to_s)
  build_encode(get_job_details(response.body["id"]))
end
find(id, _opts = {}) click to toggle source
# File lib/active_encode/engine_adapters/zencoder_adapter.rb, line 11
def find(id, _opts = {})
  build_encode(get_job_details(id))
end

Private Instance Methods

build_encode(job_details) click to toggle source
# File lib/active_encode/engine_adapters/zencoder_adapter.rb, line 30
def build_encode(job_details)
  return nil if job_details.nil?
  encode = ActiveEncode::Base.new(convert_input(job_details), convert_options(job_details))
  encode.id = job_details.body["job"]["id"].to_s
  encode.state = convert_state(get_job_state(job_details))
  job_progress = get_job_progress(encode.id)
  encode.current_operations = convert_current_operations(job_progress)
  encode.percent_complete = convert_percent_complete(job_progress, job_details)
  encode.created_at = job_details.body["job"]["created_at"]
  encode.updated_at = job_details.body["job"]["updated_at"]
  encode.errors = []

  encode.output = convert_output(job_details, job_progress)

  encode.input.id = job_details.body["job"]["input_media_file"]["id"].to_s
  encode.input.errors = convert_input_errors(job_details)
  tech_md = convert_tech_metadata(job_details.body["job"]["input_media_file"])
  [:width, :height, :frame_rate, :duration, :checksum, :audio_codec, :video_codec,
   :audio_bitrate, :video_bitrate, :file_size].each do |field|
    encode.input.send("#{field}=", tech_md[field])
  end
  encode.input.state = convert_state(job_details.body["job"]["input_media_file"]["state"])
  encode.input.created_at = job_details.body["job"]["input_media_file"]["created_at"]
  encode.input.updated_at = job_details.body["job"]["input_media_file"]["updated_at"]

  encode
end
convert_current_operations(job_progress) click to toggle source
# File lib/active_encode/engine_adapters/zencoder_adapter.rb, line 75
def convert_current_operations(job_progress)
  current_ops = []
  job_progress.body["outputs"].each { |output| current_ops << output["current_event"] unless output["current_event"].nil? }
  current_ops
end
convert_input(job_details) click to toggle source
# File lib/active_encode/engine_adapters/zencoder_adapter.rb, line 88
def convert_input(job_details)
  job_details.body["job"]["input_media_file"]["url"]
end
convert_input_errors(job_details) click to toggle source
# File lib/active_encode/engine_adapters/zencoder_adapter.rb, line 117
def convert_input_errors(job_details)
  Array(job_details.body["job"]["input_media_file"]["error_message"])
end
convert_options(_job_details) click to toggle source
# File lib/active_encode/engine_adapters/zencoder_adapter.rb, line 92
def convert_options(_job_details)
  {}
end
convert_output(job_details, job_progress) click to toggle source
# File lib/active_encode/engine_adapters/zencoder_adapter.rb, line 96
def convert_output(job_details, job_progress)
  job_details.body["job"]["output_media_files"].collect do |o|
    output = ActiveEncode::Output.new
    output.id = o["id"].to_s
    output.label = o["label"]
    output.url = o["url"]
    output.errors = Array(o["error_message"])

    tech_md = convert_tech_metadata(o)
    [:width, :height, :frame_rate, :duration, :checksum, :audio_codec, :video_codec,
     :audio_bitrate, :video_bitrate, :file_size].each do |field|
      output.send("#{field}=", tech_md[field])
    end
    output_progress = job_progress.body["outputs"].find { |out_prog| out_prog["id"] = output.id }
    output.state = convert_state(output_progress["state"])
    output.created_at = o["created_at"]
    output.updated_at = o["updated_at"]
    output
  end
end
convert_percent_complete(job_progress, job_details) click to toggle source
# File lib/active_encode/engine_adapters/zencoder_adapter.rb, line 81
def convert_percent_complete(job_progress, job_details)
  percent = job_progress.body["progress"]
  percent ||= 100 if convert_state(get_job_state(job_details)) == :completed
  percent ||= 0
  percent
end
convert_state(state) click to toggle source
# File lib/active_encode/engine_adapters/zencoder_adapter.rb, line 58
def convert_state(state)
  case state
  when "assigning", "pending", "waiting", "processing" # Should there be a queued state?
    :running
  when "cancelled"
    :cancelled
  when "failed", "no_input"
    :failed
  when "finished"
    :completed
  end
end
convert_tech_metadata(media_file) click to toggle source
# File lib/active_encode/engine_adapters/zencoder_adapter.rb, line 121
def convert_tech_metadata(media_file)
  return {} if media_file.nil?

  metadata = {}
  media_file.each_pair do |key, value|
    next if value.blank?
    case key
    when "md5_checksum"
      metadata[:checksum] = value
    when "format"
      metadata[:mime_type] = value
    when "duration_in_ms"
      metadata[:duration] = value
    when "audio_codec"
      metadata[:audio_codec] = value
    when "channels"
      metadata[:audio_channels] = value
    when "audio_bitrate_in_kbps"
      metadata[:audio_bitrate] = value
    when "video_codec"
      metadata[:video_codec] = value
    when "frame_rate"
      metadata[:frame_rate] = value
    when "video_bitrate_in_kbps"
      metadata[:video_bitrate] = value
    when "width"
      metadata[:width] = value
    when "height"
      metadata[:height] = value
    end
  end
  metadata
end
get_job_details(job_id) click to toggle source
# File lib/active_encode/engine_adapters/zencoder_adapter.rb, line 22
def get_job_details(job_id)
  Zencoder::Job.details(job_id)
end
get_job_progress(job_id) click to toggle source
# File lib/active_encode/engine_adapters/zencoder_adapter.rb, line 26
def get_job_progress(job_id)
  Zencoder::Job.progress(job_id)
end
get_job_state(job_details) click to toggle source
# File lib/active_encode/engine_adapters/zencoder_adapter.rb, line 71
def get_job_state(job_details)
  job_details.body["job"]["state"]
end