erwenden von CarrierWave mit Amazon Elastic Transcoder in einer Rails-A

Ich habe vorher zwei zusätzliche Fragen zu Stack Overflow gestellt, aber nur sehr wenig Hilfe bekommen, und ich dachte, ich würde der Nachwelt eine offene Frage stellen. Ich habe Zeit damit verbracht, die AWS-SDK-API-Dokumente zu analysieren, und nur sehr wenige direkte Antworten auf meine Anforderungen gefunden. Ich habe auch in den AWS-Foren gepostet und dort keine gute Antwort erhalten. Es scheint unmöglich, eine einfache, umfassende und schrittweise Lösung zu finden.

Was ich abgeschlossen habe:

Upload mit CarrierWave direkt auf s3. Ich folgte Railscast # 383 und passte es meinen Bedürfnissen an.Ich kann meine Dateien aus meinem S3-Bucket "abrufen".

Details darüber, was ich bisher gemacht habe:

Ich habe Carrierwave-Direct verwendet, um direkt auf s3 hochzuladen (dies nutzt Nebel, um das Hochladen direkt auf s3 zu erledigen). Der Upload wird in einem Hintergrundjob mit Sidekiq verarbeitet. Nachdem die Datei in den Eimer gelegt wurde, rufe ich sie einfach durch Iteration durch die Uploads eines Benutzers ab und rufe die Datei über die URL des Uploads von s3 auf.

Hier bin ich verloren:

Ich muss Videos mit dem von AWS bereitgestellten Elastic Transcoder umcodieren.Ich muss die hochgeladenen / konvertierten Videos aus dem Ausgabe-Bucket zurückrufen. Wie verlinke ich aus dem "Ausgabe-Bucket" auf die URL? Handelt es sich um eine neue URL-Referenz oder stimmt die URL mit der ursprünglichen "Upload-URL" überein?Ich muss die transkodierten Videos vom Transkodierer in Cloudfront integrieren und sie mit JWPlayer anzeigen.Wie binde ich den API-Code im Hintergrund in meinen Upload-Prozess ein?

Hier ist mein Code bisher:

Mein Uploader:

class VideoUploader < CarrierWave::Uploader::Base
 include CarrierWaveDirect::Uploader
end

Mein Initialisierer, der die s3-Details verarbeitet:

CarrierWave.configure do |config|

 config.fog_credentials = {
 provider:              'AWS',
 aws_access_key_id:     'AWS_ACCESS_KEY_ID',
 aws_secret_access_key: 'AWS_SECRET_ACCESS_KEY',
 region:                'us-west-1'}

 config.fog_directory  = 'video-input'
 config.fog_public     = false                                        # optional, defaults to true
 config.fog_attributes = { 'Cache-Control' => "max-age=#{365.day.to_i}" } # optional, defaults to {}
end

Mein Upload-Modell:

class Upload < ActiveRecord::Base
 belongs_to :user
 mount_uploader :video, VideoUploader


 after_save :enqueue_video

 def enqueue_video
  VideoWorker.perform_async(id, key) if key.present?
 end

 class VideoWorker
  include Sidekiq::Worker

  def perform(id, key)
    upload = Upload.find(id)
    upload.key = key
    video.remote_video_url = upload.video.direct_fog_url(with_path: true)
    upload.save!
  end
 end
end

Meine Sicht

Um alle Uploads des Benutzers anzuzeigen:

<% @user.uploads.each do |upload| %>
  <%= link_to upload.title, upload_url(upload) %>
<% end %>

Um den Upload anzuzeigen (im Moment handelt es sich nur um einen Download-Link):

<h1><%= @upload.title %></h1>
<p><%= link_to @upload.video_url %></p>

Ich glaube nicht, dass mein Schema oder meine Formulare relevant sind.

Ein ähnliches Beispiel für die Funktionsweise des Codes:

Ich würde diesen Code dem Sidekiq-Worker hinzufügen, bin mir aber nicht sicher, ob ich das richtig mache. Ich bin mir auch nicht sicher, wie ich meinen "Upload" mit dem "konvertierten Upload" verbinden soll.

 upload.update_column 'converted_video', 
 File.basename(upload.video.path)

transcoder = AWS::ElasticTranscoder::Client.new
transcoder.create_job(
  pipeline_id: APP_CONFIG[Rails.env][:pipeline_id],
  input: {
    key: upload.video.path,
    frame_rate: 'auto',
    resolution: 'auto',
    aspect_ratio: 'auto',
    interlaced: 'auto',
    container: 'auto'
  },
  output: {
    key: upload.converted_video.path,
    preset_id: WEB_M4_PRESET_ID,
    thumbnail_pattern: "",
    rotate: '0'
  }
)

Links zu einem hilfreichen Artikel und den Dokumenten zum Elastic Transcoder:

http: //www.techdarkside.com/getting-started-with-the-aws-elastic-transcoder-api-in-rail

http: //docs.aws.amazon.com/sdkforruby/api/Aws/ElasticTranscoder.htm