Class: Abrizer::Data

Inherits:
Object
  • Object
show all
Includes:
FilepathHelpers, IdentifierHelpers, InformationHelpers, ReadAdaptations
Defined in:
lib/abrizer/data.rb

Overview

Creates a JSON file with information about the videos

Instance Method Summary collapse

Methods included from ReadAdaptations

#read_adaptations

Methods included from InformationHelpers

#duration, #max_height, #max_width, #min_height, #min_width, #mp4_height, #mp4_width

Methods included from IdentifierHelpers

#canvas_id, #data_id, #hlsts_aac_id, #hlsts_id, #media_base_url, #mp3_id, #mp4_id, #mpd_id, #poster_id, #sprites_id, #vp9_id, #vtt_id

Methods included from FilepathHelpers

#adaptations_filepath, #audio_filepath, #audio_filepath_fragmented, #basename, #canvas_filepath, #canvas_partial_filepath, #captions_filepath, #data_filepath, #data_partial_filepath, #ffprobe_filepath, #filename_directory, #first_image_filepath, #hlsts_aac_filepath, #hlsts_aac_partial_filepath, #hlsts_filepath, #hlsts_partial_filepath, #mp3_filepath, #mp3_partial_filepath, #mp4_filepath, #mp4_partial_filepath, #mpd_filepath, #mpd_partial_filepath, #output_directory, #output_directory_basename, #poster_filepath, #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) ⇒ Data

Returns a new instance of Data.



10
11
12
13
14
15
16
17
18
19
20
# File 'lib/abrizer/data.rb', line 10

def initialize(filepath, output_directory, base_url)
  @filepath = filepath
  # This is kind of hacky, but if the @output_directory is set then we can
  # use that to look up the vp9_filepath
  @output_directory = output_directory
  @base_url = base_url

  # This sets @filename in some cases and more importantly sets @adaptations
  # based on the filepath or identifier that's passed in.
  read_adaptations
end

Instance Method Details

#aac_source(json) ⇒ Object



132
133
134
135
136
137
138
139
# File 'lib/abrizer/data.rb', line 132

def aac_source(json)
  if File.exist? hlsts_aac_filepath
    json.child! do
      json.id hlsts_aac_id
      json.format 'audio/aac'
    end
  end
end

#captions(json) ⇒ Object



141
142
143
144
145
146
147
148
149
150
151
# File 'lib/abrizer/data.rb', line 141

def captions(json)
  if File.exist? captions_filepath
    json.child! do
      json.id vtt_id
      json.format 'text/vtt'
      json.kind 'captions'
      json.label 'English captions'
      json.language 'en'
    end
  end
end

#createObject



27
28
29
30
31
32
# File 'lib/abrizer/data.rb', line 27

def create
  FileUtils.mkdir_p output_directory unless File.exist? output_directory
  File.open(data_filepath, 'w') do |fh|
    fh.puts create_json
  end
end

#create_jsonObject



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/abrizer/data.rb', line 34

def create_json
  Jbuilder.encode do |json|
    json.id data_id
    json.max_width max_width
    json.max_height max_height
    json.duration duration
    json.poster do
      poster(json)
    end
    json.video do
      mpd_source(json)
      hlsts_source(json)
      vp9_source(json)
      mp4_source(json)
    end
    json.audio do
      mp3_source(json)
      aac_source(json)
    end
    json.tracks do
      captions(json)
    end
    json.sprites do
      sprites(json)
    end
  end
end

#find_adaptationsObject



22
23
24
25
# File 'lib/abrizer/data.rb', line 22

def find_adaptations
  finder = AdaptationFinder.new(@filename)
  @adaptations = finder.adaptations
end

#hlsts_source(json) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/abrizer/data.rb', line 84

def hlsts_source(json)
  if File.exist? hlsts_filepath
    json.child! do
      json.id hlsts_id
      json.type "Video"
      # TODO: or "vnd.apple.mpegURL"
      json.format "application/x-mpegURL"
      json.width max_width
      json.height max_height
    end
  end
end

#mp3_source(json) ⇒ Object



123
124
125
126
127
128
129
130
# File 'lib/abrizer/data.rb', line 123

def mp3_source(json)
  if File.exist? mp3_filepath
    json.child! do
      json.id mp3_id
      json.format 'audio/mpeg'
    end
  end
end

#mp4_source(json) ⇒ Object



110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/abrizer/data.rb', line 110

def mp4_source(json)
  if File.exist? mp4_filepath
    json.child! do
      json.id mp4_id
      json.type "Video"
      #TODO: add mp4 codecs
      json.format "video/mp4"
      json.width mp4_width
      json.height mp4_height
    end
  end
end

#mpd_source(json) ⇒ Object



73
74
75
76
77
78
79
80
81
82
# File 'lib/abrizer/data.rb', line 73

def mpd_source(json)
  if File.exist? mpd_filepath
    json.child! do
      json.id mpd_id
      json.format "application/dash+xml"
      json.width max_width
      json.height max_height
    end
  end
end

#poster(json) ⇒ Object



62
63
64
65
66
67
68
69
70
71
# File 'lib/abrizer/data.rb', line 62

def poster(json)
  if File.exist? poster_filepath
    json.child! do
      json.id poster_id
      json.format "image/jpg"
      json.width max_width
      json.height max_height
    end
  end
end

#sprites(json) ⇒ Object



153
154
155
156
157
158
159
160
# File 'lib/abrizer/data.rb', line 153

def sprites(json)
  if File.exist? sprites_filepath
    json.id sprites_id
    json.format 'text/vtt'
    json.kind 'metadata'
    json.label 'image sprite metadata'
  end
end

#vp9_source(json) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/abrizer/data.rb', line 97

def vp9_source(json)
  if File.exist? vp9_filepath
    json.child! do
      json.id vp9_id
      json.type "Video"
      #TODO: add webm codecs
      json.format "video/webm"
      json.width max_width
      json.height max_height
    end
  end
end