We need a tool/commandline utility as part of a larger project. The tool needs to be able to pull a standard MP3/shoutcast/icecast stream from a server, dissect it into frames, and also receive the MP3 metadata. Both the received MP3 frames as well as the metadata then needs to be handed to another process via a socket interface.
This project is part of a larger project, other such tools and also some core software is needed and will be outsourced through GAF.
The software quality has to be very high, we cannot afford to debug the resulting software extensively, so we need very good and senior "C" programmers which have extensive experience in socket/network communications, preferably experience in the RTP/UDP/MP3 field.
When bidding, please give us some idea about your background and why you think you are the perfect resource, we will then invite you to bid also on the other projects if you fit.
MP3RCV - a process to receive/pull a stream from a shoutcast/icecast server, alternatively receive an RTP stream.
In case of shoutcast/icecast, the stream must be requested with "metadata" information, and metadata must be first stripped and provided to a (configurable) UDP socket.
In case of RTP, the metadata will arrive in separate RTP frames with a (configurable) payload type and needs to be provided to the configurable socket as well.
In botch cases, the received Audio MP3 frames must be individually sent to a configurable socket (UDP) as fast as possible after receiving them.
If the stream gets "out of sync" for whatever reason (TCP only), the process must re-synchronise on the MP3 frames as quick as possible and then continue operations. If the stream stops, the connection must be dropped and reestablished.
Delivery as source code, documented, plus windows executable. Source must be able to compile on common linux, OpenBSD, MAC OSX OS'es.
HINT: the dissection of the MP3 stream is somewhat trivial, to determine the MP3 frame length it is necessary to look at the header and do two simple table-lookups to come up with the exact frame length. Plausibility checking is required on the header to make sure the process is correctly locked on the stream.