[Mplayerxp-cvslog] SF.net SVN: mplayerxp:[571] mplayerxp/libmpstream2
Brought to you by:
olov
From: <nic...@us...> - 2012-12-17 17:36:08
|
Revision: 571 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=571&view=rev Author: nickols_k Date: 2012-12-17 17:36:01 +0000 (Mon, 17 Dec 2012) Log Message: ----------- add ASF MMST autodetection Modified Paths: -------------- mplayerxp/libmpstream2/network.cpp mplayerxp/libmpstream2/network.h mplayerxp/libmpstream2/network_asf_mmst.cpp mplayerxp/libmpstream2/network_asf_mmst.h mplayerxp/libmpstream2/network_rtsp.cpp mplayerxp/libmpstream2/s_rtsp.cpp mplayerxp/libmpstream2/s_udp.cpp Modified: mplayerxp/libmpstream2/network.cpp =================================================================== --- mplayerxp/libmpstream2/network.cpp 2012-12-17 17:03:47 UTC (rev 570) +++ mplayerxp/libmpstream2/network.cpp 2012-12-17 17:36:01 UTC (rev 571) @@ -241,10 +241,7 @@ tcp.close(); } - if( http_hdr ) { - delete http_hdr; - networking.data = NULL; - } + if( http_hdr ) delete http_hdr; return pos; } @@ -254,8 +251,8 @@ Networking::~Networking() { if( url ) delete url; - if( buffer ) delete buffer ; - if( data ) delete data ; + if( buffer ) delete buffer; + if( data ) delete data; } // By using the protocol, the extension of the file or the content-type @@ -443,8 +440,7 @@ MSG_INFO("Can't connect with pnm, retrying with http.\n"); return NULL; } - } - else if( !strcasecmp( url->protocol, "rtsp")) { + } else if( !strcasecmp( url->protocol, "rtsp")) { if ((rc = RealRtsp_Networking::start( tcp, net_protocol )) == NULL) { MSG_INFO("Not a Realmedia rtsp url. Trying standard rtsp protocol.\n"); #ifdef STREAMING_LIVE_DOT_COM @@ -456,14 +452,21 @@ return NULL; #endif } - } - else if(!strcasecmp( url->protocol, "udp")) { + } else if(!strcasecmp( url->protocol, "udp")) { tcp.close(); rc = Rtp_Networking::start(tcp, net_protocol, 1); if(!rc) { MSG_ERR("rtp_networking_start(udp) failed\n"); return NULL; } + } else if(!strncasecmp(url->protocol, "mms", 3) || + !strncasecmp(url->protocol, "mmst", 4) || + !strncasecmp(url->protocol, "mmsu", 4)) { + rc=Asf_Mmst_Networking::start(tcp,net_protocol); + if(!rc) { + MSG_ERR("asf_mmst_networking_start() failed\n"); + return NULL; + } } else { // Send the appropriate HTTP request // Need to filter the network stream. Modified: mplayerxp/libmpstream2/network.h =================================================================== --- mplayerxp/libmpstream2/network.h 2012-12-17 17:03:47 UTC (rev 570) +++ mplayerxp/libmpstream2/network.h 2012-12-17 17:36:01 UTC (rev 571) @@ -71,22 +71,23 @@ virtual void fixup_cache(); virtual int bufferize(unsigned char *buffer, int size); - URL *url; - std::string mime; - networking_status status; - int buffering; // boolean - unsigned int prebuffer_size; - char *buffer; - unsigned int buffer_size; - unsigned int buffer_pos; - unsigned int bandwidth; // The downstream available virtual int read( Tcp& fd, char *buffer, int buffer_size) = 0; virtual int seek( Tcp& fd, off_t pos) = 0; - Opaque* data; + + std::string mime; + URL* url; + networking_status status; + unsigned int bandwidth; // The downstream available protected: Networking(); + unsigned int prebuffer_size; + int buffering; // boolean + char* buffer; + unsigned int buffer_size; + unsigned int buffer_pos; + Opaque* data; private: - static MPXP_Rc autodetectProtocol(network_protocol_t& protocol,Tcp& tcp); + static MPXP_Rc autodetectProtocol(network_protocol_t& protocol,Tcp& tcp); }; extern URL* check4proxies( URL* url ); Modified: mplayerxp/libmpstream2/network_asf_mmst.cpp =================================================================== --- mplayerxp/libmpstream2/network_asf_mmst.cpp 2012-12-17 17:03:47 UTC (rev 570) +++ mplayerxp/libmpstream2/network_asf_mmst.cpp 2012-12-17 17:36:01 UTC (rev 571) @@ -360,8 +360,7 @@ } - -static int get_media_packet (Tcp& tcp, int padding, Networking& stream_ctrl) { +int Asf_Mmst_Networking::get_media_packet (Tcp& tcp, int padding) { unsigned char pre_header[8]; unsigned char data[BUF_SIZE]; @@ -392,7 +391,7 @@ return 0; } - stream_ctrl.bufferize(data, padding); + bufferize(data, padding); } else { @@ -452,39 +451,35 @@ static int packet_length1; -static int asf_mmst_networking_read(Tcp& tcp, char *buffer, int size, Networking& stream_ctrl ) +int Asf_Mmst_Networking::read(Tcp& tcp, char *_buffer, int size) { - int len; + int len; - while( stream_ctrl.buffer_size==0 ) { - // buffer is empty - fill it! - int ret = get_media_packet(tcp, packet_length1, stream_ctrl); - if( ret<0 ) { - MSG_ERR("get_media_packet error : %s\n",strerror(errno)); - return -1; - } else if (ret==0) //EOF? - return ret; - } - - len = stream_ctrl.buffer_size-stream_ctrl.buffer_pos; - if(len>size) len=size; - memcpy( buffer, (stream_ctrl.buffer)+(stream_ctrl.buffer_pos), len ); - stream_ctrl.buffer_pos += len; - if( stream_ctrl.buffer_pos>=stream_ctrl.buffer_size ) { - delete stream_ctrl.buffer ; - stream_ctrl.buffer = NULL; - stream_ctrl.buffer_size = 0; - stream_ctrl.buffer_pos = 0; - } - return len; - + while( buffer_size==0 ) { + // buffer is empty - fill it! + int ret = get_media_packet(tcp, packet_length1); + if( ret<0 ) { + MSG_ERR("get_media_packet error : %s\n",strerror(errno)); + return -1; + } else if (ret==0) return ret; // EOF? + } + len = buffer_size-buffer_pos; + if(len>size) len=size; + memcpy( _buffer, buffer+buffer_pos, len ); + buffer_pos += len; + if( buffer_pos>=buffer_size ) { + delete buffer ; + buffer = NULL; + buffer_size = 0; + buffer_pos = 0; + } + return len; } -static int asf_mmst_networking_seek(Tcp& tcp, off_t pos, Networking& networking ) +int Asf_Mmst_Networking::seek(Tcp& tcp, off_t pos) { UNUSED(tcp); UNUSED(pos); - UNUSED(networking); return -1; } @@ -664,4 +659,6 @@ #endif return rv; } +Asf_Mmst_Networking::Asf_Mmst_Networking() {} +Asf_Mmst_Networking::~Asf_Mmst_Networking() {} } // namespace mpxp Modified: mplayerxp/libmpstream2/network_asf_mmst.h =================================================================== --- mplayerxp/libmpstream2/network_asf_mmst.h 2012-12-17 17:03:47 UTC (rev 570) +++ mplayerxp/libmpstream2/network_asf_mmst.h 2012-12-17 17:36:01 UTC (rev 571) @@ -14,6 +14,7 @@ private: Asf_Mmst_Networking(); int get_header (Tcp& tcp, uint8_t *header); + int get_media_packet (Tcp& tcp, int padding); }; } // namespace mpxp #endif Modified: mplayerxp/libmpstream2/network_rtsp.cpp =================================================================== --- mplayerxp/libmpstream2/network_rtsp.cpp 2012-12-17 17:03:47 UTC (rev 570) +++ mplayerxp/libmpstream2/network_rtsp.cpp 2012-12-17 17:36:01 UTC (rev 571) @@ -77,5 +77,8 @@ } Rtsp_Networking::Rtsp_Networking() {} -Rtsp_Networking::~Rtsp_Networking() {} +Rtsp_Networking::~Rtsp_Networking() { + Rtsp_Session* rtsp = static_cast<Rtsp_Session*>(data); + if (rtsp) rtsp->end(); +} } // namespace mpxp Modified: mplayerxp/libmpstream2/s_rtsp.cpp =================================================================== --- mplayerxp/libmpstream2/s_rtsp.cpp 2012-12-17 17:03:47 UTC (rev 570) +++ mplayerxp/libmpstream2/s_rtsp.cpp 2012-12-17 17:36:01 UTC (rev 571) @@ -70,8 +70,6 @@ void Rtsp_Stream_Interface::close() { - Rtsp_Session* rtsp = static_cast<Rtsp_Session*>(networking->data); - if (rtsp) rtsp->end (); delete networking; networking=NULL; } Modified: mplayerxp/libmpstream2/s_udp.cpp =================================================================== --- mplayerxp/libmpstream2/s_udp.cpp 2012-12-17 17:03:47 UTC (rev 570) +++ mplayerxp/libmpstream2/s_udp.cpp 2012-12-17 17:36:01 UTC (rev 571) @@ -43,7 +43,7 @@ virtual off_t sector_size() const; virtual std::string mime_type() const; private: - MPXP_Rc start (unsigned); + MPXP_Rc start (URL*,unsigned); Networking* networking; Udp udp; @@ -77,18 +77,19 @@ networking=NULL; } -MPXP_Rc Udp_Stream_Interface::start (unsigned bandwidth) +MPXP_Rc Udp_Stream_Interface::start (URL* url,unsigned bandwidth) { if (!udp.established()) { udp.open(networking->url); if (!udp.established()) return MPXP_False; } tcp=udp.socket(); + network_protocol_t net_protocol; + net_protocol.url=url; + net_protocol.mime="application/octet-stream"; Nop_Networking* rv = new(zeromem) Nop_Networking; + rv->start(tcp,net_protocol); rv->bandwidth = bandwidth; - rv->prebuffer_size = 64 * 1024; /* 64 KBytes */ - rv->buffering = 0; - rv->status = networking_playing_e; return MPXP_Ok; } @@ -104,7 +105,7 @@ MSG_ERR("You must enter a port number for UDP streams!\n"); return MPXP_False; } - if (start(net_conf.bandwidth) != MPXP_Ok) { + if (start(url,net_conf.bandwidth) != MPXP_Ok) { MSG_ERR("udp_networking_start failed\n"); return MPXP_False; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |