samuelneff/MimeTypeMap

Official mimetypes vs. extension mapping for m4b files

sandreas opened this issue · 4 comments

Hello,

thank you for providing this useful library. Since I just ran into an issue using m4b files, I would like to ask, which sources you used for the mapping?

The result for m4b files is audio/m4b, but AFAIK this type does not exist / is not specified. The "official" list of registered Mimetypes linked to RFCs / Persons is available at:

https://www.iana.org/assignments/media-types/media-types.xhtml

These are without extension mapping, since the extension of a file can only be a hint for the real mimetype, although it maybe a good hint ;-)

The best resource I found WITH extension mapping was:
http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
which also lacks m4b :-/

Another good resource might be the magic.mgc which is common on Unix:
https://man7.org/linux/man-pages/man4/magic.4.html

Searching for m4b in the types definition, it is referenced as audio/x-m4b.

# grep 'm4b' /usr/share/mime/types
audio/x-m4b
# file -b --mime-type sample.m4b
audio/x-m4b

So it seems that in this library / type definition every custom mimetype, that is not referenced in the official listing, is prefixed with x-.

The magic.mgc contains a binary analysis instruction set, that does not rely on the extension, but this may also be incorrect (or at least unwanted), since the result for some m4b files is video/mp4, which is technically correct but assuming the extension is valid, the wanted result is audio/mp4 or better audio/x-m4b, even if the file contains the binary signature of a video.

To get to the bottom line:

  • The official mimetypes do not contain audio/m4b, which may be wrong in your library
  • The inofficial but commonly used mimetypes are usually prefixed with an /x- (e.g. audio/x-m4b)
  • What are your sources for the mappings?
  • Should I create a pull request to change the m4b result to audio/x-m4b or is this behaviour intended?

@sandreas Thank you for the detailed analysis. I looked into the history of how m4b got added to the list and did some additional research online. My conclusion is the same as yours, it should be audio/x-m4b.

If you would be so kind as to submit a PR, I'll merge it.

Thanks again,

Sam

Ok thx for the quick response. I'll take some time to check other mimetypes by the mentioned resources and submit a pull request asap.

There are the following other possible wrong /x- mappings:

.jar - actual: application/java-archive expected: application/x-java-archive
.aiff - actual: audio/aiff expected: audio/x-aiff
.m4b - actual: audio/m4b expected: audio/x-m4b
.pls - actual: audio/scpls expected: audio/x-scpls
.wav - actual: audio/wav expected: audio/x-wav
.pic - actual: image/pict expected: image/x-pict

I will submit a PR with all these corrected.

After further investigation i found out that about 700 items in /usr/share/mime/types have no mapping. Some examples:

text/xmcd
video/mp2t
video/vnd.mpegurl

The list is too long to correct all of them, but I'll try to do some of them. I'll create a second pull request, if I find some other improvements.

Did not have the time to fix this, sorry.