mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-11 01:45:33 +00:00
gst/rtsp/URLS: Added some test URLS.
Original commit message from CVS: * gst/rtsp/URLS: Added some test URLS. * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream), (gst_rtspsrc_loop), (gst_rtspsrc_open): * gst/rtsp/gstrtspsrc.h: When creating streams, give access to the complete SDP. Fix some leaks. Collect and merge global stream properties in stream caps. Preliminary support for WMServer. * gst/rtsp/rtspconnection.c: (rtsp_connection_create), (rtsp_connection_connect), (rtsp_connection_read), (read_body), (rtsp_connection_receive): * gst/rtsp/rtspconnection.h: Make connection interruptable. Refactor to make it reconnectable. Don't fail on short reads when reading data packets. * gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_set_port), (rtsp_url_get_port): * gst/rtsp/rtspurl.h: Add methods for getting/setting the port. * gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n), (sdp_message_get_attribute_val), (sdp_media_get_attribute), (sdp_media_get_attribute_val_n), (sdp_media_get_attribute_val), (sdp_media_get_format), (sdp_parse_line), (sdp_message_parse_buffer): Fix headers. Add methods for getting multiple attributes with the same name. Increase buffer size when parsing. Fix parsing of a=foo fields. * gst/rtsp/test.c: (main): Update to new connection API. * gst/rtsp/rtspmessage.c: (rtsp_message_new_response), (rtsp_message_init_response), (rtsp_message_init_data), (rtsp_message_unset), (rtsp_message_free), (rtsp_message_dump): * gst/rtsp/rtspmessage.h: * gst/rtsp/rtsptransport.c: (rtsp_transport_free): * gst/rtsp/rtsptransport.h: * gst/rtsp/sdp.h: * gst/rtsp/sdpmessage.h: * gst/rtsp/gstrtsp.c: * gst/rtsp/gstrtsp.h: * gst/rtsp/gstrtpdec.c: * gst/rtsp/gstrtpdec.h: * gst/rtsp/rtsp.h: * gst/rtsp/rtspdefs.c: * gst/rtsp/rtspdefs.h: Dual licensed under MIT and LGPL now.
This commit is contained in:
parent
a7d7309e18
commit
a365a29c77
23 changed files with 1003 additions and 202 deletions
56
ChangeLog
56
ChangeLog
|
@ -1,3 +1,59 @@
|
||||||
|
2006-09-20 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
|
* gst/rtsp/URLS:
|
||||||
|
Added some test URLS.
|
||||||
|
|
||||||
|
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
|
||||||
|
(gst_rtspsrc_loop), (gst_rtspsrc_open):
|
||||||
|
* gst/rtsp/gstrtspsrc.h:
|
||||||
|
When creating streams, give access to the complete SDP.
|
||||||
|
Fix some leaks.
|
||||||
|
Collect and merge global stream properties in stream caps.
|
||||||
|
Preliminary support for WMServer.
|
||||||
|
|
||||||
|
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
|
||||||
|
(rtsp_connection_connect), (rtsp_connection_read), (read_body),
|
||||||
|
(rtsp_connection_receive):
|
||||||
|
* gst/rtsp/rtspconnection.h:
|
||||||
|
Make connection interruptable.
|
||||||
|
Refactor to make it reconnectable.
|
||||||
|
Don't fail on short reads when reading data packets.
|
||||||
|
|
||||||
|
* gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_set_port),
|
||||||
|
(rtsp_url_get_port):
|
||||||
|
* gst/rtsp/rtspurl.h:
|
||||||
|
Add methods for getting/setting the port.
|
||||||
|
|
||||||
|
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
|
||||||
|
(sdp_message_get_attribute_val), (sdp_media_get_attribute),
|
||||||
|
(sdp_media_get_attribute_val_n), (sdp_media_get_attribute_val),
|
||||||
|
(sdp_media_get_format), (sdp_parse_line),
|
||||||
|
(sdp_message_parse_buffer):
|
||||||
|
Fix headers.
|
||||||
|
Add methods for getting multiple attributes with the same name.
|
||||||
|
Increase buffer size when parsing.
|
||||||
|
Fix parsing of a=foo fields.
|
||||||
|
|
||||||
|
* gst/rtsp/test.c: (main):
|
||||||
|
Update to new connection API.
|
||||||
|
|
||||||
|
* gst/rtsp/rtspmessage.c: (rtsp_message_new_response),
|
||||||
|
(rtsp_message_init_response), (rtsp_message_init_data),
|
||||||
|
(rtsp_message_unset), (rtsp_message_free), (rtsp_message_dump):
|
||||||
|
* gst/rtsp/rtspmessage.h:
|
||||||
|
* gst/rtsp/rtsptransport.c: (rtsp_transport_free):
|
||||||
|
* gst/rtsp/rtsptransport.h:
|
||||||
|
* gst/rtsp/sdp.h:
|
||||||
|
* gst/rtsp/sdpmessage.h:
|
||||||
|
* gst/rtsp/gstrtsp.c:
|
||||||
|
* gst/rtsp/gstrtsp.h:
|
||||||
|
* gst/rtsp/gstrtpdec.c:
|
||||||
|
* gst/rtsp/gstrtpdec.h:
|
||||||
|
* gst/rtsp/rtsp.h:
|
||||||
|
* gst/rtsp/rtspdefs.c:
|
||||||
|
* gst/rtsp/rtspdefs.h:
|
||||||
|
Dual licensed under MIT and LGPL now.
|
||||||
|
|
||||||
2006-09-19 Wim Taymans <wim@fluendo.com>
|
2006-09-19 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
* gst/rtsp/gstrtspsrc.c: (find_stream_by_pt),
|
* gst/rtsp/gstrtspsrc.c: (find_stream_by_pt),
|
||||||
|
|
13
gst/rtsp/URLS
Normal file
13
gst/rtsp/URLS
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
Some test URLS:
|
||||||
|
|
||||||
|
SVQ3 video:
|
||||||
|
rtsp://cumulus.creative.auckland.ac.nz/~shado/nelson_iv_512k.mov
|
||||||
|
|
||||||
|
ASF (audio/video):
|
||||||
|
rtsp://aod.mylisten.com/aod/8/03/069803_0903135.wma
|
||||||
|
rtsp://195.246.8.69/dur_pull_hi
|
||||||
|
rtsp://195.219.160.200/mcp?chid=25&pid=196&vid=2402201&br=800&tid=1&void=2844&muk=H1J4yFr0mJB
|
||||||
|
rtsp://a1174.v26630f.c26630.g.vm.akamaistream.net/7/1174/26630/361/od-video.msn.com/8/mbr/rs_perf_dilana_091206_finale9135.wmv
|
||||||
|
|
||||||
|
MP4V-ES/mpeg4-generic(ACC):
|
||||||
|
rtsp://vod.nwec.jp/quicktime/505.mov
|
|
@ -1,5 +1,5 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
* Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
|
* Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -16,6 +16,29 @@
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* Unless otherwise indicated, Source Code is licensed under MIT license.
|
||||||
|
* See further explanation attached in License Statement (distributed in the file
|
||||||
|
* LICENSE).
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
* of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
* so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
/* Element-Checklist-Version: 5 */
|
/* Element-Checklist-Version: 5 */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -30,7 +53,6 @@
|
||||||
* Last reviewed on 2006-06-20 (0.10.4)
|
* Last reviewed on 2006-06-20 (0.10.4)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "gstrtpdec.h"
|
#include "gstrtpdec.h"
|
||||||
|
|
||||||
GST_DEBUG_CATEGORY_STATIC (rtpdec_debug);
|
GST_DEBUG_CATEGORY_STATIC (rtpdec_debug);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
* Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
|
* Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -16,6 +16,29 @@
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* Unless otherwise indicated, Source Code is licensed under MIT license.
|
||||||
|
* See further explanation attached in License Statement (distributed in the file
|
||||||
|
* LICENSE).
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
* of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
* so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef __GST_RTPDEC_H__
|
#ifndef __GST_RTPDEC_H__
|
||||||
#define __GST_RTPDEC_H__
|
#define __GST_RTPDEC_H__
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
|
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
|
||||||
|
* <2006> Wim Taymans <wim@fluendo.com>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -16,6 +17,29 @@
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* Unless otherwise indicated, Source Code is licensed under MIT license.
|
||||||
|
* See further explanation attached in License Statement (distributed in the file
|
||||||
|
* LICENSE).
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
* of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
* so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
|
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
|
||||||
|
* <2006> Wim Taymans <wim@fluendo.com>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -16,7 +17,29 @@
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* Unless otherwise indicated, Source Code is licensed under MIT license.
|
||||||
|
* See further explanation attached in License Statement (distributed in the file
|
||||||
|
* LICENSE).
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
* of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
* so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef __GST_RTSP_H__
|
#ifndef __GST_RTSP_H__
|
||||||
#define __GST_RTSP_H__
|
#define __GST_RTSP_H__
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
* Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
|
* Copyright (C) <2005,2006> Wim Taymans <wim at fluendo dot com>
|
||||||
|
* <2006> Lutz Mueller <lutz at topfrose dot de>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -16,6 +17,29 @@
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* Unless otherwise indicated, Source Code is licensed under MIT license.
|
||||||
|
* See further explanation attached in License Statement (distributed in the file
|
||||||
|
* LICENSE).
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
* of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
* so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
/**
|
/**
|
||||||
* SECTION:element-rtspsrc
|
* SECTION:element-rtspsrc
|
||||||
*
|
*
|
||||||
|
@ -307,11 +331,17 @@ find_stream_by_pt (GstRTSPStream * stream, gconstpointer a)
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstRTSPStream *
|
static GstRTSPStream *
|
||||||
gst_rtspsrc_create_stream (GstRTSPSrc * src, SDPMedia * media)
|
gst_rtspsrc_create_stream (GstRTSPSrc * src, SDPMessage * sdp, gint idx)
|
||||||
{
|
{
|
||||||
GstRTSPStream *stream;
|
GstRTSPStream *stream;
|
||||||
gchar *control_url;
|
gchar *control_url;
|
||||||
gchar *payload;
|
gchar *payload;
|
||||||
|
SDPMedia *media;
|
||||||
|
|
||||||
|
/* get media, should not return NULL */
|
||||||
|
media = sdp_message_get_media (sdp, idx);
|
||||||
|
if (media == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
stream = g_new0 (GstRTSPStream, 1);
|
stream = g_new0 (GstRTSPStream, 1);
|
||||||
stream->parent = src;
|
stream->parent = src;
|
||||||
|
@ -891,6 +921,7 @@ gst_rtspsrc_loop (GstRTSPSrc * src)
|
||||||
guint size;
|
guint size;
|
||||||
GstFlowReturn ret = GST_FLOW_OK;
|
GstFlowReturn ret = GST_FLOW_OK;
|
||||||
GstCaps *caps = NULL;
|
GstCaps *caps = NULL;
|
||||||
|
GstBuffer *buf;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
GST_DEBUG_OBJECT (src, "doing receive");
|
GST_DEBUG_OBJECT (src, "doing receive");
|
||||||
|
@ -922,7 +953,7 @@ gst_rtspsrc_loop (GstRTSPSrc * src)
|
||||||
|
|
||||||
/* channels are not correct on some servers, do extra check */
|
/* channels are not correct on some servers, do extra check */
|
||||||
if (data[1] >= 200 && data[1] <= 204) {
|
if (data[1] >= 200 && data[1] <= 204) {
|
||||||
/* hmm RTCP message */
|
/* hmm RTCP message switch to the RTCP pad of the same stream. */
|
||||||
outpad = stream->rtpdecrtcp;
|
outpad = stream->rtpdecrtcp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -931,45 +962,58 @@ gst_rtspsrc_loop (GstRTSPSrc * src)
|
||||||
goto unknown_stream;
|
goto unknown_stream;
|
||||||
|
|
||||||
/* and chain buffer to internal element */
|
/* and chain buffer to internal element */
|
||||||
{
|
rtsp_message_steal_body (&response, &data, &size);
|
||||||
GstBuffer *buf;
|
|
||||||
|
|
||||||
rtsp_message_steal_body (&response, &data, &size);
|
/* strip the trailing \0 */
|
||||||
|
size -= 1;
|
||||||
|
|
||||||
/* strip the trailing \0 */
|
buf = gst_buffer_new ();
|
||||||
size -= 1;
|
GST_BUFFER_DATA (buf) = data;
|
||||||
|
GST_BUFFER_MALLOCDATA (buf) = data;
|
||||||
|
GST_BUFFER_SIZE (buf) = size;
|
||||||
|
|
||||||
buf = gst_buffer_new_and_alloc (size);
|
/* don't need message anymore */
|
||||||
GST_BUFFER_DATA (buf) = data;
|
rtsp_message_unset (&response);
|
||||||
GST_BUFFER_MALLOCDATA (buf) = data;
|
|
||||||
GST_BUFFER_SIZE (buf) = size;
|
|
||||||
|
|
||||||
if (caps)
|
if (caps)
|
||||||
gst_buffer_set_caps (buf, caps);
|
gst_buffer_set_caps (buf, caps);
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (src, "pushing data of size %d on channel %d", size,
|
GST_DEBUG_OBJECT (src, "pushing data of size %d on channel %d", size,
|
||||||
channel);
|
channel);
|
||||||
|
|
||||||
/* chain to the peer pad */
|
/* chain to the peer pad */
|
||||||
ret = gst_pad_chain (outpad, buf);
|
ret = gst_pad_chain (outpad, buf);
|
||||||
|
|
||||||
|
/* combine all stream flows */
|
||||||
|
ret = gst_rtspsrc_combine_flows (src, stream, ret);
|
||||||
|
if (ret != GST_FLOW_OK)
|
||||||
|
goto need_pause;
|
||||||
|
|
||||||
/* combine all stream flows */
|
|
||||||
ret = gst_rtspsrc_combine_flows (src, stream, ret);
|
|
||||||
if (ret != GST_FLOW_OK)
|
|
||||||
goto need_pause;
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* ERRORS */
|
/* ERRORS */
|
||||||
unknown_stream:
|
unknown_stream:
|
||||||
{
|
{
|
||||||
GST_DEBUG_OBJECT (src, "unknown stream on channel %d, ignored", channel);
|
GST_DEBUG_OBJECT (src, "unknown stream on channel %d, ignored", channel);
|
||||||
|
rtsp_message_unset (&response);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
receive_error:
|
receive_error:
|
||||||
{
|
{
|
||||||
GST_ELEMENT_ERROR (src, RESOURCE, READ,
|
switch (res) {
|
||||||
("Could not receive message."), (NULL));
|
case RTSP_ESYS:
|
||||||
|
GST_ELEMENT_ERROR (src, RESOURCE, READ,
|
||||||
|
("Could not receive message. (%d: %s)", res, strerror (errno)),
|
||||||
|
GST_ERROR_SYSTEM);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
GST_ELEMENT_ERROR (src, RESOURCE, READ,
|
||||||
|
("Could not receive message. (%d)", res), (NULL));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (src->debug)
|
||||||
|
rtsp_message_dump (&response);
|
||||||
|
rtsp_message_unset (&response);
|
||||||
ret = GST_FLOW_UNEXPECTED;
|
ret = GST_FLOW_UNEXPECTED;
|
||||||
goto need_pause;
|
goto need_pause;
|
||||||
}
|
}
|
||||||
|
@ -977,6 +1021,7 @@ invalid_length:
|
||||||
{
|
{
|
||||||
GST_ELEMENT_WARNING (src, RESOURCE, READ,
|
GST_ELEMENT_WARNING (src, RESOURCE, READ,
|
||||||
("Short message received."), (NULL));
|
("Short message received."), (NULL));
|
||||||
|
rtsp_message_unset (&response);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
need_pause:
|
need_pause:
|
||||||
|
@ -1175,10 +1220,15 @@ gst_rtspsrc_open (GstRTSPSrc * src)
|
||||||
if (G_UNLIKELY (src->url == NULL))
|
if (G_UNLIKELY (src->url == NULL))
|
||||||
goto no_url;
|
goto no_url;
|
||||||
|
|
||||||
/* open connection */
|
/* create connection */
|
||||||
GST_DEBUG_OBJECT (src, "opening connection (%s)...", src->location);
|
GST_DEBUG_OBJECT (src, "creating connection (%s)...", src->location);
|
||||||
if ((res = rtsp_connection_open (src->url, &src->connection)) < 0)
|
if ((res = rtsp_connection_create (src->url, &src->connection)) < 0)
|
||||||
goto could_not_open;
|
goto could_not_create;
|
||||||
|
|
||||||
|
/* connect */
|
||||||
|
GST_DEBUG_OBJECT (src, "connecting (%s)...", src->location);
|
||||||
|
if ((res = rtsp_connection_connect (src->connection)) < 0)
|
||||||
|
goto could_not_connect;
|
||||||
|
|
||||||
/* create OPTIONS */
|
/* create OPTIONS */
|
||||||
GST_DEBUG_OBJECT (src, "create options...");
|
GST_DEBUG_OBJECT (src, "create options...");
|
||||||
|
@ -1232,6 +1282,30 @@ gst_rtspsrc_open (GstRTSPSrc * src)
|
||||||
if (src->debug)
|
if (src->debug)
|
||||||
sdp_message_dump (&sdp);
|
sdp_message_dump (&sdp);
|
||||||
|
|
||||||
|
/* prepare global stream caps properties */
|
||||||
|
if (src->props)
|
||||||
|
gst_structure_remove_all_fields (src->props);
|
||||||
|
else
|
||||||
|
src->props = gst_structure_empty_new ("RTSP Properties");
|
||||||
|
|
||||||
|
/* FIXME, WMServer specific, move to extensions */
|
||||||
|
#define HEADER_PREFIX "data:application/vnd.ms.wms-hdr.asfv1;base64,"
|
||||||
|
{
|
||||||
|
gchar *config, *maxps;
|
||||||
|
|
||||||
|
for (i = 0; (config = sdp_message_get_attribute_val_n (&sdp, "pgmpu", i));
|
||||||
|
i++) {
|
||||||
|
if (g_str_has_prefix (config, HEADER_PREFIX)) {
|
||||||
|
config += strlen (HEADER_PREFIX);
|
||||||
|
gst_structure_set (src->props, "config", G_TYPE_STRING, config, NULL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
maxps = sdp_message_get_attribute_val (&sdp, "maxps");
|
||||||
|
if (maxps)
|
||||||
|
gst_structure_set (src->props, "maxps", G_TYPE_STRING, maxps, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
/* we initially allow all configured protocols. based on the replies from the
|
/* we initially allow all configured protocols. based on the replies from the
|
||||||
* server we narrow them down. */
|
* server we narrow them down. */
|
||||||
protocols = src->protocols;
|
protocols = src->protocols;
|
||||||
|
@ -1239,13 +1313,28 @@ gst_rtspsrc_open (GstRTSPSrc * src)
|
||||||
/* setup streams */
|
/* setup streams */
|
||||||
n_streams = sdp_message_medias_len (&sdp);
|
n_streams = sdp_message_medias_len (&sdp);
|
||||||
for (i = 0; i < n_streams; i++) {
|
for (i = 0; i < n_streams; i++) {
|
||||||
SDPMedia *media;
|
|
||||||
gchar *transports;
|
gchar *transports;
|
||||||
|
|
||||||
media = sdp_message_get_media (&sdp, i);
|
/* create stream from the media, can never return NULL */
|
||||||
|
stream = gst_rtspsrc_create_stream (src, &sdp, i);
|
||||||
|
|
||||||
/* create stream from the media */
|
/* merge global caps */
|
||||||
stream = gst_rtspsrc_create_stream (src, media);
|
if (stream->caps) {
|
||||||
|
guint j, num;
|
||||||
|
GstStructure *s;
|
||||||
|
|
||||||
|
s = gst_caps_get_structure (stream->caps, 0);
|
||||||
|
|
||||||
|
num = gst_structure_n_fields (src->props);
|
||||||
|
for (j = 0; j < num; j++) {
|
||||||
|
const gchar *name;
|
||||||
|
const GValue *val;
|
||||||
|
|
||||||
|
name = gst_structure_nth_field_name (src->props, j);
|
||||||
|
val = gst_structure_get_value (src->props, name);
|
||||||
|
gst_structure_set_value (s, name, val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* skip setup if we have no URL for it */
|
/* skip setup if we have no URL for it */
|
||||||
if (stream->setup_url == NULL)
|
if (stream->setup_url == NULL)
|
||||||
|
@ -1358,6 +1447,7 @@ gst_rtspsrc_open (GstRTSPSrc * src)
|
||||||
rtsp_transport_init (&transport);
|
rtsp_transport_init (&transport);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if we got here all was configured. We have dynamic pads so we notify that
|
/* if we got here all was configured. We have dynamic pads so we notify that
|
||||||
* we are done */
|
* we are done */
|
||||||
gst_element_no_more_pads (GST_ELEMENT_CAST (src));
|
gst_element_no_more_pads (GST_ELEMENT_CAST (src));
|
||||||
|
@ -1375,10 +1465,16 @@ no_url:
|
||||||
("No valid RTSP url was provided"), (NULL));
|
("No valid RTSP url was provided"), (NULL));
|
||||||
goto cleanup_error;
|
goto cleanup_error;
|
||||||
}
|
}
|
||||||
could_not_open:
|
could_not_create:
|
||||||
{
|
{
|
||||||
GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ_WRITE,
|
GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ_WRITE,
|
||||||
("Could not open connection."), (NULL));
|
("Could not create connection."), (NULL));
|
||||||
|
goto cleanup_error;
|
||||||
|
}
|
||||||
|
could_not_connect:
|
||||||
|
{
|
||||||
|
GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ_WRITE,
|
||||||
|
("Could not connect to server."), (NULL));
|
||||||
goto cleanup_error;
|
goto cleanup_error;
|
||||||
}
|
}
|
||||||
create_request_failed:
|
create_request_failed:
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
|
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
|
||||||
|
* <2006> Wim Taymans <wim@fluendo.com>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -16,7 +17,29 @@
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* Unless otherwise indicated, Source Code is licensed under MIT license.
|
||||||
|
* See further explanation attached in License Statement (distributed in the file
|
||||||
|
* LICENSE).
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
* of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
* so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef __GST_RTSPSRC_H__
|
#ifndef __GST_RTSPSRC_H__
|
||||||
#define __GST_RTSPSRC_H__
|
#define __GST_RTSPSRC_H__
|
||||||
|
@ -105,6 +128,7 @@ struct _GstRTSPSrc {
|
||||||
|
|
||||||
gint numstreams;
|
gint numstreams;
|
||||||
GList *streams;
|
GList *streams;
|
||||||
|
GstStructure *props;
|
||||||
|
|
||||||
gchar *location;
|
gchar *location;
|
||||||
RTSPUrl *url;
|
RTSPUrl *url;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
* Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
|
* Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -16,6 +16,29 @@
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* Unless otherwise indicated, Source Code is licensed under MIT license.
|
||||||
|
* See further explanation attached in License Statement (distributed in the file
|
||||||
|
* LICENSE).
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
* of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
* so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef __RTSP_H__
|
#ifndef __RTSP_H__
|
||||||
#define __RTSP_H__
|
#define __RTSP_H__
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
* Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
|
* Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -16,12 +16,37 @@
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* Unless otherwise indicated, Source Code is licensed under MIT license.
|
||||||
|
* See further explanation attached in License Statement (distributed in the file
|
||||||
|
* LICENSE).
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
* of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
* so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
|
||||||
/* we include this here to get the G_OS_* defines */
|
/* we include this here to get the G_OS_* defines */
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
@ -35,9 +60,27 @@
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#include "rtspconnection.h"
|
#include "rtspconnection.h"
|
||||||
|
|
||||||
|
/* the select call is also performed on the control sockets, that way
|
||||||
|
* we can send special commands to unlock or restart the select call */
|
||||||
|
#define CONTROL_RESTART 'R' /* restart the select call */
|
||||||
|
#define CONTROL_STOP 'S' /* stop the select call */
|
||||||
|
#define CONTROL_SOCKETS(conn) conn->control_sock
|
||||||
|
#define WRITE_SOCKET(conn) conn->control_sock[1]
|
||||||
|
#define READ_SOCKET(conn) conn->control_sock[0]
|
||||||
|
|
||||||
|
#define SEND_COMMAND(conn, command) \
|
||||||
|
G_STMT_START { \
|
||||||
|
unsigned char c; c = command; \
|
||||||
|
write (WRITE_SOCKET(conn), &c, 1); \
|
||||||
|
} G_STMT_END
|
||||||
|
|
||||||
|
#define READ_COMMAND(conn, command, res) \
|
||||||
|
G_STMT_START { \
|
||||||
|
res = read(READ_SOCKET(conn), &command, 1); \
|
||||||
|
} G_STMT_END
|
||||||
|
|
||||||
#ifdef G_OS_WIN32
|
#ifdef G_OS_WIN32
|
||||||
#define CLOSE_SOCKET(sock) closesocket(sock);
|
#define CLOSE_SOCKET(sock) closesocket(sock);
|
||||||
#else
|
#else
|
||||||
|
@ -61,7 +104,52 @@ inet_aton (const char *c, struct in_addr *paddr)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
RTSPResult
|
RTSPResult
|
||||||
rtsp_connection_open (RTSPUrl * url, RTSPConnection ** conn)
|
rtsp_connection_create (RTSPUrl * url, RTSPConnection ** conn)
|
||||||
|
{
|
||||||
|
gint ret;
|
||||||
|
RTSPConnection *newconn;
|
||||||
|
|
||||||
|
g_return_val_if_fail (url != NULL, RTSP_EINVAL);
|
||||||
|
g_return_val_if_fail (conn != NULL, RTSP_EINVAL);
|
||||||
|
|
||||||
|
if (url->protocol != RTSP_PROTO_TCP)
|
||||||
|
return RTSP_ENOTIMPL;
|
||||||
|
|
||||||
|
newconn = g_new (RTSPConnection, 1);
|
||||||
|
|
||||||
|
#ifdef G_OS_WIN32
|
||||||
|
/* This should work on UNIX too. PF_UNIX sockets replaced with pipe */
|
||||||
|
/* pipe( CONTROL_SOCKETS(newconn) ) */
|
||||||
|
if ((ret = pipe (CONTROL_SOCKETS (newconn))) < 0)
|
||||||
|
goto no_socket_pair;
|
||||||
|
#else
|
||||||
|
if ((ret =
|
||||||
|
socketpair (PF_UNIX, SOCK_STREAM, 0, CONTROL_SOCKETS (newconn))) < 0)
|
||||||
|
goto no_socket_pair;
|
||||||
|
|
||||||
|
fcntl (READ_SOCKET (newconn), F_SETFL, O_NONBLOCK);
|
||||||
|
fcntl (WRITE_SOCKET (newconn), F_SETFL, O_NONBLOCK);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
newconn->url = url;
|
||||||
|
newconn->cseq = 0;
|
||||||
|
newconn->session_id[0] = 0;
|
||||||
|
newconn->state = RTSP_STATE_INIT;
|
||||||
|
|
||||||
|
*conn = newconn;
|
||||||
|
|
||||||
|
return RTSP_OK;
|
||||||
|
|
||||||
|
/* ERRORS */
|
||||||
|
no_socket_pair:
|
||||||
|
{
|
||||||
|
g_free (newconn);
|
||||||
|
return RTSP_ESYS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RTSPResult
|
||||||
|
rtsp_connection_connect (RTSPConnection * conn)
|
||||||
{
|
{
|
||||||
gint fd;
|
gint fd;
|
||||||
struct sockaddr_in sin;
|
struct sockaddr_in sin;
|
||||||
|
@ -70,12 +158,12 @@ rtsp_connection_open (RTSPUrl * url, RTSPConnection ** conn)
|
||||||
gchar *ip;
|
gchar *ip;
|
||||||
struct in_addr addr;
|
struct in_addr addr;
|
||||||
gint ret;
|
gint ret;
|
||||||
|
guint16 port;
|
||||||
|
RTSPUrl *url;
|
||||||
|
|
||||||
g_return_val_if_fail (url != NULL, RTSP_EINVAL);
|
|
||||||
g_return_val_if_fail (conn != NULL, RTSP_EINVAL);
|
g_return_val_if_fail (conn != NULL, RTSP_EINVAL);
|
||||||
|
|
||||||
if (url->protocol != RTSP_PROTO_TCP)
|
url = conn->url;
|
||||||
return RTSP_ENOTIMPL;
|
|
||||||
|
|
||||||
/* first check if it already is an IP address */
|
/* first check if it already is an IP address */
|
||||||
if (inet_aton (url->host, &addr)) {
|
if (inet_aton (url->host, &addr)) {
|
||||||
|
@ -92,20 +180,25 @@ rtsp_connection_open (RTSPUrl * url, RTSPConnection ** conn)
|
||||||
ip = inet_ntoa (*(struct in_addr *) *addrs);
|
ip = inet_ntoa (*(struct in_addr *) *addrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
fd = socket (AF_INET, SOCK_STREAM, 0);
|
/* get the port from the url */
|
||||||
if (fd == -1)
|
rtsp_url_get_port (url, &port);
|
||||||
goto sys_error;
|
|
||||||
|
|
||||||
memset (&sin, 0, sizeof (sin));
|
memset (&sin, 0, sizeof (sin));
|
||||||
sin.sin_family = AF_INET; /* network socket */
|
sin.sin_family = AF_INET; /* network socket */
|
||||||
sin.sin_port = htons (url->port); /* on port */
|
sin.sin_port = htons (port); /* on port */
|
||||||
sin.sin_addr.s_addr = inet_addr (ip); /* on host ip */
|
sin.sin_addr.s_addr = inet_addr (ip); /* on host ip */
|
||||||
|
|
||||||
|
fd = socket (AF_INET, SOCK_STREAM, 0);
|
||||||
|
if (fd == -1)
|
||||||
|
goto sys_error;
|
||||||
|
|
||||||
ret = connect (fd, (struct sockaddr *) &sin, sizeof (sin));
|
ret = connect (fd, (struct sockaddr *) &sin, sizeof (sin));
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
goto sys_error;
|
goto sys_error;
|
||||||
|
|
||||||
return rtsp_connection_create (fd, conn);
|
conn->fd = fd;
|
||||||
|
|
||||||
|
return RTSP_OK;
|
||||||
|
|
||||||
sys_error:
|
sys_error:
|
||||||
{
|
{
|
||||||
|
@ -123,27 +216,6 @@ not_ip:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RTSPResult
|
|
||||||
rtsp_connection_create (gint fd, RTSPConnection ** conn)
|
|
||||||
{
|
|
||||||
RTSPConnection *newconn;
|
|
||||||
|
|
||||||
g_return_val_if_fail (conn != NULL, RTSP_EINVAL);
|
|
||||||
|
|
||||||
/* FIXME check fd, must be connected SOCK_STREAM */
|
|
||||||
|
|
||||||
newconn = g_new (RTSPConnection, 1);
|
|
||||||
|
|
||||||
newconn->fd = fd;
|
|
||||||
newconn->cseq = 0;
|
|
||||||
newconn->session_id[0] = 0;
|
|
||||||
newconn->state = RTSP_STATE_INIT;
|
|
||||||
|
|
||||||
*conn = newconn;
|
|
||||||
|
|
||||||
return RTSP_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
append_header (gint key, gchar * value, GString * str)
|
append_header (gint key, gchar * value, GString * str)
|
||||||
{
|
{
|
||||||
|
@ -408,11 +480,99 @@ parse_line (gchar * buffer, RTSPMessage * msg)
|
||||||
return RTSP_OK;
|
return RTSP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static RTSPResult
|
RTSPResult
|
||||||
read_body (gint fd, glong content_length, RTSPMessage * msg)
|
rtsp_connection_read (RTSPConnection * conn, gpointer data, guint size)
|
||||||
{
|
{
|
||||||
gchar *body, *bodyptr;
|
fd_set readfds;
|
||||||
gint to_read, r;
|
guint toread;
|
||||||
|
gint retval;
|
||||||
|
gint avail;
|
||||||
|
|
||||||
|
g_return_val_if_fail (conn != NULL, RTSP_EINVAL);
|
||||||
|
g_return_val_if_fail (data != NULL, RTSP_EINVAL);
|
||||||
|
|
||||||
|
if (size == 0)
|
||||||
|
return RTSP_OK;
|
||||||
|
|
||||||
|
toread = size;
|
||||||
|
|
||||||
|
/* if the call fails, just go in the select.. it should not fail. Else if
|
||||||
|
* there is enough data to read, skip the select call al together.*/
|
||||||
|
if (ioctl (conn->fd, FIONREAD, &avail) < 0)
|
||||||
|
avail = 0;
|
||||||
|
else if (avail >= toread)
|
||||||
|
goto do_read;
|
||||||
|
|
||||||
|
FD_ZERO (&readfds);
|
||||||
|
FD_SET (conn->fd, &readfds);
|
||||||
|
FD_SET (READ_SOCKET (conn), &readfds);
|
||||||
|
|
||||||
|
while (toread > 0) {
|
||||||
|
gint bytes;
|
||||||
|
|
||||||
|
do {
|
||||||
|
retval = select (FD_SETSIZE, &readfds, NULL, NULL, NULL);
|
||||||
|
} while ((retval == -1 && errno == EINTR));
|
||||||
|
|
||||||
|
if (retval == -1)
|
||||||
|
goto select_error;
|
||||||
|
|
||||||
|
if (FD_ISSET (READ_SOCKET (conn), &readfds)) {
|
||||||
|
/* read all stop commands */
|
||||||
|
while (TRUE) {
|
||||||
|
gchar command;
|
||||||
|
int res;
|
||||||
|
|
||||||
|
READ_COMMAND (conn, command, res);
|
||||||
|
if (res < 0) {
|
||||||
|
/* no more commands */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
goto stopped;
|
||||||
|
}
|
||||||
|
|
||||||
|
do_read:
|
||||||
|
/* if we get here there is activity on the real fd since the select
|
||||||
|
* completed and the control socket was not readable. */
|
||||||
|
bytes = read (conn->fd, data, toread);
|
||||||
|
|
||||||
|
if (bytes == 0) {
|
||||||
|
goto eof;
|
||||||
|
} else if (bytes < 0) {
|
||||||
|
if (errno != EAGAIN && errno != EINTR)
|
||||||
|
goto read_error;
|
||||||
|
} else {
|
||||||
|
toread -= bytes;
|
||||||
|
data += bytes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return RTSP_OK;
|
||||||
|
|
||||||
|
/* ERRORS */
|
||||||
|
select_error:
|
||||||
|
{
|
||||||
|
return RTSP_ESYS;
|
||||||
|
}
|
||||||
|
stopped:
|
||||||
|
{
|
||||||
|
return RTSP_EINTR;
|
||||||
|
}
|
||||||
|
eof:
|
||||||
|
{
|
||||||
|
return RTSP_EEOF;
|
||||||
|
}
|
||||||
|
read_error:
|
||||||
|
{
|
||||||
|
return RTSP_ESYS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static RTSPResult
|
||||||
|
read_body (RTSPConnection * conn, glong content_length, RTSPMessage * msg)
|
||||||
|
{
|
||||||
|
gchar *body;
|
||||||
|
RTSPResult res;
|
||||||
|
|
||||||
if (content_length <= 0) {
|
if (content_length <= 0) {
|
||||||
body = NULL;
|
body = NULL;
|
||||||
|
@ -422,29 +582,19 @@ read_body (gint fd, glong content_length, RTSPMessage * msg)
|
||||||
|
|
||||||
body = g_malloc (content_length + 1);
|
body = g_malloc (content_length + 1);
|
||||||
body[content_length] = '\0';
|
body[content_length] = '\0';
|
||||||
bodyptr = body;
|
|
||||||
to_read = content_length;
|
RTSP_CHECK (rtsp_connection_read (conn, body, content_length), read_error);
|
||||||
while (to_read > 0) {
|
|
||||||
r = read (fd, bodyptr, to_read);
|
|
||||||
if (r < 0) {
|
|
||||||
if (errno != EAGAIN && errno != EINTR)
|
|
||||||
goto read_error;
|
|
||||||
} else {
|
|
||||||
to_read -= r;
|
|
||||||
bodyptr += r;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
content_length += 1;
|
|
||||||
|
|
||||||
done:
|
done:
|
||||||
rtsp_message_set_body (msg, (guint8 *) body, content_length);
|
rtsp_message_take_body (msg, (guint8 *) body, content_length + 1);
|
||||||
|
|
||||||
return RTSP_OK;
|
return RTSP_OK;
|
||||||
|
|
||||||
|
/* ERRORS */
|
||||||
read_error:
|
read_error:
|
||||||
{
|
{
|
||||||
g_free (body);
|
g_free (body);
|
||||||
return RTSP_ESYS;
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -469,14 +619,9 @@ rtsp_connection_receive (RTSPConnection * conn, RTSPMessage * msg)
|
||||||
/* parse first line and headers */
|
/* parse first line and headers */
|
||||||
while (res == RTSP_OK) {
|
while (res == RTSP_OK) {
|
||||||
gchar c;
|
gchar c;
|
||||||
gint ret;
|
|
||||||
|
|
||||||
/* read first character, this identifies data messages */
|
/* read first character, this identifies data messages */
|
||||||
ret = read (conn->fd, &c, 1);
|
RTSP_CHECK (rtsp_connection_read (conn, &c, 1), read_error);
|
||||||
if (ret < 0)
|
|
||||||
goto read_error;
|
|
||||||
if (ret < 1)
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* check for data packet, first character is $ */
|
/* check for data packet, first character is $ */
|
||||||
if (c == '$') {
|
if (c == '$') {
|
||||||
|
@ -485,26 +630,18 @@ rtsp_connection_receive (RTSPConnection * conn, RTSPMessage * msg)
|
||||||
/* data packets are $<1 byte channel><2 bytes length,BE><data bytes> */
|
/* data packets are $<1 byte channel><2 bytes length,BE><data bytes> */
|
||||||
|
|
||||||
/* read channel, which is the next char */
|
/* read channel, which is the next char */
|
||||||
ret = read (conn->fd, &c, 1);
|
RTSP_CHECK (rtsp_connection_read (conn, &c, 1), read_error);
|
||||||
if (ret < 0)
|
|
||||||
goto read_error;
|
|
||||||
if (ret < 1)
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
/* now we create a data message */
|
/* now we create a data message */
|
||||||
rtsp_message_init_data (msg, (gint) c);
|
rtsp_message_init_data (msg, (gint) c);
|
||||||
|
|
||||||
/* next two bytes are the length of the data */
|
/* next two bytes are the length of the data */
|
||||||
ret = read (conn->fd, &size, 2);
|
RTSP_CHECK (rtsp_connection_read (conn, &size, 2), read_error);
|
||||||
if (ret < 0)
|
|
||||||
goto read_error;
|
|
||||||
if (ret < 2)
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
size = GUINT16_FROM_BE (size);
|
size = GUINT16_FROM_BE (size);
|
||||||
|
|
||||||
/* and read the body */
|
/* and read the body */
|
||||||
res = read_body (conn->fd, size, msg);
|
res = read_body (conn, size, msg);
|
||||||
need_body = FALSE;
|
need_body = FALSE;
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
|
@ -520,9 +657,8 @@ rtsp_connection_receive (RTSPConnection * conn, RTSPMessage * msg)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* read lines */
|
/* read lines */
|
||||||
res = read_line (conn->fd, buffer + offset, sizeof (buffer) - offset);
|
RTSP_CHECK (read_line (conn->fd, buffer + offset,
|
||||||
if (res != RTSP_OK)
|
sizeof (buffer) - offset), read_error);
|
||||||
goto read_error;
|
|
||||||
|
|
||||||
if (buffer[0] == '\0')
|
if (buffer[0] == '\0')
|
||||||
break;
|
break;
|
||||||
|
@ -549,7 +685,7 @@ rtsp_connection_receive (RTSPConnection * conn, RTSPMessage * msg)
|
||||||
&hdrval) == RTSP_OK) {
|
&hdrval) == RTSP_OK) {
|
||||||
/* there is, read the body */
|
/* there is, read the body */
|
||||||
content_length = atol (hdrval);
|
content_length = atol (hdrval);
|
||||||
res = read_body (conn->fd, content_length, msg);
|
RTSP_CHECK (read_body (conn, content_length, msg), read_error);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* save session id in the connection for further use */
|
/* save session id in the connection for further use */
|
||||||
|
@ -577,13 +713,9 @@ rtsp_connection_receive (RTSPConnection * conn, RTSPMessage * msg)
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
error:
|
|
||||||
{
|
|
||||||
return RTSP_EPARSE;
|
|
||||||
}
|
|
||||||
read_error:
|
read_error:
|
||||||
{
|
{
|
||||||
return RTSP_ESYS;
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
* Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
|
* Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -16,6 +16,29 @@
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* Unless otherwise indicated, Source Code is licensed under MIT license.
|
||||||
|
* See further explanation attached in License Statement (distributed in the file
|
||||||
|
* LICENSE).
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
* of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
* so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef __RTSP_CONNECTION_H__
|
#ifndef __RTSP_CONNECTION_H__
|
||||||
#define __RTSP_CONNECTION_H__
|
#define __RTSP_CONNECTION_H__
|
||||||
|
@ -30,17 +53,22 @@ G_BEGIN_DECLS
|
||||||
|
|
||||||
typedef struct _RTSPConnection
|
typedef struct _RTSPConnection
|
||||||
{
|
{
|
||||||
gint fd; /* our socket */
|
/* URL for the connection */
|
||||||
|
RTSPUrl *url;
|
||||||
|
|
||||||
|
/* connection state */
|
||||||
|
gint fd;
|
||||||
|
gint control_sock[2];
|
||||||
|
|
||||||
|
/* Session state */
|
||||||
|
RTSPState state;
|
||||||
gint cseq; /* sequence number */
|
gint cseq; /* sequence number */
|
||||||
gchar session_id[512]; /* session id */
|
gchar session_id[512]; /* session id */
|
||||||
|
|
||||||
RTSPState state; /* state of the connection */
|
|
||||||
} RTSPConnection;
|
} RTSPConnection;
|
||||||
|
|
||||||
/* opening/closing a connection */
|
/* opening/closing a connection */
|
||||||
RTSPResult rtsp_connection_open (RTSPUrl *url, RTSPConnection **conn);
|
RTSPResult rtsp_connection_create (RTSPUrl *url, RTSPConnection **conn);
|
||||||
RTSPResult rtsp_connection_create (gint fd, RTSPConnection **conn);
|
RTSPResult rtsp_connection_connect (RTSPConnection *conn);
|
||||||
RTSPResult rtsp_connection_close (RTSPConnection *conn);
|
RTSPResult rtsp_connection_close (RTSPConnection *conn);
|
||||||
RTSPResult rtsp_connection_free (RTSPConnection *conn);
|
RTSPResult rtsp_connection_free (RTSPConnection *conn);
|
||||||
|
|
||||||
|
@ -48,6 +76,8 @@ RTSPResult rtsp_connection_free (RTSPConnection *conn);
|
||||||
RTSPResult rtsp_connection_send (RTSPConnection *conn, RTSPMessage *message);
|
RTSPResult rtsp_connection_send (RTSPConnection *conn, RTSPMessage *message);
|
||||||
RTSPResult rtsp_connection_receive (RTSPConnection *conn, RTSPMessage *message);
|
RTSPResult rtsp_connection_receive (RTSPConnection *conn, RTSPMessage *message);
|
||||||
|
|
||||||
|
RTSPResult rtsp_connection_flush (RTSPConnection *conn, gboolean flush);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __RTSP_CONNECTION_H__ */
|
#endif /* __RTSP_CONNECTION_H__ */
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
* Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
|
* Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -16,6 +16,29 @@
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* Unless otherwise indicated, Source Code is licensed under MIT license.
|
||||||
|
* See further explanation attached in License Statement (distributed in the file
|
||||||
|
* LICENSE).
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
* of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
* so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "rtspdefs.h"
|
#include "rtspdefs.h"
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
* Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
|
* Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -16,6 +16,29 @@
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* Unless otherwise indicated, Source Code is licensed under MIT license.
|
||||||
|
* See further explanation attached in License Statement (distributed in the file
|
||||||
|
* LICENSE).
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
* of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
* so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef __RTSP_DEFS_H__
|
#ifndef __RTSP_DEFS_H__
|
||||||
#define __RTSP_DEFS_H__
|
#define __RTSP_DEFS_H__
|
||||||
|
@ -24,17 +47,22 @@
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
#define RTSP_CHECK(stmt, label) \
|
||||||
|
if (G_UNLIKELY ((res = (stmt)) != RTSP_OK)) goto label
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
RTSP_OK = 0,
|
RTSP_OK = 0,
|
||||||
/* errors */
|
/* errors */
|
||||||
RTSP_EINVAL = -1,
|
RTSP_EINVAL = -1,
|
||||||
RTSP_ENOMEM = -2,
|
RTSP_EINTR = -2,
|
||||||
RTSP_ERESOLV = -3,
|
RTSP_ENOMEM = -3,
|
||||||
RTSP_ENOTIMPL = -4,
|
RTSP_ERESOLV = -4,
|
||||||
RTSP_ESYS = -5,
|
RTSP_ENOTIMPL = -5,
|
||||||
RTSP_EPARSE = -6,
|
RTSP_ESYS = -6,
|
||||||
RTSP_EWSASTART = -7,
|
RTSP_EPARSE = -7,
|
||||||
RTSP_EWSAVERSION = -8,
|
RTSP_EWSASTART = -8,
|
||||||
|
RTSP_EWSAVERSION = -9,
|
||||||
|
RTSP_EEOF = -10,
|
||||||
|
|
||||||
} RTSPResult;
|
} RTSPResult;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
* Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
|
* Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
|
||||||
|
* <2006> Lutz Mueller <lutz at topfrose dot de>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -16,6 +17,29 @@
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* Unless otherwise indicated, Source Code is licensed under MIT license.
|
||||||
|
* See further explanation attached in License Statement (distributed in the file
|
||||||
|
* LICENSE).
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
* of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
* so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "rtspmessage.h"
|
#include "rtspmessage.h"
|
||||||
|
|
||||||
|
@ -282,36 +306,40 @@ rtsp_message_dump (RTSPMessage * msg)
|
||||||
|
|
||||||
g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
|
g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
|
||||||
|
|
||||||
if (msg->type == RTSP_MESSAGE_REQUEST) {
|
switch (msg->type) {
|
||||||
g_print ("request message %p\n", msg);
|
case RTSP_MESSAGE_REQUEST:
|
||||||
g_print (" request line:\n");
|
g_print ("request message %p\n", msg);
|
||||||
g_print (" method: '%s'\n",
|
g_print (" request line:\n");
|
||||||
rtsp_method_as_text (msg->type_data.request.method));
|
g_print (" method: '%s'\n",
|
||||||
g_print (" uri: '%s'\n", msg->type_data.request.uri);
|
rtsp_method_as_text (msg->type_data.request.method));
|
||||||
g_print (" headers:\n");
|
g_print (" uri: '%s'\n", msg->type_data.request.uri);
|
||||||
g_hash_table_foreach (msg->hdr_fields, dump_key_value, NULL);
|
g_print (" headers:\n");
|
||||||
g_print (" body:\n");
|
g_hash_table_foreach (msg->hdr_fields, dump_key_value, NULL);
|
||||||
rtsp_message_get_body (msg, &data, &size);
|
g_print (" body:\n");
|
||||||
dump_mem (data, size);
|
rtsp_message_get_body (msg, &data, &size);
|
||||||
} else if (msg->type == RTSP_MESSAGE_RESPONSE) {
|
dump_mem (data, size);
|
||||||
g_print ("response message %p\n", msg);
|
break;
|
||||||
g_print (" status line:\n");
|
case RTSP_MESSAGE_RESPONSE:
|
||||||
g_print (" code: '%d'\n", msg->type_data.response.code);
|
g_print ("response message %p\n", msg);
|
||||||
g_print (" reason: '%s'\n", msg->type_data.response.reason);
|
g_print (" status line:\n");
|
||||||
g_print (" headers:\n");
|
g_print (" code: '%d'\n", msg->type_data.response.code);
|
||||||
g_hash_table_foreach (msg->hdr_fields, dump_key_value, NULL);
|
g_print (" reason: '%s'\n", msg->type_data.response.reason);
|
||||||
rtsp_message_get_body (msg, &data, &size);
|
g_print (" headers:\n");
|
||||||
g_print (" body: length %d\n", size);
|
g_hash_table_foreach (msg->hdr_fields, dump_key_value, NULL);
|
||||||
dump_mem (data, size);
|
rtsp_message_get_body (msg, &data, &size);
|
||||||
} else if (msg->type == RTSP_MESSAGE_DATA) {
|
g_print (" body: length %d\n", size);
|
||||||
g_print ("data message %p\n", msg);
|
dump_mem (data, size);
|
||||||
g_print (" channel: '%d'\n", msg->type_data.data.channel);
|
break;
|
||||||
g_print (" size: '%d'\n", msg->body_size);
|
case RTSP_MESSAGE_DATA:
|
||||||
rtsp_message_get_body (msg, &data, &size);
|
g_print ("data message %p\n", msg);
|
||||||
dump_mem (data, size);
|
g_print (" channel: '%d'\n", msg->type_data.data.channel);
|
||||||
} else {
|
g_print (" size: '%d'\n", msg->body_size);
|
||||||
g_print ("unsupported packet type %d\n", msg->type);
|
rtsp_message_get_body (msg, &data, &size);
|
||||||
return RTSP_EINVAL;
|
dump_mem (data, size);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
g_print ("unsupported message type %d\n", msg->type);
|
||||||
|
return RTSP_EINVAL;
|
||||||
}
|
}
|
||||||
return RTSP_OK;
|
return RTSP_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
* Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
|
* Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -16,6 +16,29 @@
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* Unless otherwise indicated, Source Code is licensed under MIT license.
|
||||||
|
* See further explanation attached in License Statement (distributed in the file
|
||||||
|
* LICENSE).
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
* of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
* so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef __RTSP_MESSAGE_H__
|
#ifndef __RTSP_MESSAGE_H__
|
||||||
#define __RTSP_MESSAGE_H__
|
#define __RTSP_MESSAGE_H__
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
* Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
|
* Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -16,6 +16,29 @@
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* Unless otherwise indicated, Source Code is licensed under MIT license.
|
||||||
|
* See further explanation attached in License Statement (distributed in the file
|
||||||
|
* LICENSE).
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
* of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
* so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -146,5 +169,6 @@ rtsp_transport_free (RTSPTransport * transport)
|
||||||
|
|
||||||
rtsp_transport_init (transport);
|
rtsp_transport_init (transport);
|
||||||
g_free (transport);
|
g_free (transport);
|
||||||
|
|
||||||
return RTSP_OK;
|
return RTSP_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
* Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
|
* Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -16,6 +16,29 @@
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* Unless otherwise indicated, Source Code is licensed under MIT license.
|
||||||
|
* See further explanation attached in License Statement (distributed in the file
|
||||||
|
* LICENSE).
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
* of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
* so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef __RTSP_TRANSPORT_H__
|
#ifndef __RTSP_TRANSPORT_H__
|
||||||
#define __RTSP_TRANSPORT_H__
|
#define __RTSP_TRANSPORT_H__
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
* Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
|
* Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -16,6 +16,30 @@
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* Unless otherwise indicated, Source Code is licensed under MIT license.
|
||||||
|
* See further explanation attached in License Statement (distributed in the file
|
||||||
|
* LICENSE).
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
* of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
* so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
@ -78,7 +102,8 @@ rtsp_url_parse (const gchar * urlstr, RTSPUrl ** url)
|
||||||
if (slash)
|
if (slash)
|
||||||
p = slash + 1;
|
p = slash + 1;
|
||||||
} else {
|
} else {
|
||||||
res->port = RTSP_DEFAULT_PORT;
|
/* no port specified, set to 0. _get_port() will return the default port. */
|
||||||
|
res->port = 0;
|
||||||
if (!slash) {
|
if (!slash) {
|
||||||
res->host = g_strdup (p);
|
res->host = g_strdup (p);
|
||||||
p = NULL;
|
p = NULL;
|
||||||
|
@ -87,6 +112,7 @@ rtsp_url_parse (const gchar * urlstr, RTSPUrl ** url)
|
||||||
p = slash + 1;
|
p = slash + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* FIXME, this strips the slash from the absolute path */
|
||||||
if (p)
|
if (p)
|
||||||
res->abspath = g_strdup (p);
|
res->abspath = g_strdup (p);
|
||||||
|
|
||||||
|
@ -114,3 +140,28 @@ rtsp_url_free (RTSPUrl * url)
|
||||||
g_free (url->abspath);
|
g_free (url->abspath);
|
||||||
g_free (url);
|
g_free (url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RTSPResult
|
||||||
|
rtsp_url_set_port (RTSPUrl * url, guint16 port)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (url != NULL, RTSP_EINVAL);
|
||||||
|
|
||||||
|
url->port = port;
|
||||||
|
|
||||||
|
return RTSP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
RTSPResult
|
||||||
|
rtsp_url_get_port (RTSPUrl * url, guint16 * port)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (url != NULL, RTSP_EINVAL);
|
||||||
|
g_return_val_if_fail (port != NULL, RTSP_EINVAL);
|
||||||
|
|
||||||
|
/* if a port was specified, use that else use the default port. */
|
||||||
|
if (url->port != 0)
|
||||||
|
*port = url->port;
|
||||||
|
else
|
||||||
|
*port = RTSP_DEFAULT_PORT;
|
||||||
|
|
||||||
|
return RTSP_OK;
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
* Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
|
* Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -16,6 +16,29 @@
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* Unless otherwise indicated, Source Code is licensed under MIT license.
|
||||||
|
* See further explanation attached in License Statement (distributed in the file
|
||||||
|
* LICENSE).
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
* of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
* so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef __RTSP_URL_H__
|
#ifndef __RTSP_URL_H__
|
||||||
#define __RTSP_URL_H__
|
#define __RTSP_URL_H__
|
||||||
|
@ -41,6 +64,9 @@ typedef struct _RTSPUrl {
|
||||||
RTSPResult rtsp_url_parse (const gchar *urlstr, RTSPUrl **url);
|
RTSPResult rtsp_url_parse (const gchar *urlstr, RTSPUrl **url);
|
||||||
void rtsp_url_free (RTSPUrl *url);
|
void rtsp_url_free (RTSPUrl *url);
|
||||||
|
|
||||||
|
RTSPResult rtsp_url_set_port (RTSPUrl *url, guint16 port);
|
||||||
|
RTSPResult rtsp_url_get_port (RTSPUrl *url, guint16 *port);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __RTSP_URL_H__ */
|
#endif /* __RTSP_URL_H__ */
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
* Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
|
* Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -16,6 +16,29 @@
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* Unless otherwise indicated, Source Code is licensed under MIT license.
|
||||||
|
* See further explanation attached in License Statement (distributed in the file
|
||||||
|
* LICENSE).
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
* of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
* so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef __SDP_H__
|
#ifndef __SDP_H__
|
||||||
#define __SDP_H__
|
#define __SDP_H__
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
* Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
|
* Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -16,12 +16,38 @@
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* Unless otherwise indicated, Source Code is licensed under MIT license.
|
||||||
|
* See further explanation attached in License Statement (distributed in the file
|
||||||
|
* LICENSE).
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
* of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
* so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "sdpmessage.h"
|
#include "sdpmessage.h"
|
||||||
|
|
||||||
|
/* FIXME, is currently allocated on the stack */
|
||||||
|
#define MAX_LINE_LEN 1024 * 16
|
||||||
|
|
||||||
#define FREE_STRING(field) g_free ((field)); (field) = NULL;
|
#define FREE_STRING(field) g_free ((field)); (field) = NULL;
|
||||||
#define FREE_ARRAY(field) \
|
#define FREE_ARRAY(field) \
|
||||||
G_STMT_START { \
|
G_STMT_START { \
|
||||||
|
@ -54,15 +80,15 @@ char* sdp_message_get_##field (SDPMessage *msg) { \
|
||||||
gint sdp_message_##field##_len (SDPMessage *msg) { \
|
gint sdp_message_##field##_len (SDPMessage *msg) { \
|
||||||
return ((msg)->field->len); \
|
return ((msg)->field->len); \
|
||||||
}
|
}
|
||||||
#define DEFINE_ARRAY_GETTER(method,field,type) \
|
#define DEFINE_ARRAY_GETTER(method,field,type) \
|
||||||
type sdp_message_get_##method (SDPMessage *msg, gint i) { \
|
type sdp_message_get_##method (SDPMessage *msg, guint idx) { \
|
||||||
return g_array_index ((msg)->field, type, i); \
|
return g_array_index ((msg)->field, type, idx); \
|
||||||
}
|
}
|
||||||
#define DEFINE_ARRAY_P_GETTER(method,field,type) \
|
#define DEFINE_ARRAY_P_GETTER(method,field,type) \
|
||||||
type * sdp_message_get_##method (SDPMessage *msg, gint i) { \
|
type * sdp_message_get_##method (SDPMessage *msg, guint idx) { \
|
||||||
return &g_array_index ((msg)->field, type, i); \
|
return &g_array_index ((msg)->field, type, idx); \
|
||||||
}
|
}
|
||||||
#define DEFINE_ARRAY_ADDER(method,field,type,dup_method) \
|
#define DEFINE_ARRAY_ADDER(method,field,type,dup_method) \
|
||||||
RTSPResult sdp_message_add_##method (SDPMessage *msg, type val) { \
|
RTSPResult sdp_message_add_##method (SDPMessage *msg, type val) { \
|
||||||
type v = dup_method(val); \
|
type v = dup_method(val); \
|
||||||
g_array_append_val((msg)->field, v); \
|
g_array_append_val((msg)->field, v); \
|
||||||
|
@ -294,7 +320,7 @@ sdp_message_get_key (SDPMessage * msg)
|
||||||
DEFINE_ARRAY_LEN (attributes);
|
DEFINE_ARRAY_LEN (attributes);
|
||||||
DEFINE_ARRAY_P_GETTER (attribute, attributes, SDPAttribute);
|
DEFINE_ARRAY_P_GETTER (attribute, attributes, SDPAttribute);
|
||||||
gchar *
|
gchar *
|
||||||
sdp_message_get_attribute_val (SDPMessage * msg, gchar * key)
|
sdp_message_get_attribute_val_n (SDPMessage * msg, gchar * key, guint nth)
|
||||||
{
|
{
|
||||||
gint i;
|
gint i;
|
||||||
|
|
||||||
|
@ -302,12 +328,22 @@ sdp_message_get_attribute_val (SDPMessage * msg, gchar * key)
|
||||||
SDPAttribute *attr;
|
SDPAttribute *attr;
|
||||||
|
|
||||||
attr = &g_array_index (msg->attributes, SDPAttribute, i);
|
attr = &g_array_index (msg->attributes, SDPAttribute, i);
|
||||||
if (!strcmp (attr->key, key))
|
if (!strcmp (attr->key, key)) {
|
||||||
return attr->value;
|
if (nth == 0)
|
||||||
|
return attr->value;
|
||||||
|
else
|
||||||
|
nth--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gchar *
|
||||||
|
sdp_message_get_attribute_val (SDPMessage * msg, gchar * key)
|
||||||
|
{
|
||||||
|
return sdp_message_get_attribute_val_n (msg, key, 0);
|
||||||
|
}
|
||||||
|
|
||||||
RTSPResult
|
RTSPResult
|
||||||
sdp_message_add_attribute (SDPMessage * msg, gchar * key, gchar * value)
|
sdp_message_add_attribute (SDPMessage * msg, gchar * key, gchar * value)
|
||||||
{
|
{
|
||||||
|
@ -378,8 +414,14 @@ sdp_media_add_format (SDPMedia * media, gchar * format)
|
||||||
return RTSP_OK;
|
return RTSP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDPAttribute *
|
||||||
|
sdp_media_get_attribute (SDPMedia * media, guint idx)
|
||||||
|
{
|
||||||
|
return &g_array_index (media->attributes, SDPAttribute, idx);
|
||||||
|
}
|
||||||
|
|
||||||
gchar *
|
gchar *
|
||||||
sdp_media_get_attribute_val (SDPMedia * media, gchar * key)
|
sdp_media_get_attribute_val_n (SDPMedia * media, gchar * key, guint nth)
|
||||||
{
|
{
|
||||||
gint i;
|
gint i;
|
||||||
|
|
||||||
|
@ -387,18 +429,28 @@ sdp_media_get_attribute_val (SDPMedia * media, gchar * key)
|
||||||
SDPAttribute *attr;
|
SDPAttribute *attr;
|
||||||
|
|
||||||
attr = &g_array_index (media->attributes, SDPAttribute, i);
|
attr = &g_array_index (media->attributes, SDPAttribute, i);
|
||||||
if (!strcmp (attr->key, key))
|
if (!strcmp (attr->key, key)) {
|
||||||
return attr->value;
|
if (nth == 0)
|
||||||
|
return attr->value;
|
||||||
|
else
|
||||||
|
nth--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
gchar *
|
gchar *
|
||||||
sdp_media_get_format (SDPMedia * media, gint i)
|
sdp_media_get_attribute_val (SDPMedia * media, gchar * key)
|
||||||
{
|
{
|
||||||
if (i >= media->fmts->len)
|
return sdp_media_get_attribute_val_n (media, key, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
gchar *
|
||||||
|
sdp_media_get_format (SDPMedia * media, guint idx)
|
||||||
|
{
|
||||||
|
if (idx >= media->fmts->len)
|
||||||
return NULL;
|
return NULL;
|
||||||
return g_array_index (media->fmts, gchar *, i);
|
return g_array_index (media->fmts, gchar *, idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -455,7 +507,7 @@ typedef struct
|
||||||
static gboolean
|
static gboolean
|
||||||
sdp_parse_line (SDPContext * c, gchar type, gchar * buffer)
|
sdp_parse_line (SDPContext * c, gchar type, gchar * buffer)
|
||||||
{
|
{
|
||||||
gchar str[4096];
|
gchar str[8192];
|
||||||
gchar *p = buffer;
|
gchar *p = buffer;
|
||||||
|
|
||||||
#define READ_STRING(field) read_string (str, sizeof(str), &p);REPLACE_STRING (field, str);
|
#define READ_STRING(field) read_string (str, sizeof(str), &p);REPLACE_STRING (field, str);
|
||||||
|
@ -503,7 +555,7 @@ sdp_parse_line (SDPContext * c, gchar type, gchar * buffer)
|
||||||
break;
|
break;
|
||||||
case 'b':
|
case 'b':
|
||||||
{
|
{
|
||||||
gchar str2[4096];
|
gchar str2[MAX_LINE_LEN];
|
||||||
|
|
||||||
read_string_del (str, sizeof (str), ':', &p);
|
read_string_del (str, sizeof (str), ':', &p);
|
||||||
read_string (str2, sizeof (str2), &p);
|
read_string (str2, sizeof (str2), &p);
|
||||||
|
@ -520,7 +572,7 @@ sdp_parse_line (SDPContext * c, gchar type, gchar * buffer)
|
||||||
break;
|
break;
|
||||||
case 'a':
|
case 'a':
|
||||||
read_string_del (str, sizeof (str), ':', &p);
|
read_string_del (str, sizeof (str), ':', &p);
|
||||||
if (p != '\0')
|
if (*p != '\0')
|
||||||
p++;
|
p++;
|
||||||
if (c->state == SDP_SESSION)
|
if (c->state == SDP_SESSION)
|
||||||
sdp_message_add_attribute (c->msg, str, p);
|
sdp_message_add_attribute (c->msg, str, p);
|
||||||
|
@ -569,7 +621,7 @@ sdp_message_parse_buffer (guint8 * data, guint size, SDPMessage * msg)
|
||||||
gchar *p;
|
gchar *p;
|
||||||
SDPContext c;
|
SDPContext c;
|
||||||
gchar type;
|
gchar type;
|
||||||
gchar buffer[4096];
|
gchar buffer[MAX_LINE_LEN];
|
||||||
gint idx = 0;
|
gint idx = 0;
|
||||||
|
|
||||||
g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
|
g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
* Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
|
* Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -16,6 +16,29 @@
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* Unless otherwise indicated, Source Code is licensed under MIT license.
|
||||||
|
* See further explanation attached in License Statement (distributed in the file
|
||||||
|
* LICENSE).
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
* of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
* so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef __SDP_MESSAGE_H__
|
#ifndef __SDP_MESSAGE_H__
|
||||||
#define __SDP_MESSAGE_H__
|
#define __SDP_MESSAGE_H__
|
||||||
|
@ -125,31 +148,32 @@ gchar* sdp_message_get_information (SDPMessage *msg);
|
||||||
RTSPResult sdp_message_set_uri (SDPMessage *msg, gchar *uri);
|
RTSPResult sdp_message_set_uri (SDPMessage *msg, gchar *uri);
|
||||||
gchar* sdp_message_get_uri (SDPMessage *msg);
|
gchar* sdp_message_get_uri (SDPMessage *msg);
|
||||||
gint sdp_message_emails_len (SDPMessage *msg);
|
gint sdp_message_emails_len (SDPMessage *msg);
|
||||||
gchar* sdp_message_get_email (SDPMessage *msg, gint i);
|
gchar* sdp_message_get_email (SDPMessage *msg, guint idx);
|
||||||
RTSPResult sdp_message_add_email (SDPMessage *msg, gchar *email);
|
RTSPResult sdp_message_add_email (SDPMessage *msg, gchar *email);
|
||||||
gint sdp_message_phones_len (SDPMessage *msg);
|
gint sdp_message_phones_len (SDPMessage *msg);
|
||||||
gchar* sdp_message_get_phone (SDPMessage *msg, gint i);
|
gchar* sdp_message_get_phone (SDPMessage *msg, guint idx);
|
||||||
RTSPResult sdp_message_add_phone (SDPMessage *msg, gchar *phone);
|
RTSPResult sdp_message_add_phone (SDPMessage *msg, gchar *phone);
|
||||||
RTSPResult sdp_message_set_connection (SDPMessage *msg, gchar *nettype, gchar *addrtype,
|
RTSPResult sdp_message_set_connection (SDPMessage *msg, gchar *nettype, gchar *addrtype,
|
||||||
gchar *address, gint ttl, gint addr_number);
|
gchar *address, gint ttl, gint addr_number);
|
||||||
SDPConnection* sdp_message_get_connection (SDPMessage *msg);
|
SDPConnection* sdp_message_get_connection (SDPMessage *msg);
|
||||||
gint sdp_message_bandwidths_len (SDPMessage *msg);
|
gint sdp_message_bandwidths_len (SDPMessage *msg);
|
||||||
SDPBandwidth* sdp_message_get_bandwidth (SDPMessage *msg, gint i);
|
SDPBandwidth* sdp_message_get_bandwidth (SDPMessage *msg, guint idx);
|
||||||
RTSPResult sdp_message_add_bandwidth (SDPMessage *msg, gchar *bwtype, gint bandwidth);
|
RTSPResult sdp_message_add_bandwidth (SDPMessage *msg, gchar *bwtype, gint bandwidth);
|
||||||
gint sdp_message_times_len (SDPMessage *msg);
|
gint sdp_message_times_len (SDPMessage *msg);
|
||||||
SDPTime* sdp_message_get_time (SDPMessage *msg, gint i);
|
SDPTime* sdp_message_get_time (SDPMessage *msg, guint idx);
|
||||||
RTSPResult sdp_message_add_time (SDPMessage *msg, gchar *time);
|
RTSPResult sdp_message_add_time (SDPMessage *msg, gchar *time);
|
||||||
gint sdp_message_zones_len (SDPMessage *msg);
|
gint sdp_message_zones_len (SDPMessage *msg);
|
||||||
SDPZone* sdp_message_get_zone (SDPMessage *msg, gint i);
|
SDPZone* sdp_message_get_zone (SDPMessage *msg, guint idx);
|
||||||
RTSPResult sdp_message_add_zone (SDPMessage *msg, gchar *time, gchar *typed_time);
|
RTSPResult sdp_message_add_zone (SDPMessage *msg, gchar *time, gchar *typed_time);
|
||||||
RTSPResult sdp_message_set_key (SDPMessage *msg, gchar *type, gchar *data);
|
RTSPResult sdp_message_set_key (SDPMessage *msg, gchar *type, gchar *data);
|
||||||
SDPKey* sdp_message_get_key (SDPMessage *msg);
|
SDPKey* sdp_message_get_key (SDPMessage *msg);
|
||||||
gint sdp_message_attributes_len (SDPMessage *msg);
|
gint sdp_message_attributes_len (SDPMessage *msg);
|
||||||
SDPAttribute* sdp_message_get_attribute (SDPMessage *msg, gint i);
|
SDPAttribute* sdp_message_get_attribute (SDPMessage *msg, guint idx);
|
||||||
gchar* sdp_message_get_attribute_val (SDPMessage *msg, gchar *key);
|
gchar* sdp_message_get_attribute_val (SDPMessage *msg, gchar *key);
|
||||||
|
gchar* sdp_message_get_attribute_val_n (SDPMessage *msg, gchar *key, guint nth);
|
||||||
RTSPResult sdp_message_add_attribute (SDPMessage *msg, gchar *key, gchar *value);
|
RTSPResult sdp_message_add_attribute (SDPMessage *msg, gchar *key, gchar *value);
|
||||||
gint sdp_message_medias_len (SDPMessage *msg);
|
gint sdp_message_medias_len (SDPMessage *msg);
|
||||||
SDPMedia* sdp_message_get_media (SDPMessage *msg, gint i);
|
SDPMedia* sdp_message_get_media (SDPMessage *msg, guint idx);
|
||||||
RTSPResult sdp_message_add_media (SDPMessage *msg, SDPMedia *media);
|
RTSPResult sdp_message_add_media (SDPMessage *msg, SDPMedia *media);
|
||||||
|
|
||||||
|
|
||||||
|
@ -161,8 +185,10 @@ RTSPResult sdp_media_init (SDPMedia *media);
|
||||||
RTSPResult sdp_media_clean (SDPMedia *media);
|
RTSPResult sdp_media_clean (SDPMedia *media);
|
||||||
RTSPResult sdp_media_free (SDPMedia *media);
|
RTSPResult sdp_media_free (SDPMedia *media);
|
||||||
|
|
||||||
|
SDPAttribute * sdp_media_get_attribute (SDPMedia *media, guint idx);
|
||||||
gchar* sdp_media_get_attribute_val (SDPMedia *media, gchar *key);
|
gchar* sdp_media_get_attribute_val (SDPMedia *media, gchar *key);
|
||||||
gchar* sdp_media_get_format (SDPMedia *media, gint i);
|
gchar* sdp_media_get_attribute_val_n (SDPMedia *media, gchar *key, guint nth);
|
||||||
|
gchar* sdp_media_get_format (SDPMedia *media, guint idx);
|
||||||
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
|
@ -47,9 +47,17 @@ main (int argc, gchar * argv[])
|
||||||
g_print (" url port: %d\n", url->port);
|
g_print (" url port: %d\n", url->port);
|
||||||
g_print (" url path: %s\n", url->abspath);
|
g_print (" url path: %s\n", url->abspath);
|
||||||
|
|
||||||
|
/* create and open connection */
|
||||||
|
g_print ("creating connection...\n");
|
||||||
|
res = rtsp_connection_create (url, &conn);
|
||||||
|
if (res != RTSP_OK) {
|
||||||
|
g_print ("error creating connection to \"%s\"\n", urlstr);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
/* open connection */
|
/* open connection */
|
||||||
g_print ("opening connection...\n");
|
g_print ("opening connection...\n");
|
||||||
res = rtsp_connection_open (url, &conn);
|
res = rtsp_connection_connect (conn);
|
||||||
if (res != RTSP_OK) {
|
if (res != RTSP_OK) {
|
||||||
g_print ("error opening connection to \"%s\"\n", urlstr);
|
g_print ("error opening connection to \"%s\"\n", urlstr);
|
||||||
return (-1);
|
return (-1);
|
||||||
|
|
Loading…
Reference in a new issue