Skip to content

Commit

Permalink
Improve the detection of mp4 types #86 (#98)
Browse files Browse the repository at this point in the history
Add more byte patterns for the values that can follow `ftyp` in an mp4 file.
  • Loading branch information
ivangolubykh committed May 26, 2023
1 parent e5169af commit 2444840
Show file tree
Hide file tree
Showing 3 changed files with 222 additions and 2 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# 1.0.5-wip

* Update video/mp4 mimeType lookup by header bytes.
* Add m4b mimeType lookup by extension.
* Add `text/markdown` mimeType lookup by extension.

Expand Down
137 changes: 136 additions & 1 deletion lib/src/magic_number.dart
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ const List<MagicNumber> initialMagicNumbers = [
MagicNumber('audio/mpeg', [0x49, 0x44, 0x33]),
MagicNumber('audio/mpeg', [0xFF, 0xFB]),
MagicNumber('audio/ogg', [0x4F, 0x70, 0x75]),
MagicNumber('video/mp4', [
MagicNumber('video/3gpp', [
0x00,
0x00,
0x00,
Expand All @@ -140,6 +140,141 @@ const List<MagicNumber> initialMagicNumbers = [
0xFF,
0xFF
]),
MagicNumber('video/mp4', [
0x00,
0x00,
0x00,
0x00,
0x66,
0x74,
0x79,
0x70,
0x61,
0x76,
0x63,
0x31
], mask: [
0x00,
0x00,
0x00,
0x00,
0xFF,
0xFF,
0xFF,
0xFF,
0xFF,
0xFF,
0xFF,
0xFF
]),
MagicNumber('video/mp4', [
0x00,
0x00,
0x00,
0x00,
0x66,
0x74,
0x79,
0x70,
0x69,
0x73,
0x6F,
0x32
], mask: [
0x00,
0x00,
0x00,
0x00,
0xFF,
0xFF,
0xFF,
0xFF,
0xFF,
0xFF,
0xFF,
0xFF
]),
MagicNumber('video/mp4', [
0x00,
0x00,
0x00,
0x00,
0x66,
0x74,
0x79,
0x70,
0x69,
0x73,
0x6F,
0x6D
], mask: [
0x00,
0x00,
0x00,
0x00,
0xFF,
0xFF,
0xFF,
0xFF,
0xFF,
0xFF,
0xFF,
0xFF
]),
MagicNumber('video/mp4', [
0x00,
0x00,
0x00,
0x00,
0x66,
0x74,
0x79,
0x70,
0x6D,
0x70,
0x34,
0x31
], mask: [
0x00,
0x00,
0x00,
0x00,
0xFF,
0xFF,
0xFF,
0xFF,
0xFF,
0xFF,
0xFF,
0xFF
]),
MagicNumber('video/mp4', [
0x00,
0x00,
0x00,
0x00,
0x66,
0x74,
0x79,
0x70,
0x6D,
0x70,
0x34,
0x32
], mask: [
0x00,
0x00,
0x00,
0x00,
0xFF,
0xFF,
0xFF,
0xFF,
0xFF,
0xFF,
0xFF,
0xFF
]),
MagicNumber('model/gltf-binary', [0x46, 0x54, 0x6C, 0x67]),

/// The WebP file format is based on the RIFF document format.
Expand Down
86 changes: 85 additions & 1 deletion test/mime_type_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ void main() {
0x1A,
0x0A
]);
_expectMimeType('file.mp4', 'video/mp4', headerBytes: [
_expectMimeType('file', 'video/3gpp', headerBytes: [
0x00,
0x00,
0x00,
Expand All @@ -99,6 +99,90 @@ void main() {
0x70,
0x35
]);
_expectMimeType('file.mp4', 'video/mp4', headerBytes: [
0x00,
0x00,
0x00,
0x04,
0x66,
0x74,
0x79,
0x70,
0xFF,
0xFF,
0xFF,
0xFF
]);
_expectMimeType('file', 'video/mp4', headerBytes: [
0x00,
0xF0,
0xF0,
0xF0,
0x66,
0x74,
0x79,
0x70,
0x61,
0x76,
0x63,
0x31
]);
_expectMimeType('file', 'video/mp4', headerBytes: [
0x00,
0xF0,
0xF0,
0xF0,
0x66,
0x74,
0x79,
0x70,
0x69,
0x73,
0x6F,
0x32
]);
_expectMimeType('file', 'video/mp4', headerBytes: [
0x00,
0xF0,
0xF0,
0xF0,
0x66,
0x74,
0x79,
0x70,
0x69,
0x73,
0x6F,
0x6D
]);
_expectMimeType('file', 'video/mp4', headerBytes: [
0x00,
0xF0,
0xF0,
0xF0,
0x66,
0x74,
0x79,
0x70,
0x6D,
0x70,
0x34,
0x31
]);
_expectMimeType('file', 'video/mp4', headerBytes: [
0x00,
0xF0,
0xF0,
0xF0,
0x66,
0x74,
0x79,
0x70,
0x6D,
0x70,
0x34,
0x32
]);
_expectMimeType('file', 'image/webp', headerBytes: [
0x52,
0x49,
Expand Down

0 comments on commit 2444840

Please sign in to comment.