CryNative implementation of the shout source protocols * for icecast and shoutcast.
* * Cry implements the protocols used to connect and send source data to * icecast2 and shoutcast servers. * * It is a low-level implementation that minimally manages source * connections. In particular, it does not handle synchronisation, unlike * the main implementation libshout. Hence, the task of sending audio data * to the streaming server at real time rate is left to the application.
and transport =
< name : string
; protocol : string
; default_port : int
; connect :
?bind_address:string ->
?timeout:float ->
?prefer:[ `System_default | `Ipv4 | `Ipv6 ] ->
string ->
int ->
socket >exception Error of errorval unix_connect :
?bind_address:string ->
?timeout:float ->
?prefer:[ `System_default | `Ipv4 | `Ipv6 ] ->
string ->
int ->
Unix.file_descrBase unix connect
val unix_transport : transportUnix transport and socket.
val unix_socket : Unix.file_descr -> socketPossible protocols. Icy is the (undocumented) shoutcast source protocol. * Http is the icecast2 source protocol. * * Ogg streaming is only possible with Http. Any headerless format, * (e.g. mpeg containers), should work with both protocols, * provided you set the correct content-type (mime) for the source.
val string_of_protocol : protocol -> stringReturn a string representation of a protocol.
val ogg_application : content_typeGeneral mime type for ogg data.
val ogg_audio : content_typeMime type for audio data encapsulated using ogg.
val ogg_video : content_typeMime type for video data encapsulated using ogg.
val mpeg : content_typeMime type for mpeg audio data (mp3).
val content_type_of_string : string -> content_typeCreate a mime type from a string (e.g. "audio/aacp")
val string_of_content_type : content_type -> stringGet the string representation of a mime type.
Type for a mount point. Icy_id are for Shoutcast v2 * sid. For Shoutcast v1, use Icy_id 1.
type connection = {mount : mount;user : string;password : string;host : string;port : int;chunked : bool;content_type : content_type;protocol : protocol;headers : (string, string) Stdlib.Hashtbl.t;}Type for a source connection. * * headers is a hash table containing the headers. * See connection function for more details.
val string_of_connection : connection -> stringReturns a JSON string representation of a connection.
Type for audio informations. Used for connection headers. * See audio_info function for more details.
Type for the status of a handler.
val create :
?bind_address:string ->
?connection_timeout:float ->
?timeout:float ->
?transport:transport ->
unit ->
tCreate a new handler. * * bind is not used by default (system default). * timeout is 30. by default.
val get_icy_cap : t -> boolGet a handler's ICY capabilities. * For the Http protocol, this is always true. * For the Icy protocol, this is detected upon connecting.
val get_connection_data : t -> connection_dataGet data associated with a connection. Use it only if you know * what you are doing. * * Raises: Error Not_connected if not connected.
val audio_info :
?samplerate:int ->
?channels:int ->
?quality:float ->
?bitrate:int ->
unit ->
audio_infoCreate a new audio_info value, * filed with given values.
val connection :
?user_agent:string ->
?name:string ->
?genre:string ->
?url:string ->
?public:bool ->
?audio_info:audio_info ->
?description:string ->
?host:string ->
?port:int ->
?chunked:bool ->
?password:string ->
?protocol:protocol ->
?user:string ->
mount:mount ->
content_type:content_type ->
unit ->
connectionCreate a new connection value * with default values. * * mount is mandatory when using the Http protocol. * icy_id is mandatory to support multiple shoutcast sources * on shoutcast v2. * * host is "localhost" by default. * password is "hackme" by default. * user is "source" by default. Change user only if you know * what your are doing. * protocol is Http by default. * port is 8000 by default. * chunked is false by default and only works with HTTP/1.1-capable * servers. * * The list of preset headers for Http connections is: * "User-Agent", "ice-name", "ice-genre", * "ice-url", "ice-public", "ice-audio-info", * "ice-description". * * The list of preset headers for Icy connections is: * "User-Agent", "icy-name", "icy-url", "icy-pub", * "icy-genre", "icy-br". * * Additionally, you can also add: * "icy-irc", "icy-icq" and "icy-aim" but these are not added * by this function.
val connect : t -> connection -> unitConnect a handler.
Update metadata on a handler. Useful only for non-ogg data format, * and if icy_cap is true for Icy connections. * * For Icy protocol, the relevant metadata are only "song" * and "url". * * Raises: Error Not_connected * if not connected.
val manual_update_metadata :
host:string ->
port:int ->
protocol:protocol ->
user:string ->
password:string ->
mount:mount ->
?connection_timeout:float ->
?timeout:float ->
?headers:(string, string) Stdlib.Hashtbl.t ->
?bind_address:string ->
?charset:string ->
?transport:transport ->
metadata ->
unitManually update metadata on any source without necessarily * being connected to it for streaming. * * Optional timeout is 30. by default. * * Use it only if you know what you are doing !
val send : ?offset:int -> ?length:int -> t -> string -> unitSend data to a source connection. * * Raises: Error Not_connected * if not connected.
val close : t -> unitClose a source connection. * * Raises: Error Not_connected * if not connected.