awslive-poster 0.1.2 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/awslive-poster/awslive_poster.rb +31 -10
- metadata +3 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c19944959ef73fb75ec58858c59febda14b281d1d65da922b836d181a633d363
|
|
4
|
+
data.tar.gz: b285bd04100e1b185aedbd55121a9b23dd3ef44c4b0cbdbfe345c2529238822b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5e430229ee5e589462cc7d8de2809215d26d1afddbe08e4940d5c4af9a08508b32fca0fb90788fbb17f040bc832b0bb7540cf4ddbbb4d5e612208dd789f6a200
|
|
7
|
+
data.tar.gz: d9d6bb2f679a975fbdaf4630ba348f8015e20f4dc88f18459fc191b124d5336c2b2da311d4f92421ed58ae102e70faf50fe0d6d6c4249723ce13779bbf404c44
|
|
@@ -10,9 +10,15 @@ module Awslive
|
|
|
10
10
|
class PosterImageDoesNotExist < StandardError; end
|
|
11
11
|
class NoStartTimeInTag < StandardError; end
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
MAX_CHANNEL_START_TIME = 2 * 60
|
|
14
|
+
|
|
15
|
+
def initialize(channel_id, access_key=nil , access_secret =nil, region = nil)
|
|
14
16
|
credentials = Aws::SharedCredentials.new
|
|
15
|
-
if
|
|
17
|
+
if !access_key.nil? && !access_secret.nil?
|
|
18
|
+
aws_region = region.nil? ? 'us-east-1' : region
|
|
19
|
+
@medialiveclient = Aws::MediaLive::Client.new( :access_key_id => access_key, :secret_access_key => access_secret, :region => aws_region )
|
|
20
|
+
@s3 = Aws::S3::Resource.new( :access_key_id => access_key, :secret_access_key => access_secret, :region => aws_region )
|
|
21
|
+
elsif credentials.set?
|
|
16
22
|
@medialiveclient = Aws::MediaLive::Client.new(:credentials => credentials)
|
|
17
23
|
@s3 = Aws::S3::Resource.new(:credentials => credentials)
|
|
18
24
|
else
|
|
@@ -20,6 +26,10 @@ module Awslive
|
|
|
20
26
|
@s3 = Aws::S3::Resource.new
|
|
21
27
|
end
|
|
22
28
|
@channel_id = channel_id
|
|
29
|
+
@last_computed_time = nil
|
|
30
|
+
|
|
31
|
+
@last_preview_url = nil
|
|
32
|
+
@interval = nil
|
|
23
33
|
end
|
|
24
34
|
|
|
25
35
|
def get_url(channel_info = nil)
|
|
@@ -27,6 +37,7 @@ module Awslive
|
|
|
27
37
|
channel_info = @medialiveclient.describe_channel({ :channel_id => "#{@channel_id}" }) if channel_info.nil?
|
|
28
38
|
channel_state = channel_info[:state]
|
|
29
39
|
if channel_state == "RUNNING"
|
|
40
|
+
@last_computed_time = Time.now.to_i
|
|
30
41
|
out_group = get_framecapture_group(channel_info["encoder_settings"])
|
|
31
42
|
raise NoFrameCaptureOutputGroup.new("Framecapture output group should be configured!") if out_group.nil?
|
|
32
43
|
start_time = get_channel_start_time(channel_info)
|
|
@@ -35,27 +46,38 @@ module Awslive
|
|
|
35
46
|
url = get_dest_url(dest_id, channel_info)
|
|
36
47
|
uri = URI(url)
|
|
37
48
|
modifier = get_framecapture_modifier(out_group)
|
|
38
|
-
interval = get_framecapture_interval(out_group, channel_info)
|
|
39
|
-
seq_counter = compute_index(start_time, interval)
|
|
49
|
+
@interval = get_framecapture_interval(out_group, channel_info)
|
|
50
|
+
seq_counter = compute_index(start_time, @interval)
|
|
40
51
|
suffix = uri.path[1..-1]
|
|
41
52
|
bucket = @s3.bucket("#{uri.host}")
|
|
42
53
|
obj = bucket.object("#{suffix}#{modifier}.#{seq_counter}.jpg")
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
54
|
+
preview_url = get_presigned_url(obj)
|
|
55
|
+
if preview_url.nil?
|
|
56
|
+
puts "seems delay in generating posters; giving a pause for fetching!!"
|
|
57
|
+
sleep (@interval / 2 ).round
|
|
58
|
+
preview_url = get_presigned_url(obj)
|
|
47
59
|
end
|
|
60
|
+
raise PosterImageDoesNotExist.new("Poster Image #{suffix}#{modifier}.#{seq_counter}.jpg Does not exist!") if preview_url.nil?
|
|
48
61
|
else
|
|
49
62
|
raise InvalidChannelState.new("Channel Need to be in running state!, current state is #{channel_state}")
|
|
50
63
|
end
|
|
51
64
|
preview_url
|
|
52
65
|
end
|
|
53
66
|
|
|
67
|
+
def get_presigned_url(obj)
|
|
68
|
+
url = nil
|
|
69
|
+
puts "Fetching the object at #{Time.now}"
|
|
70
|
+
if obj.exists?
|
|
71
|
+
url = obj.presigned_url(:get)
|
|
72
|
+
end
|
|
73
|
+
url
|
|
74
|
+
end
|
|
75
|
+
|
|
54
76
|
def compute_index(start_time, interval)
|
|
55
77
|
channel_start_time = Time.iso8601(start_time).to_i
|
|
56
78
|
current_time = Time.now.utc.to_i
|
|
57
79
|
diff_time = current_time - channel_start_time
|
|
58
|
-
image_index = (diff_time / interval.to_i).
|
|
80
|
+
image_index = (diff_time / interval.to_i).round
|
|
59
81
|
index = image_index.to_s.rjust(5,'0')
|
|
60
82
|
index
|
|
61
83
|
end
|
|
@@ -132,4 +154,3 @@ module Awslive
|
|
|
132
154
|
end
|
|
133
155
|
end
|
|
134
156
|
end
|
|
135
|
-
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: awslive-poster
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Maheshwaran G
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-
|
|
11
|
+
date: 2020-02-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -97,8 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
97
97
|
- !ruby/object:Gem::Version
|
|
98
98
|
version: '0'
|
|
99
99
|
requirements: []
|
|
100
|
-
|
|
101
|
-
rubygems_version: 2.7.3
|
|
100
|
+
rubygems_version: 3.1.2
|
|
102
101
|
signing_key:
|
|
103
102
|
specification_version: 4
|
|
104
103
|
summary: Utility that generates the Poster Image URL for the running AWS medialive
|