diff --git a/app/logical/media_file.rb b/app/logical/media_file.rb index 6487f8247..534f91dbb 100644 --- a/app/logical/media_file.rb +++ b/app/logical/media_file.rb @@ -56,7 +56,14 @@ class MediaFile :swf when /\x1a\x45\xdf\xa3/n :webm - when /\A....ftyp(?:isom|3gp5|mp42|MSNV|avc1)/ + + # https://www.ftyps.com + # isom (common) - MP4 Base Media v1 [IS0 14496-12:2003] + # mp42 (common) - MP4 v2 [ISO 14496-14] + # 3gp5 (rare) - 3GPP Media (.3GP) Release 5 + # avc1 (rare) - MP4 Base w/ AVC ext [ISO 14496-12:2005] + # M4V (rare) - Apple iTunes Video (https://en.wikipedia.org/wiki/M4V) + when /\A....ftyp(?:isom|3gp5|mp42|avc1|M4V)/ :mp4 when /\APK\x03\x04/ :zip diff --git a/test/files/test-audio.m4v b/test/files/test-audio.m4v new file mode 100644 index 000000000..d7cad067a Binary files /dev/null and b/test/files/test-audio.m4v differ diff --git a/test/functional/uploads_controller_test.rb b/test/functional/uploads_controller_test.rb index bbf43c610..b2bba1319 100644 --- a/test/functional/uploads_controller_test.rb +++ b/test/functional/uploads_controller_test.rb @@ -261,6 +261,7 @@ class UploadsControllerTest < ActionDispatch::IntegrationTest should_upload_successfully("test/files/test-animated-86x52.gif") should_upload_successfully("test/files/test-300x300.mp4") should_upload_successfully("test/files/test-512x512.webm") + should_upload_successfully("test/files/test-audio.m4v") # should_upload_successfully("test/files/compressed.swf") end diff --git a/test/unit/media_file_test.rb b/test/unit/media_file_test.rb index 986efca66..c1f4f9866 100644 --- a/test/unit/media_file_test.rb +++ b/test/unit/media_file_test.rb @@ -93,6 +93,10 @@ class MediaFileTest < ActiveSupport::TestCase assert_equal(:mp4, MediaFile.open("test/files/test-300x300.mp4").file_ext) end + should "determine the correct extension for a m4v file" do + assert_equal(:mp4, MediaFile.open("test/files/test-audio.m4v").file_ext) + end + should "determine the correct extension for a ugoira file" do assert_equal(:zip, MediaFile.open("test/files/ugoira.zip").file_ext) end