class ActiveStorage::Analyzer::QiniuVideoAnalyzer

Extracts the following from a video blob:

Example:

ActiveStorage::Analyzer::QiniuVideoAnalyzer.new(blob).metadata
# => {:width=>240, :height=>240, :duration=>"2.000000", :aspect_ratio=>"1:1"}

Public Class Methods

accept?(blob) click to toggle source
# File lib/active_storage/analyzer/qiniu_video_analyzer.rb, line 15
def self.accept?(blob)
  blob.video?
end

Public Instance Methods

metadata() click to toggle source
# File lib/active_storage/analyzer/qiniu_video_analyzer.rb, line 19
def metadata
  {width: width, height: height, duration: duration, aspect_ratio: aspect_ratio}.compact
rescue
  {}
end

Private Instance Methods

aspect_ratio() click to toggle source
# File lib/active_storage/analyzer/qiniu_video_analyzer.rb, line 39
def aspect_ratio
  video_stream['display_aspect_ratio']
end
duration() click to toggle source
# File lib/active_storage/analyzer/qiniu_video_analyzer.rb, line 35
def duration
  video_stream['duration']
end
height() click to toggle source
# File lib/active_storage/analyzer/qiniu_video_analyzer.rb, line 31
def height
  video_stream['height']
end
streams() click to toggle source
# File lib/active_storage/analyzer/qiniu_video_analyzer.rb, line 43
def streams
  @streams ||= begin
    code, result, res = Qiniu::HTTP.api_get(blob.service.url(blob.key, fop: 'avinfo'))
    result['streams']
  end
end
video_stream() click to toggle source
# File lib/active_storage/analyzer/qiniu_video_analyzer.rb, line 50
def video_stream
  @video_stream ||= streams.detect { |stream| stream["codec_type"] == "video" } || {}
end
width() click to toggle source
# File lib/active_storage/analyzer/qiniu_video_analyzer.rb, line 27
def width
  video_stream['width']
end