summaryrefslogtreecommitdiffstats
path: root/stream/stream_rtp.c
diff options
context:
space:
mode:
authorben <ben@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-08-04 18:32:36 +0000
committerben <ben@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-08-04 18:32:36 +0000
commit2d79655938d71025999550912dd3b554cf4a3ca7 (patch)
tree94e302bcc2b2b894712b70052e47709e19227670 /stream/stream_rtp.c
parent2410b87a6408d91eb5c8db8d38af5aabfdca4d8a (diff)
downloadmpv-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
Diffstat (limited to 'stream/stream_rtp.c')
-rw-r--r--stream/stream_rtp.c114
1 files changed, 114 insertions, 0 deletions
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
+};