Class: Abrizer::Canvas
Overview
Creates a IIIF Canvas JSON-LD document.
Instance Method Summary
collapse
#audio_filepath, #audio_filepath_fragmented, #basename, #canvas_filepath, #canvas_partial_filepath, #filename_directory, #first_image_filepath, #hlsts_aac_filepath, #hlsts_aac_partial_filepath, #hlsts_filepath, #hlsts_partial_filepath, #mp4_filepath, #mp4_partial_filepath, #mpd_filepath, #mpd_partial_filepath, #output_directory, #output_directory_basename, #poster_image_filepath, #poster_partial_filepath, #sprites_filepath, #sprites_partial_filepath, #vp9_filepath, #vp9_partial_filepath, #webvtt_input_filepath
Constructor Details
#initialize(filepath, output_directory, base_url) ⇒ Canvas
TODO: allow control of items/versions listed on canvas
8
9
10
11
12
13
14
|
# File 'lib/abrizer/canvas.rb', line 8
def initialize(filepath, output_directory, base_url)
@filename = filepath
@output_directory = output_directory
@base_url = base_url
finder = AdaptationFinder.new(@filename)
@adaptations = finder.adaptations
end
|
Instance Method Details
#aac_item(json) ⇒ Object
134
135
136
137
138
139
140
141
142
|
# File 'lib/abrizer/canvas.rb', line 134
def aac_item(json)
if File.exist? hlsts_aac_filepath
json.child! do
json.id hlsts_aac_id
json.type "Audio"
json.format 'audio/aac'
end
end
end
|
#canvas_id ⇒ Object
185
186
187
|
# File 'lib/abrizer/canvas.rb', line 185
def canvas_id
File.join media_base_url, canvas_partial_filepath
end
|
#captions_item(json) ⇒ Object
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
# File 'lib/abrizer/canvas.rb', line 144
def captions_item(json)
captions_file = File.join output_directory, 'vtt/captions.vtt'
if File.exist? captions_file
json.child! do
json.id vtt_id
json.type 'Text'
json.format 'text/vtt'
json.kind 'captions'
json.label 'English captions'
json.language 'en'
json. "How make explicit how whether to use these as captions or subtitles, descriptions, or chapters?"
end
end
end
|
#create ⇒ Object
16
17
18
19
20
|
# File 'lib/abrizer/canvas.rb', line 16
def create
File.open(canvas_filepath, 'w') do |fh|
fh.puts create_json
end
end
|
#create_json ⇒ Object
22
23
24
25
26
27
28
29
30
31
32
33
|
# File 'lib/abrizer/canvas.rb', line 22
def create_json
Jbuilder.encode do |json|
json.set! '@context', 'http://iiif.io/api/presentation/3/context.json'
json.id canvas_id
json.type "Canvas"
json.width max_width
json.height max_height
json.duration duration
thumbnail_json(json)
media_json(json)
end
end
|
#duration ⇒ Object
221
222
223
224
|
# File 'lib/abrizer/canvas.rb', line 221
def duration
informer = Abrizer::FfprobeInformer.new(mp4_filename)
informer.duration.to_f
end
|
#hlsts_aac_id ⇒ Object
201
202
203
|
# File 'lib/abrizer/canvas.rb', line 201
def hlsts_aac_id
File.join media_base_url, hlsts_aac_partial_filepath
end
|
#hlsts_id ⇒ Object
197
198
199
|
# File 'lib/abrizer/canvas.rb', line 197
def hlsts_id
File.join media_base_url, hlsts_partial_filepath
end
|
#hlsts_item(json) ⇒ Object
95
96
97
98
99
100
101
102
103
104
105
106
|
# File 'lib/abrizer/canvas.rb', line 95
def hlsts_item(json)
if File.exist? hlsts_filepath
json.child! do
json.id hlsts_id
json.type "Video"
json.format "application/x-mpegURL"
json.width max_width
json.height max_height
end
end
end
|
#max_height ⇒ Object
234
235
236
|
# File 'lib/abrizer/canvas.rb', line 234
def max_height
@adaptations.last.height
end
|
#max_width ⇒ Object
226
227
228
|
# File 'lib/abrizer/canvas.rb', line 226
def max_width
@adaptations.last.width
end
|
181
182
183
|
# File 'lib/abrizer/canvas.rb', line 181
def media_base_url
File.join @base_url, output_directory_basename
end
|
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
# File 'lib/abrizer/canvas.rb', line 45
def media_json(json)
json.content do
json.child! do
json.type "AnnotationPage"
json.items do
json.child! do
json.type 'Annotation'
json.motivation 'painting'
json.target canvas_id
json.body do
json.child! do
json.type "Choice"
json.choiceHint 'client'
json.items do
mpd_item(json)
hlsts_item(json)
vp9_item(json)
mp4_item(json)
aac_item(json)
end
end
json.child! do
json.type 'Choice'
json.choiceHint 'client'
json.items do
captions_item(json)
end
end
end
end
sprites_item(json)
end
end
end
end
|
#min_height ⇒ Object
238
239
240
|
# File 'lib/abrizer/canvas.rb', line 238
def min_height
@adaptations.first.height
end
|
#min_width ⇒ Object
230
231
232
|
# File 'lib/abrizer/canvas.rb', line 230
def min_width
@adaptations.first.width
end
|
#mp4_filename ⇒ Object
TODO: DRY up with progressive_mp4.rb
251
252
253
|
# File 'lib/abrizer/canvas.rb', line 251
def mp4_filename
File.join output_directory, "progressive.mp4"
end
|
#mp4_height ⇒ Object
246
247
248
|
# File 'lib/abrizer/canvas.rb', line 246
def mp4_height
@adaptations[-2].height
end
|
#mp4_id ⇒ Object
205
206
207
|
# File 'lib/abrizer/canvas.rb', line 205
def mp4_id
File.join media_base_url, mp4_partial_filepath
end
|
#mp4_item(json) ⇒ Object
121
122
123
124
125
126
127
128
129
130
131
132
|
# File 'lib/abrizer/canvas.rb', line 121
def mp4_item(json)
if File.exist? mp4_filepath
json.child! do
json.id mp4_id
json.type "Video"
json.format "video/mp4"
json.width mp4_width
json.height mp4_height
end
end
end
|
#mp4_width ⇒ Object
242
243
244
|
# File 'lib/abrizer/canvas.rb', line 242
def mp4_width
@adaptations[-2].width
end
|
#mpd_id ⇒ Object
193
194
195
|
# File 'lib/abrizer/canvas.rb', line 193
def mpd_id
File.join media_base_url, mpd_partial_filepath
end
|
#mpd_item(json) ⇒ Object
83
84
85
86
87
88
89
90
91
92
93
|
# File 'lib/abrizer/canvas.rb', line 83
def mpd_item(json)
if File.exist? mpd_filepath
json.child! do
json.id mpd_id
json.type "Video"
json.format "application/dash+xml"
json.width max_width
json.height max_height
end
end
end
|
#poster_id ⇒ Object
189
190
191
|
# File 'lib/abrizer/canvas.rb', line 189
def poster_id
File.join media_base_url, poster_partial_filepath
end
|
#sprites_id ⇒ Object
217
218
219
|
# File 'lib/abrizer/canvas.rb', line 217
def sprites_id
File.join media_base_url, sprites_partial_filepath
end
|
#sprites_item(json) ⇒ Object
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
|
# File 'lib/abrizer/canvas.rb', line 160
def sprites_item(json)
if File.exist? sprites_filepath
json.child! do
json.type 'Annotation'
json.motivation 'video-thumbnails'
json.target canvas_id
json.body do
json.child! do
json.id sprites_id
json.type 'Text'
json.format 'text/vtt'
json.kind 'metadata'
json.label 'image sprite metadata'
json. "How to include resources like video image sprites like those created by https://github.com/jronallo/video_sprites and used by various players?"
end
end
end
end
end
|
#thumbnail_json(json) ⇒ Object
35
36
37
38
39
40
41
42
43
|
# File 'lib/abrizer/canvas.rb', line 35
def thumbnail_json(json)
if File.exist? poster_image_filepath
json.thumbnail do
json.id poster_id
json.type 'Image'
json.format 'image/jpeg'
end
end
end
|
#vp9_id ⇒ Object
209
210
211
|
# File 'lib/abrizer/canvas.rb', line 209
def vp9_id
File.join media_base_url, vp9_partial_filepath
end
|
#vp9_item(json) ⇒ Object
108
109
110
111
112
113
114
115
116
117
118
119
|
# File 'lib/abrizer/canvas.rb', line 108
def vp9_item(json)
if File.exist? vp9_filepath
json.child! do
json.id vp9_id
json.type "Video"
json.format "video/webm"
json.width max_width
json.height max_height
end
end
end
|
#vtt_id ⇒ Object
213
214
215
|
# File 'lib/abrizer/canvas.rb', line 213
def vtt_id
File.join media_base_url, 'vtt/captions.vtt'
end
|