class Awslive::Poster
Constants
- MAX_CHANNEL_START_TIME
Public Class Methods
new(channel_id, access_key=nil , access_secret =nil, region = nil)
click to toggle source
# File lib/awslive-poster/awslive_poster.rb, line 15 def initialize(channel_id, access_key=nil , access_secret =nil, region = nil) credentials = Aws::SharedCredentials.new if !access_key.nil? && !access_secret.nil? aws_region = region.nil? ? 'us-east-1' : region puts "AWS REgion #{aws_region}" @medialiveclient = Aws::MediaLive::Client.new( :access_key_id => access_key, :secret_access_key => access_secret, :region => aws_region ) client = Aws::S3::Client.new(access_key_id: access_key, secret_access_key: access_secret, region: 'us-east-1') @s3 = Aws::S3::Resource.new(client: client) elsif credentials.set? @medialiveclient = Aws::MediaLive::Client.new(:credentials => credentials) @s3 = Aws::S3::Client.new(:credentials => credentials) else @medialiveclient = Aws::MediaLive::Client.new @s3 = Aws::S3::Client.new end @channel_id = channel_id @last_computed_time = nil @last_preview_url = nil @interval = nil end
Public Instance Methods
compute_index(start_time, interval)
click to toggle source
# File lib/awslive-poster/awslive_poster.rb, line 82 def compute_index(start_time, interval) channel_start_time = Time.iso8601(start_time).to_i current_time = Time.now.utc.to_i diff_time = current_time - channel_start_time image_index = (diff_time / interval.to_i).round index = image_index.to_s.rjust(5,'0') return image_index, index end
get_channel_start_time(channel_info)
click to toggle source
# File lib/awslive-poster/awslive_poster.rb, line 91 def get_channel_start_time(channel_info) start_time = channel_info.tags["channel_start_time"] start_time end
get_dest_info(out_grp)
click to toggle source
# File lib/awslive-poster/awslive_poster.rb, line 110 def get_dest_info(out_grp) dest = nil if !out_grp["output_group_settings"]["frame_capture_group_settings"].nil? dest = out_grp["output_group_settings"]["frame_capture_group_settings"]["destination"]["destination_ref_id"] rescue nil end dest end
get_dest_url(dest_info, channel_info)
click to toggle source
# File lib/awslive-poster/awslive_poster.rb, line 118 def get_dest_url(dest_info, channel_info) url = nil if !channel_info["destinations"].nil? channel_info["destinations"].each do | dest | if dest["id"] == dest_info url = dest["settings"][0]["url"] break if !url.nil? end end end url end
get_framecapture_group(encode_setting)
click to toggle source
# File lib/awslive-poster/awslive_poster.rb, line 96 def get_framecapture_group(encode_setting) out_grp = nil outputgroups = encode_setting["output_groups"] rescue nil unless outputgroups.nil? outputgroups.each do | output | if !output["output_group_settings"]["frame_capture_group_settings"].nil? out_grp = output break if !out_grp.nil? end end end out_grp end
get_framecapture_interval(out_grp, channel_info)
click to toggle source
# File lib/awslive-poster/awslive_poster.rb, line 136 def get_framecapture_interval(out_grp, channel_info) interval = nil video_desc_name = out_grp["outputs"][0]["video_description_name"] if !video_desc_name.nil? video_desc_info = get_video_description_info(video_desc_name, channel_info) if !video_desc_info.nil? interval = video_desc_info["codec_settings"]["frame_capture_settings"]["capture_interval"] end end interval end
get_framecapture_modifier(out_grp)
click to toggle source
# File lib/awslive-poster/awslive_poster.rb, line 131 def get_framecapture_modifier(out_grp) modifier = out_grp["outputs"][0]["output_settings"]["frame_capture_output_settings"]["name_modifier"] rescue nil modifier end
get_presigned_url(obj)
click to toggle source
# File lib/awslive-poster/awslive_poster.rb, line 72 def get_presigned_url(obj) url = nil puts "Fetching the object at #{Time.now}" puts "Object #{obj}" if obj.exists? url = obj.presigned_url(:get) rescue nil end url end
get_url(channel_info = nil)
click to toggle source
# File lib/awslive-poster/awslive_poster.rb, line 37 def get_url(channel_info = nil) preview_url = nil channel_info = @medialiveclient.describe_channel({ :channel_id => "#{@channel_id}" }) if channel_info.nil? channel_state = channel_info[:state] if channel_state == "RUNNING" @last_computed_time = Time.now.to_i out_group = get_framecapture_group(channel_info["encoder_settings"]) raise NoFrameCaptureOutputGroup.new("Framecapture output group should be configured!") if out_group.nil? start_time = get_channel_start_time(channel_info) raise NoStartTimeInTag.new("channel_start_time should be provisioned in Channel tag!") if start_time.nil? dest_id = get_dest_info(out_group) url = get_dest_url(dest_id, channel_info) uri = URI(url) modifier = get_framecapture_modifier(out_group) @interval = get_framecapture_interval(out_group, channel_info) index, seq_counter = compute_index(start_time, @interval) suffix = uri.path[1..-1] bucket = @s3.bucket("#{uri.host}") puts "object prefix #{suffix}#{modifier}.#{seq_counter}.jpg" obj = bucket.object("#{suffix}#{modifier}.#{seq_counter}.jpg") preview_url = get_presigned_url(obj) rescue nil if preview_url.nil? puts "seems delay in generating posters; decrementing the counter!!" index = index - 1 seq_counter = index.to_s.rjust(5,'0') obj = bucket.object("#{suffix}#{modifier}.#{seq_counter}.jpg") preview_url = get_presigned_url(obj) end raise PosterImageDoesNotExist.new("Poster Image #{suffix}#{modifier}.#{seq_counter}.jpg Does not exist!") if preview_url.nil? else raise InvalidChannelState.new("Channel Need to be in running state!, current state is #{channel_state}") end preview_url end
get_video_description_info(desc_name, channel_info)
click to toggle source
# File lib/awslive-poster/awslive_poster.rb, line 148 def get_video_description_info(desc_name, channel_info) video_info = nil videos_desc = channel_info["encoder_settings"]["video_descriptions"] if !videos_desc.nil? videos_desc.each do | description | if description["name"] == desc_name video_info = description break end end end video_info end