<!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: GStreamer Base Plugins 1.0 Library Reference Manual</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.78.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.24 (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="5"><tr valign="middle">
<td width="100%" align="left" class="shortcuts">
<a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
                  <a href="#gst-plugins-base-libs-gstrtspextension.description" class="shortcut">Description</a></span>
</td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="gstreamer-rtsp.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
<td><a accesskey="p" href="gst-plugins-base-libs-gstrtspdefs.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
<td><a accesskey="n" href="gst-plugins-base-libs-gstrtspmessage.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></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 class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
<a name="gst-plugins-base-libs-gstrtspextension.other"></a><h2>Types and Values</h2>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
</colgroup>
<tbody>
<tr>
<td class="datatype_keyword"> </td>
<td class="function_name"><a class="link" href="gst-plugins-base-libs-gstrtspextension.html#GstRTSPExtension" title="GstRTSPExtension">GstRTSPExtension</a></td>
</tr>
<tr>
<td class="datatype_keyword">struct</td>
<td class="function_name"><a class="link" href="gst-plugins-base-libs-gstrtspextension.html#GstRTSPExtensionInterface" title="struct GstRTSPExtensionInterface">GstRTSPExtensionInterface</a></td>
</tr>
</tbody>
</table></div>
</div>
<div class="refsect1">
<a name="gst-plugins-base-libs-gstrtspextension.includes"></a><h2>Includes</h2>
<pre class="synopsis">#include &lt;gst/rtsp/gstrtspextension.h&gt;
</pre>
</div>
<div class="refsect1">
<a name="gst-plugins-base-libs-gstrtspextension.description"></a><h2>Description</h2>
<div class="refsect2">
<a name="id-1.2.10.5.5.2"></a><p>
 This interface is implemented e.g. by the Windows Media Streaming RTSP
 exentension (rtspwms) and the RealMedia RTSP extension (rtspreal).
</p>
</div>
</div>
<div class="refsect1">
<a name="gst-plugins-base-libs-gstrtspextension.functions_details"></a><h2>Functions</h2>
<p></p>
</div>
<div class="refsect1">
<a name="gst-plugins-base-libs-gstrtspextension.other_details"></a><h2>Types and Values</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.24</div>
</body>
</html>