113

I'm trying to decide which mime type to choose for returning mp3 data (served up by php)

according to this listing of mime types: http://www.webmaster-toolkit.com/mime-types.shtml

.mp3    audio/mpeg3
.mp3    audio/x-mpeg-3
.mp3    video/mpeg
.mp3    video/x-mpeg

What are the difference between these, and which should I use?

Kristian
  • 19,340
  • 14
  • 84
  • 156

6 Answers6

161

Your best bet would be using the RFC defined mime-type audio/mpeg.

saluce
  • 11,923
  • 3
  • 46
  • 64
  • 39
    Chrome 26 knows better and uses `audio/mp3`... Go figure. – Nux Apr 05 '13 at 11:31
  • 23
    Here is the [Chromium bug](https://bugs.chromium.org/p/chromium/issues/detail?id=227004), he just turned 3 today. I'm sure he's going to stick around for a few more years, so smile and wish him a happy birthday. :) – jgillich Apr 05 '16 at 20:39
  • @pollaris There is no such thing as multiple mime types, because a file is only of one type. Ideally, you would return `audio/mpeg` if you are returning an mp3 file or `audio/wav` if you are returning a wav file. You could use the generic `application/octet-stream` to indicate a binary file if you didn't want to code for returning the actual mime type, but then the browser might not treat the file the way you expect. – saluce Oct 26 '17 at 14:57
  • 6
    @jgillich - you were right. 6 years and can now ride a bicycle https://bugs.chromium.org/p/chromium/issues/detail?id=227004 – Kae Verens Jun 09 '19 at 09:53
  • 1
    The Chrome bug has been fixed! Not sure when it'll make it into Chrome. – M Somerville May 02 '20 at 19:02
35

I had a problem with mime types and where making tests for few file types. It looks like each browser sends it's variation of a mime type for a specific file. I was trying to upload mp3 and zip files with open source php class, that what I have found:

  • Firefox (mp3): audio/mpeg
  • Firefox (zip): application/zip
  • Chrome (mp3): audio/mp3
  • Chrome (zip): application/octet-stream
  • Opera (mp3): audio/mp3
  • Opera (zip): application/octet-stream
  • IE (mp3): audio/mpeg
  • IE (zip): application/x-zip-compressed

So if you need several file types to upload, you better make some tests so that every browser could upload a file and pass mime type check.

Eugene Petakhin
  • 473
  • 4
  • 6
12

Use .mp3 audio/mpeg, that's the one I always used. I guess others are just aliases.

zessx
  • 65,078
  • 28
  • 121
  • 147
6

You should always use audio/mpeg, because firefox cannot play audio/mpeg3 files

Johnny Zhao
  • 2,438
  • 1
  • 24
  • 25
4

The standard way is to use audio/mpeg which is something like this in your PHP header function ...

header('Content-Type: audio/mpeg');

Madan Sapkota
  • 21,350
  • 11
  • 100
  • 111
0

mp3 files sometimes throw strange mime types as per this answer: https://stackoverflow.com/a/2755288/14482130

If you are doing some user validation do not allow 'application/octet-stream' or 'application/x-zip-compressed' as suggested above since they can contain be .exe or other potentially dangerous files.

In order to validate when mime type gives a false negative you can use fleep as per this answer https://stackoverflow.com/a/52570299/14482130 to finish the validation.