Improve the detection of mp4 types #86 (#98)

Add more byte patterns for the values that can follow `ftyp` in an mp4 file.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d44ddfe..d52b8da 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -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.
 
diff --git a/lib/src/magic_number.dart b/lib/src/magic_number.dart
index ee3de31..5de7d87 100644
--- a/lib/src/magic_number.dart
+++ b/lib/src/magic_number.dart
@@ -113,7 +113,7 @@
   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,
@@ -140,6 +140,141 @@
     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.
diff --git a/test/mime_type_test.dart b/test/mime_type_test.dart
index 099d5e8..f10d847 100644
--- a/test/mime_type_test.dart
+++ b/test/mime_type_test.dart
@@ -85,7 +85,7 @@
         0x1A,
         0x0A
       ]);
-      _expectMimeType('file.mp4', 'video/mp4', headerBytes: [
+      _expectMimeType('file', 'video/3gpp', headerBytes: [
         0x00,
         0x00,
         0x00,
@@ -99,6 +99,90 @@
         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,