Creates a sample stream from an MP3, MP2, MP1, OGG, WAV, AIFF or plugin supported file on the internet, optionally receiving the downloaded data in a callback function.
HSTREAM BASS_StreamCreateURL( char *url, DWORD offset, DWORD flags, DOWNLOADPROC *proc, void *user );
url | URL of the file to stream. Should begin with "http://" or "https://" or "ftp://", or another add-on supported protocol. The URL can be followed by custom HTTP request headers to be sent to the server; the URL and each header should be terminated with a carriage return and line feed ("\r\n"). | ||||||||||||||||||||||
offset | File position to start streaming from. This is ignored by some servers, specifically when the length is unknown/undefined. | ||||||||||||||||||||||
flags | A combination of these flags.
| ||||||||||||||||||||||
proc | Callback function to receive the file as it is downloaded... NULL = no callback. | ||||||||||||||||||||||
user | User instance data to pass to the callback function. |
BASS_ERROR_INIT | BASS_Init has not been successfully called. |
BASS_ERROR_NOTAVAIL | The BASS_STREAM_AUTOFREE flag cannot be combined with the BASS_STREAM_DECODE flag. |
BASS_ERROR_NONET | No internet connection could be opened. Can be caused by a bad proxy setting. |
BASS_ERROR_ILLPARAM | url is not a valid URL. |
BASS_ERROR_PROTOCOL | The protocol in url is not supported. |
BASS_ERROR_SSL | SSL/HTTPS support is not available. See BASS_CONFIG_LIBSSL. |
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_DENIED | A valid username/password is required. |
BASS_ERROR_FILEOPEN | The file could not be opened. |
BASS_ERROR_FILEFORM | The file's format is not recognised/supported. |
BASS_ERROR_UNSTREAMABLE | The file cannot be streamed. This could be because an MP4 file's "mdat" atom comes before its "moov" atom. |
BASS_ERROR_NOTAUDIO | The file does not contain audio, or it also contains video and videos are disabled. |
BASS_ERROR_CODEC | The file uses a codec that is not available/supported. This can apply to WAV and AIFF files. |
BASS_ERROR_FORMAT | The sample format is not supported. |
BASS_ERROR_SPEAKER | The specified SPEAKER flags are invalid. |
BASS_ERROR_MEM | There is insufficient memory. |
BASS_ERROR_NO3D | Could not initialize 3D support. |
BASS_ERROR_UNKNOWN | Some other mystery problem! |
When playing the stream, BASS will stall the playback if there is insufficient data to continue playing. Playback will automatically be resumed when sufficient data has been downloaded. BASS_ChannelIsActive can be used to check if the playback is stalled, and the progress of the file download can be checked with BASS_StreamGetFilePosition.
If the server supports HTTP range requests (indicated in its response headers), BASS will automatically try to reconnect whenever the connection is lost before the end. Stopping/pausing should otherwise be avoided when the BASS_STREAM_BLOCK flag is set, to reduce the chance of disconnects from timing out.
When streaming from Shoutcast servers, metadata (track titles) may be sent by the server. The data can be retrieved with BASS_ChannelGetTags. A BASS_SYNC_META sync can also be set via BASS_ChannelSetSync to be informed when metadata is received. A BASS_SYNC_OGG_CHANGE sync can be used to be informed of when a new logical bitstream begins in an Icecast/OGG stream.
When using an offset, the file length returned by BASS_StreamGetFilePosition can be used to check that it was successful by comparing it with the original file length. Another way to check is to inspect the HTTP headers retrieved with BASS_ChannelGetTags.
When a plugin is used by a stream, there may be additional flags that are supported by it. Any such flags can be set after stream creation via BASS_ChannelFlags. BASS_ChannelGetInfo can be used to check which, if any, plugin is being used.
Custom HTTP request headers may be ignored by some plugins, notably BASSWMA.
On iOS 7 and above, this function can be used to open files in the iPod Library ("ipod-library://" URLs). The offset and proc and user parameters are ignored then, as are the BASS_STREAM_RESTRATE and BASS_STREAM_BLOCK and BASS_STREAM_STATUS flags. The files are played using CoreAudio codecs and BASS does not have direct access to the files itself, so the only tags available from BASS_ChannelGetTags will be BASS_TAG_CA_CODEC tags; the MPMediaItem properties could be used to get more info.
HSTREAM stream = BASS_StreamCreateURL("http://www.asite.com/afile.mp3", 0, 0, NULL, 0);
Stream an MP3 file with a cookie sent to the server.
HSTREAM stream = BASS_StreamCreateURL("http://www.asite.com/afile.mp3\r\nCookie: mycookie=blah\r\n", 0, 0, NULL, 0);