Initializes sending an encoder's output to a Shoutcast or Icecast server.
BOOL BASS_Encode_CastInit( HENCODE handle, char *server, char *pass, char *content, char *name, char *url, char *genre, char *desc, char *headers, DWORD bitrate, BOOL pub );
|handle||The encoder handle.|
|server||The server to send to, in the form of "address:port" (Shoutcast) or "address:port,streamid" (Shoutcast 2) or "address:port/mount" (Icecast).|
|pass||The server password. A username can be included in the form of "username:password" when connecting to an Icecast or Shoutcast 2 server.|
|content||The MIME type of the encoder output. This can be one of the following.|
|name||The stream name... NULL = no name.|
|url||The URL, for example, of the radio station's webpage... NULL = no URL.|
|genre||The genre... NULL = no genre.|
|desc||Description... NULL = no description. This applies to Icecast only.|
|headers||Other headers to send to the server... NULL = none. Each header should end with a carriage return and line feed ("\r\n").|
|bitrate||The bitrate (in kbps) of the encoder output... 0 = undefined bitrate. In cases where the bitrate is a "quality" (rather than CBR) setting, the headers parameter can be used to communicate that instead, eg. "ice-bitrate: Quality 0\r\n".|
|pub||Public? If TRUE, the stream is added to the public directory of streams, at shoutcast.com or dir.xiph.org (or as defined in the server config).|
|BASS_ERROR_HANDLE||handle is not valid.|
|BASS_ERROR_ALREADY||There is already a cast set on the encoder.|
|BASS_ERROR_ILLPARAM||server does not include a port number.|
|BASS_ERROR_TIMEOUT||The server did not respond to the request within the timeout period, as set with the BASS_CONFIG_NET_TIMEOUT config option.|
|BASS_ERROR_FILEOPEN||Could not connect to the server.|
|BASS_ERROR_CAST_DENIED||pass is not valid.|
|BASS_ERROR_UNKNOWN||Some other mystery problem!|
An encoder needs to be started, but with no data yet sent to it, before using this function to setup the sending of the encoder's output to a Shoutcast or Icecast server. If BASS_Encode_Start is used, the encoder should be setup to write its output to STDOUT. Due to the length restrictions of WAVE headers/files, the encoder should also be started with the BASS_ENCODE_NOHEAD flag, and the sample format details sent via the command-line.
Unless the BASS_ENCODE_CAST_NOLIMIT flag is set on the encoder, BASSenc automatically limits the rate that data is processed to real-time speed to avoid overflowing the server's buffer, which means that it is safe to simply try to process data as quickly as possible, eg. when the source is a decoding channel. Encoders set on recording channels are automatically exempt from the rate limiting, as they are inherently real-time. With BASS 2.4.6 or above, also exempt are encoders that are fed in a playback buffer update cycle (including BASS_Update and BASS_ChannelUpdate calls), eg. when the source is a playing channel; that is to avoid delaying the update thread, which could result in playback buffer underruns.
Normally, BASSenc will produce the encoded data (with the help of an encoder) that is sent to a Shoutcast/Icecast server, but it is also possible to send already encoded data to a server (without first decoding and re-encoding it) via the PCM encoding option. The encoder can be set on any BASS channel, as rather than feeding on sample data from the channel, BASS_Encode_Write would be used to feed in the already encoded data. BASSenc does not know what the data's bitrate is in that case, so it is up to the user to process the data at the correct rate (real-time speed).
BASS_Encode_ServerInit can be used to setup a server that listeners can connect to directly, without a Shoutcast/Icecast server intermediary.
HENCODE encoder=BASS_Encode_Start(channel, "lame -r -s 44100 -b 128 -", BASS_ENCODE_NOHEAD, NULL, 0); // setup the encoder BASS_Encode_CastInit(encoder, "server.com:8000", "password", BASS_ENCODE_TYPE_MP3, "name", "url", "genre", NULL, NULL, 128, TRUE); // start the cast
Setup PCM encoding on a dummy stream to send pre-encoded MP3 data to a Shoutcast server.
dummy=BASS_StreamCreate(44100, 1, BASS_STREAM_DECODE, STREAMPROC_DUMMY, NULL); // create a dummy stream to host the encoder encoder=BASS_Encode_Start(dummy, NULL, BASS_ENCODE_PCM|BASS_ENCODE_NOHEAD|BASS_ENCODE_CAST_NOLIMIT, NULL, NULL); // setup the PCM encoder BASS_Encode_CastInit(encoder, "server.com:8000", "password", BASS_ENCODE_TYPE_MP3, "name", "url", "genre", NULL, NULL, 128, TRUE); // start the cast ... BASS_Encode_Write(encoder, mp3data, length); // feed MP3 data to the encoder/caster (repeat periodically)