diff options
Diffstat (limited to 'libmpdemux/stream_livedotcom.c')
-rw-r--r-- | libmpdemux/stream_livedotcom.c | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/libmpdemux/stream_livedotcom.c b/libmpdemux/stream_livedotcom.c new file mode 100644 index 0000000000..f735ac00aa --- /dev/null +++ b/libmpdemux/stream_livedotcom.c @@ -0,0 +1,122 @@ + +#include "config.h" + +#ifdef MPLAYER_NETWORK +#include <unistd.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +#include "stream.h" +#include "network.h" +#include "demuxer.h" +#include "help_mp.h" + +#ifdef STREAMING_LIVE_DOT_COM + +extern int network_bandwidth; + +static int _rtsp_streaming_seek(int fd, off_t pos, streaming_ctrl_t* streaming_ctrl) { + return -1; // For now, we don't handle RTSP stream seeking +} + +static int rtsp_streaming_start(stream_t* stream) { + stream->streaming_ctrl->streaming_seek = _rtsp_streaming_seek; + return 0; +} + + +static int open_live_rtsp_sip(stream_t *stream,int mode, void* opts, int* file_format) { + URL_t *url; + + stream->streaming_ctrl = streaming_ctrl_new(); + if( stream->streaming_ctrl==NULL ) { + return STREAM_ERROR; + } + stream->streaming_ctrl->bandwidth = network_bandwidth; + url = url_new(stream->url); + stream->streaming_ctrl->url = check4proxies(url); + //url_free(url); + + mp_msg(MSGT_OPEN, MSGL_INFO, "STREAM_LIVEDOTCOM, URL: %s\n", stream->url); + + if(rtsp_streaming_start(stream) < 0) { + mp_msg(MSGT_NETWORK,MSGL_ERR,"rtsp_streaming_start failed\n"); + goto fail; + } + + *file_format = DEMUXER_TYPE_RTP; + stream->type = STREAMTYPE_STREAM; + return STREAM_OK; + +fail: + streaming_ctrl_free( stream->streaming_ctrl ); + stream->streaming_ctrl = NULL; + return STREAM_ERROR; +} + +static int open_live_sdp(stream_t *stream,int mode, void* opts, int* file_format) { + FILE *f; + char *filename = stream->url; + off_t len; + char* sdpDescription; + ssize_t numBytesRead; + + if(strncmp("sdp://",filename,6) == 0) { + filename += 6; +#if defined(__CYGWIN__) || defined(__MINGW32__) + f = open(filename,O_RDONLY|O_BINARY); +#else + f = open(filename,O_RDONLY); +#endif + if(f < 0) { + mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_FileNotFound,filename); + return STREAM_ERROR; + } + + len=lseek(f,0,SEEK_END); + lseek(f,0,SEEK_SET); + if(len == -1) + return STREAM_ERROR; + + sdpDescription = (char*)malloc(len+1); + if(sdpDescription == NULL) return STREAM_ERROR; + numBytesRead = read(f, sdpDescription, len); + if(numBytesRead != len) { + free(sdpDescription); + return STREAM_ERROR; + } + sdpDescription[len] = '\0'; // to be safe + stream->priv = sdpDescription; + + stream->type = STREAMTYPE_SDP; + *file_format = DEMUXER_TYPE_RTP; + return STREAM_OK; + } +} + + +stream_info_t stream_info_rtsp_sip = { + "Standard rtsp and sip", + "rtsp and sip", + "Ross Finlayson", + "uses lve.com streaming library", + open_live_rtsp_sip, + {"rtsp", "sip", NULL }, + NULL, + 0 // Urls are an option string +}; + +stream_info_t stream_info_sdp = { + "Sdp stream descriptor", + "sdp", + "Ross Finlayson", + "uses live.com streaming library", + open_live_sdp, + {"sdp", NULL }, + NULL, + 0 // Urls are an option string +}; + +#endif +#endif |