diff options
author | ben <ben@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-08-04 18:32:36 +0000 |
---|---|---|
committer | ben <ben@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-08-04 18:32:36 +0000 |
commit | 2d79655938d71025999550912dd3b554cf4a3ca7 (patch) | |
tree | 94e302bcc2b2b894712b70052e47709e19227670 | |
parent | 2410b87a6408d91eb5c8db8d38af5aabfdca4d8a (diff) | |
download | mpv-2d79655938d71025999550912dd3b554cf4a3ca7.tar.bz2 mpv-2d79655938d71025999550912dd3b554cf4a3ca7.tar.xz |
split rtp stack, udp input layer and rtp input layer from rtp.c
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@19319 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r-- | stream/Makefile | 2 | ||||
-rw-r--r-- | stream/rtp.c | 83 | ||||
-rw-r--r-- | stream/rtp.h | 1 | ||||
-rw-r--r-- | stream/stream.c | 6 | ||||
-rw-r--r-- | stream/stream_rtp.c | 114 | ||||
-rw-r--r-- | stream/stream_udp.c | 107 |
6 files changed, 229 insertions, 84 deletions
diff --git a/stream/Makefile b/stream/Makefile index 72ad1a0ce9..31872b2ada 100644 --- a/stream/Makefile +++ b/stream/Makefile @@ -87,6 +87,8 @@ SRCS += asf_streaming.c \ pnm.c \ rtp.c \ stream_rtsp.c \ + stream_rtp.c \ + stream_udp.c \ SRCS += realrtsp/asmrp.c \ realrtsp/real.c \ diff --git a/stream/rtp.c b/stream/rtp.c index 4309175e97..d425375eb2 100644 --- a/stream/rtp.c +++ b/stream/rtp.c @@ -30,7 +30,6 @@ #define DEBUG 1 #include "rtp.h" -extern int network_bandwidth; #define DEBUG 1 @@ -205,7 +204,7 @@ int read_rtp_from_server(int fd, char *buffer, int length) { } // Start listening on a UDP port. If multicast, join the group. -static int rtp_open_socket( URL_t *url ) { +int rtp_open_socket( URL_t *url ) { int socket_server_fd, rxsockbufsz; int err, err_len; fd_set set; @@ -315,36 +314,6 @@ err_out: return -1; } -static int rtp_streaming_read( int fd, char *buffer, int size, streaming_ctrl_t *streaming_ctrl ) { - return read_rtp_from_server( fd, buffer, size ); -} - -static int rtp_streaming_start( stream_t *stream, int raw_udp ) { - streaming_ctrl_t *streaming_ctrl; - int fd; - - if( stream==NULL ) return -1; - streaming_ctrl = stream->streaming_ctrl; - fd = stream->fd; - - if( fd<0 ) { - fd = rtp_open_socket( (streaming_ctrl->url) ); - if( fd<0 ) return -1; - stream->fd = fd; - } - - if(raw_udp) - streaming_ctrl->streaming_read = nop_streaming_read; - else - streaming_ctrl->streaming_read = rtp_streaming_read; - streaming_ctrl->streaming_seek = nop_streaming_seek; - streaming_ctrl->prebuffer_size = 64*1024; // 64 KBytes - streaming_ctrl->buffering = 0; - streaming_ctrl->status = streaming_playing_e; - return 0; -} - - static int getrtp2(int fd, struct rtpheader *rh, char** data, int* lengthData) { static char buf[1600]; unsigned int intP; @@ -382,53 +351,3 @@ static int getrtp2(int fd, struct rtpheader *rh, char** data, int* lengthData) { return(0); } - - -static int open_s(stream_t *stream,int mode, void* opts, int* file_format) { - URL_t *url; - int udp = 0; - - mp_msg(MSGT_OPEN, MSGL_INFO, "STREAM_RTP, URL: %s\n", stream->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); - - if( url->port==0 ) { - mp_msg(MSGT_NETWORK,MSGL_ERR,"You must enter a port number for RTP and UDP streams!\n"); - goto fail; - } - if(!strncmp(stream->url, "udp", 3)) - udp = 1; - - if(rtp_streaming_start(stream, udp) < 0) { - mp_msg(MSGT_NETWORK,MSGL_ERR,"rtp_streaming_start(rtp) failed\n"); - goto fail; - } - - stream->type = STREAMTYPE_STREAM; - fixup_network_stream_cache(stream); - return STREAM_OK; - -fail: - streaming_ctrl_free( stream->streaming_ctrl ); - stream->streaming_ctrl = NULL; - return STREAM_UNSUPORTED; -} - - -stream_info_t stream_info_rtp_udp = { - "mpeg rtp and upd streaming", - "rtp and udp", - "Dave Chapman", - "native rtp support", - open_s, - {"rtp", "udp", NULL}, - NULL, - 0 // Urls are an option string -}; - - diff --git a/stream/rtp.h b/stream/rtp.h index c244eff2f4..f961553b3d 100644 --- a/stream/rtp.h +++ b/stream/rtp.h @@ -34,5 +34,6 @@ struct rtpheader { /* in network byte order */ static int getrtp2(int fd, struct rtpheader *rh, char** data, int* lengthData); int read_rtp_from_server(int fd, char *buffer, int length); +int rtp_open_socket (URL_t *url); #endif diff --git a/stream/stream.c b/stream/stream.c index 3c59d4cbb0..5deb6daa4a 100644 --- a/stream/stream.c +++ b/stream/stream.c @@ -47,7 +47,8 @@ extern stream_info_t stream_info_netstream; extern stream_info_t stream_info_pnm; extern stream_info_t stream_info_asf; extern stream_info_t stream_info_rtsp; -extern stream_info_t stream_info_rtp_udp; +extern stream_info_t stream_info_rtp; +extern stream_info_t stream_info_udp; extern stream_info_t stream_info_http1; extern stream_info_t stream_info_http2; #endif @@ -102,7 +103,8 @@ stream_info_t* auto_open_streams[] = { &stream_info_sdp, &stream_info_rtsp_sip, #endif - &stream_info_rtp_udp, + &stream_info_rtp, + &stream_info_udp, &stream_info_http2, #endif #ifdef HAS_DVBIN_SUPPORT diff --git a/stream/stream_rtp.c b/stream/stream_rtp.c new file mode 100644 index 0000000000..cf1635bf6a --- /dev/null +++ b/stream/stream_rtp.c @@ -0,0 +1,114 @@ +/* + * Copyright (C) 2006 Benjamin Zores + * Stream layer for MPEG over RTP, based on previous work from Dave Chapman + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "config.h" + +#include <stdlib.h> +#include <string.h> + +#include "stream.h" +#include "url.h" +#include "rtp.h" + +static int +rtp_streaming_read (int fd, char *buffer, + int size, streaming_ctrl_t *streaming_ctrl) +{ + return read_rtp_from_server (fd, buffer, size); +} + +static int +rtp_streaming_start (stream_t *stream) +{ + streaming_ctrl_t *streaming_ctrl; + int fd; + + if (!stream) + return -1; + + streaming_ctrl = stream->streaming_ctrl; + fd = stream->fd; + + if (fd < 0) + { + fd = rtp_open_socket (streaming_ctrl->url); + if (fd < 0) + return -1; + stream->fd = fd; + } + + streaming_ctrl->streaming_read = rtp_streaming_read; + streaming_ctrl->streaming_seek = nop_streaming_seek; + streaming_ctrl->prebuffer_size = 64 * 1024; /* 64 KBytes */ + streaming_ctrl->buffering = 0; + streaming_ctrl->status = streaming_playing_e; + + return 0; +} + +static int +rtp_stream_open (stream_t *stream, int mode, void *opts, int *file_format) +{ + URL_t *url; + extern int network_bandwidth; + + mp_msg (MSGT_OPEN, MSGL_INFO, "STREAM_RTP, URL: %s\n", stream->url); + stream->streaming_ctrl = streaming_ctrl_new (); + if (!stream->streaming_ctrl) + return STREAM_ERROR; + + stream->streaming_ctrl->bandwidth = network_bandwidth; + url = url_new (stream->url); + stream->streaming_ctrl->url = check4proxies (url); + + if (url->port == 0) + { + mp_msg (MSGT_NETWORK, MSGL_ERR, + "You must enter a port number for RTP streams!\n"); + streaming_ctrl_free (stream->streaming_ctrl); + stream->streaming_ctrl = NULL; + + return STREAM_UNSUPORTED; + } + + if (rtp_streaming_start (stream) < 0) + { + mp_msg (MSGT_NETWORK, MSGL_ERR, "rtp_streaming_start failed\n"); + streaming_ctrl_free (stream->streaming_ctrl); + stream->streaming_ctrl = NULL; + + return STREAM_UNSUPORTED; + } + + stream->type = STREAMTYPE_STREAM; + fixup_network_stream_cache (stream); + + return STREAM_OK; +} + +stream_info_t stream_info_rtp = { + "MPEG over RTP streaming", + "rtp", + "Dave Chapman, Benjamin Zores", + "native rtp support", + rtp_stream_open, + { "rtp", NULL}, + NULL, + 0 // Urls are an option string +}; diff --git a/stream/stream_udp.c b/stream/stream_udp.c new file mode 100644 index 0000000000..97b0e40f6c --- /dev/null +++ b/stream/stream_udp.c @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2006 Benjamin Zores + * Stream layer for MPEG over UDP, based on previous work from Dave Chapman + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "config.h" + +#include <stdlib.h> +#include <string.h> + +#include "stream.h" +#include "url.h" +#include "rtp.h" + +static int +udp_streaming_start (stream_t *stream) +{ + streaming_ctrl_t *streaming_ctrl; + int fd; + + if (!stream) + return -1; + + streaming_ctrl = stream->streaming_ctrl; + fd = stream->fd; + + if (fd < 0) + { + fd = rtp_open_socket (streaming_ctrl->url); + if (fd < 0) + return -1; + stream->fd = fd; + } + + streaming_ctrl->streaming_read = nop_streaming_read; + streaming_ctrl->streaming_seek = nop_streaming_seek; + streaming_ctrl->prebuffer_size = 64 * 1024; /* 64 KBytes */ + streaming_ctrl->buffering = 0; + streaming_ctrl->status = streaming_playing_e; + + return 0; +} + +static int +udp_stream_open (stream_t *stream, int mode, void *opts, int *file_format) +{ + URL_t *url; + extern int network_bandwidth; + + mp_msg (MSGT_OPEN, MSGL_INFO, "STREAM_UDP, URL: %s\n", stream->url); + stream->streaming_ctrl = streaming_ctrl_new (); + if (!stream->streaming_ctrl) + return STREAM_ERROR; + + stream->streaming_ctrl->bandwidth = network_bandwidth; + url = url_new (stream->url); + stream->streaming_ctrl->url = check4proxies (url); + + if (url->port == 0) + { + mp_msg (MSGT_NETWORK, MSGL_ERR, + "You must enter a port number for UDP streams!\n"); + streaming_ctrl_free (stream->streaming_ctrl); + stream->streaming_ctrl = NULL; + + return STREAM_UNSUPORTED; + } + + if (udp_streaming_start (stream) < 0) + { + mp_msg (MSGT_NETWORK, MSGL_ERR, "udp_streaming_start failed\n"); + streaming_ctrl_free (stream->streaming_ctrl); + stream->streaming_ctrl = NULL; + + return STREAM_UNSUPORTED; + } + + stream->type = STREAMTYPE_STREAM; + fixup_network_stream_cache (stream); + + return STREAM_OK; +} + +stream_info_t stream_info_udp = { + "MPEG over UDP streaming", + "udp", + "Dave Chapman, Benjamin Zores", + "native udp support", + udp_stream_open, + { "udp", NULL}, + NULL, + 0 // Urls are an option string +}; |