BASS_Encode_ServerInit
Initializes a server to send an encoder's output to connecting clients.
DWORD BASS_Encode_ServerInit( HENCODE handle, char *port, DWORD buffer, DWORD burst, DWORD flags, ENCODECLIENTPROC *proc, void user );
Parameters
handle | The encoder handle. | ||
port | The IP address and port number to accept client connections on... "xxx.xxx.xxx.xxx:port", NULL = an available port on all local addresses. The IP address should be local and the port number should be lower than 65536. If the address is "0.0.0.0" or omitted, then the server will accept connections on all local addresses. If the port is "0" or omitted, then an available port will be assigned. | ||
buffer | The server's buffer length in bytes. | ||
burst | The amount of buffered data to send to new clients. This will be capped at the size of the buffer. | ||
flags | A combination of these flags.
| ||
proc | Callback function to receive notification of clients connecting and disconnecting... NULL = no callback. | ||
user | User instance data to pass to the callback function. |
Return value
If successful, the new server's port number is returned, else 0 is returned. Use BASS_ErrorGetCode to get the error code.Error codes
BASS_ERROR_HANDLE | handle is not valid. |
BASS_ERROR_ALREADY | There is already a server set on the encoder. |
BASS_ERROR_ILLPARAM | port is not valid. |
BASS_ERROR_BUSY | The port is in use. |
BASS_ERROR_MEM | There is insufficient memory. |
BASS_ERROR_UNKNOWN | Some other mystery problem! |
Remarks
This function allows remote (or local) clients to receive the encoder's output by setting up a TCP server for them to connect to, using BASS_StreamCreateURL for example. Connections can be refused by the ENCODECLIENTPROC callback function, and already connected clients can be kicked with the BASS_Encode_ServerKick function.The server buffers the data that it receives from the encoder, and the data is then sent from the buffer to the connected clients. The buffer should be at least big enough to account for the time that it takes for the clients to receive the data. If a client falls too far behind (beyond the buffer length), it will miss some data. When a client connects, buffered data can be "burst" to the client, allowing it to prebuffer and begin playback more quickly.
An encoder needs to be started, but with no data yet sent to it, before using this function to setup the 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.
Platform-specific
This function is not available on Windows CE.Example
Start encoding a stereo 44100hz channel to 128kb/s MP3, and start a server on port 8000 with a fully burstable 4 second (64KB) buffer.HENCODE encoder=BASS_Encode_Start(channel, "lame -r -s 44100 -b 128 -", BASS_ENCODE_NOHEAD, NULL, 0); // setup the encoder BASS_Encode_ServerInit(encoder, "8000", 64000, 64000, 0, NULL, NULL); // start the server
Start encoding a stereo 44100hz channel to 160kb/s OGG, and start a server on any available port on the loopback address (127.0.0.1) with a fully burstable 2 second (40KB) buffer.
HENCODE encoder=BASS_Encode_Start(channel, "oggenc -r -R 44100 -M 160 -m 160 -", BASS_ENCODE_NOHEAD, NULL, 0); // setup the encoder DWORD port=BASS_Encode_ServerInit(encoder, "127.0.0.1", 40000, 40000, 0, NULL, NULL); // start the server