This problem has nothing to do with your code. There are two problems.
The first is browser codec support. Check out the MDN page for updated info on codec support per browser.
The second problem is that SHOUTcast returns an oddball status line. It will send ICY 200 OK
instead of HTTP/1.0 200 OK
. Some browsers will not accept this header. The only way around it is to use something else for your streaming server, such as Icecast. (If you're interested, I also run a streaming service that can relay your existing SHOUTcast stream in a standards-compliant HTTP stream that has better compatibility. E-mail preview@audiopump.co if you are interested.)