<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gstrtspextension</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
<link rel="home" href="index.html" title="GStreamer Base Plugins 1.0 Library Reference Manual">
<link rel="up" href="gstreamer-rtsp.html" title="RTSP Library">
<link rel="prev" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">
<link rel="next" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">
<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
<tr valign="middle">
<td><a accesskey="p" href="gst-plugins-base-libs-gstrtspdefs.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
<td><a accesskey="u" href="gstreamer-rtsp.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
<th width="100%" align="center">GStreamer Base Plugins 1.0 Library Reference Manual</th>
<td><a accesskey="n" href="gst-plugins-base-libs-gstrtspmessage.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
</tr>
<tr><td colspan="5" class="shortcuts">
<a href="#gst-plugins-base-libs-gstrtspextension.synopsis" class="shortcut">Top</a>
                   | 
                  <a href="#gst-plugins-base-libs-gstrtspextension.description" class="shortcut">Description</a>
</td></tr>
</table>
<div class="refentry">
<a name="gst-plugins-base-libs-gstrtspextension"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstrtspextension.top_of_page"></a>gstrtspextension</span></h2>
<p>gstrtspextension — Interface for extending RTSP protocols</p>
</td>
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsynopsisdiv">
<a name="gst-plugins-base-libs-gstrtspextension.synopsis"></a><h2>Synopsis</h2>
<pre class="synopsis">
#include &lt;gst/rtsp/gstrtspextension.h&gt;

                    <a class="link" href="gst-plugins-base-libs-gstrtspextension.html#GstRTSPExtension" title="GstRTSPExtension">GstRTSPExtension</a>;
struct              <a class="link" href="gst-plugins-base-libs-gstrtspextension.html#GstRTSPExtensionInterface" title="struct GstRTSPExtensionInterface">GstRTSPExtensionInterface</a>;
</pre>
</div>
<div class="refsect1">
<a name="gst-plugins-base-libs-gstrtspextension.description"></a><h2>Description</h2>
<p>
</p>
<div class="refsect2">
<a name="idp10661296"></a><p>
 This interface is implemented e.g. by the Windows Media Streaming RTSP
 exentension (rtspwms) and the RealMedia RTSP extension (rtspreal).
</p>
</div>
<p>
</p>
<p>
Last reviewed on 2007-07-25 (0.10.14)
</p>
</div>
<div class="refsect1">
<a name="gst-plugins-base-libs-gstrtspextension.details"></a><h2>Details</h2>
<div class="refsect2">
<a name="GstRTSPExtension"></a><h3>GstRTSPExtension</h3>
<pre class="programlisting">typedef struct _GstRTSPExtension GstRTSPExtension;</pre>
</div>
<hr>
<div class="refsect2">
<a name="GstRTSPExtensionInterface"></a><h3>struct GstRTSPExtensionInterface</h3>
<pre class="programlisting">struct GstRTSPExtensionInterface {
  GTypeInterface parent;

  /* vfunctions */
  gboolean      (*detect_server)    (GstRTSPExtension *ext, GstRTSPMessage *resp);

  GstRTSPResult (*before_send)      (GstRTSPExtension *ext, GstRTSPMessage *req);
  GstRTSPResult (*after_send)       (GstRTSPExtension *ext, GstRTSPMessage *req, GstRTSPMessage *resp);

  GstRTSPResult (*parse_sdp)        (GstRTSPExtension *ext, GstSDPMessage *sdp, GstStructure *s);
  GstRTSPResult (*setup_media)      (GstRTSPExtension *ext, GstSDPMedia *media);

  gboolean      (*configure_stream) (GstRTSPExtension *ext, GstCaps *caps);

  GstRTSPResult (*get_transports)   (GstRTSPExtension *ext, GstRTSPLowerTrans protocols, gchar **transport);

  GstRTSPResult (*stream_select)    (GstRTSPExtension *ext, GstRTSPUrl *url);

  /* signals */
  GstRTSPResult (*send)             (GstRTSPExtension *ext, GstRTSPMessage *req, GstRTSPMessage *resp);

  /* ABI: more vfunctions added later */
  GstRTSPResult (*receive_request)  (GstRTSPExtension *ext, GstRTSPMessage *req);
};
</pre>
</div>
</div>
</div>
<div class="footer">
<hr>
          Generated by GTK-Doc V1.18</div>
</body>
</html>