1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/activestorage/test/analyzer/video_analyzer_test.rb
Jonathan Hefner a197d39e13
Fall back to video container for duration
Some video formats, such as WebM, do not store duration information at
the level of the video stream.  Instead, the duration is stored as part
of the container format information.

This commit modifies `VideoAnalyzer` to use the duration from the video
container when the duration from the video stream is not available.

Fixes #40130.
2020-08-31 08:48:06 -04:00

65 lines
2.2 KiB
Ruby

# frozen_string_literal: true
require "test_helper"
require "database/setup"
require "active_storage/analyzer/video_analyzer"
class ActiveStorage::Analyzer::VideoAnalyzerTest < ActiveSupport::TestCase
test "analyzing a video" do
blob = create_file_blob(filename: "video.mp4", content_type: "video/mp4")
metadata = extract_metadata_from(blob)
assert_equal 640, metadata[:width]
assert_equal 480, metadata[:height]
assert_equal [4, 3], metadata[:display_aspect_ratio]
assert_equal 5.166648, metadata[:duration]
assert_not_includes metadata, :angle
end
test "analyzing a rotated video" do
blob = create_file_blob(filename: "rotated_video.mp4", content_type: "video/mp4")
metadata = extract_metadata_from(blob)
assert_equal 480, metadata[:width]
assert_equal 640, metadata[:height]
assert_equal [4, 3], metadata[:display_aspect_ratio]
assert_equal 90, metadata[:angle]
end
test "analyzing a video with rectangular samples" do
blob = create_file_blob(filename: "video_with_rectangular_samples.mp4", content_type: "video/mp4")
metadata = extract_metadata_from(blob)
assert_equal 1280, metadata[:width]
assert_equal 720, metadata[:height]
assert_equal [16, 9], metadata[:display_aspect_ratio]
end
test "analyzing a video with an undefined display aspect ratio" do
blob = create_file_blob(filename: "video_with_undefined_display_aspect_ratio.mp4", content_type: "video/mp4")
metadata = extract_metadata_from(blob)
assert_equal 640, metadata[:width]
assert_equal 480, metadata[:height]
assert_nil metadata[:display_aspect_ratio]
end
test "analyzing a video with a container-specified duration" do
blob = create_file_blob(filename: "video.webm", content_type: "video/webm")
metadata = extract_metadata_from(blob)
assert_equal 640, metadata[:width]
assert_equal 480, metadata[:height]
assert_equal 5.229000, metadata[:duration]
end
test "analyzing a video without a video stream" do
blob = create_file_blob(filename: "video_without_video_stream.mp4", content_type: "video/mp4")
metadata = extract_metadata_from(blob)
assert_not_includes metadata, :width
assert_not_includes metadata, :height
assert_equal 1.022000, metadata[:duration]
end
end