BASSenc

BASS_Encode_CastInit


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
);

Parameters

handleThe encoder handle.
serverThe server to send to, in the form of "address:port" (Shoutcast) or "address:port/mount" (Icecast).
passThe server password.
contentThe MIME type of the encoder output. This can be one of the following.
BASS_ENCODE_TYPE_MP3MP3.
BASS_ENCODE_TYPE_OGGOGG.
BASS_ENCODE_TYPE_AACAAC.
nameThe stream name... NULL = no name.
urlThe URL, for example, of the radio station's webpage... NULL = no URL.
genreThe genre... NULL = no genre.
descDescription... NULL = no description. This applies to Icecast only.
headersOther headers to send to the server... NULL = none. Each header should end with a carriage return and line feed ("\r\n").
bitrateThe 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".
pubPublic? 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).

Return value

If successful, TRUE is returned, else FALSE is returned. Use BASS_ErrorGetCode to get the error code.

Error codes

BASS_ERROR_HANDLEhandle is not valid.
BASS_ERROR_ALREADYThere is already a cast set on the encoder.
BASS_ERROR_ILLPARAMserver doesn't include a port number.
BASS_ERROR_FILEOPENCouldn't connect to the server.
BASS_ERROR_CAST_DENIEDpass is not valid.
BASS_ERROR_UNKNOWNSome other mystery problem!

Remarks

This function sets up a Shoutcast/Icecast source client, sending the encoder's output to a server, which listeners can then connect to and receive the data from. The Shoutcast and Icecast server software is available from www.shoutcast.com/download/serve.phtml and www.icecast.org/download.php, respectively.

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.

BASS_Encode_ServerInit can be used to setup a server that listeners can connect to directly, without a Shoutcast/Icecast server intermediary.

Platform-specific

This function is not available on Windows CE.

Example

Start encoding a stereo 44100hz channel to 128kb/s MP3, and send the output to a Shoutcast server.
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

See also

BASS_Encode_CastGetStats, BASS_Encode_CastSetTitle, BASS_Encode_ServerInit, BASS_Encode_SetNotify, BASS_Encode_Start, BASS_Encode_StartACM, BASS_Encode_StartCA, BASS_CONFIG_ENCODE_CAST_TIMEOUT