⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ortp-multiplexing-sessions-(in-a-one-thread-design).html

📁 ortp协议栈(实时传输协议)
💻 HTML
字号:
<HTML><HEAD><TITLE>Multiplexing sessions (in a one thread design)</TITLE><METANAME="GENERATOR"CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+"><LINKREL="HOME"TITLE="oRTP Reference Manual"HREF="book1.html"><LINKREL="UP"TITLE="oRTP API"HREF="ortpapi.html"><LINKREL="PREVIOUS"TITLE="RTP payloads and profiles"HREF="ortp-rtp-payloads-and-profiles.html"><LINKREL="NEXT"TITLE="Telephone events (RFC2833)"HREF="ortp-telephone-events-(rfc2833)-.html"></HEAD><BODYCLASS="REFENTRY"BGCOLOR="#FFFFFF"TEXT="#000000"LINK="#0000FF"VLINK="#840084"ALINK="#0000FF"><DIVCLASS="NAVHEADER"><TABLEWIDTH="100%"BORDER="0"BGCOLOR="#000000"CELLPADDING="1"CELLSPACING="0"><TR><THCOLSPAN="4"ALIGN="center"><FONTCOLOR="#FFFFFF"SIZE="5">oRTP Reference Manual</FONT></TH></TR><TR><TDWIDTH="25%"BGCOLOR="#C00000"ALIGN="left"><AHREF="ortp-rtp-payloads-and-profiles.html"><FONTCOLOR="#FFFFFF"SIZE="3"><B>&#60;&#60;&#60; Previous Page</B></FONT></A></TD><TDWIDTH="25%"BGCOLOR="#0000C0"ALIGN="center"><FONTCOLOR="#FFFFFF"SIZE="3"><B><AHREF="book1.html"><FONTCOLOR="#FFFFFF"SIZE="3"><B>Home</B></FONT></A></B></FONT></TD><TDWIDTH="25%"BGCOLOR="#00C000"ALIGN="center"><FONTCOLOR="#FFFFFF"SIZE="3"><B><AHREF="ortpapi.html"><FONTCOLOR="#FFFFFF"SIZE="3"><B>Up</B></FONT></A></B></FONT></TD><TDWIDTH="25%"BGCOLOR="#C00000"ALIGN="right"><AHREF="ortp-telephone-events-(rfc2833)-.html"><FONTCOLOR="#FFFFFF"SIZE="3"><B>Next Page &#62;&#62;&#62;</B></FONT></A></TD></TR></TABLE></DIV><H1><ANAME="ORTP-MULTIPLEXING-SESSIONS-(IN-A-ONE-THREAD-DESIGN)">Multiplexing sessions (in a one thread design)</H1><DIVCLASS="REFNAMEDIV"><ANAME="AEN820"></A><H2>Name</H2>Multiplexing sessions (in a one thread design)&nbsp;--&nbsp;The SessionSet API allows applications to make I/O on mutilple rtp sessionswithout making blocking I/O, but keeping the main process synchronised.</DIV><DIVCLASS="REFSYNOPSISDIV"><ANAME="AEN823"><H2>Synopsis</H2><TABLEBORDER="0"BGCOLOR="#D6E8FF"WIDTH="100%"CELLPADDING="6"><TR><TD><PRECLASS="SYNOPSIS">&#13;#include &lt;ortp.h&gt;struct      <AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSIONSET">SessionSet</A>;<AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSIONSET">SessionSet</A>* <AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSION-SET-NEW">session_set_new</A>                 ();#define     <AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSION-SET-INIT">session_set_init</A>                (ss)#define     <AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSION-SET-SET">session_set_set</A>                 (ss,rtpsession)#define     <AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSION-SET-IS-SET">session_set_is_set</A>              (ss,rtpsession)#define     <AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSION-SET-CLR">session_set_clr</A>                 (ss,rtpsession)int         <AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSION-SET-SELECT">session_set_select</A>              (<AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSIONSET">SessionSet</A> *recvs,                                             <AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSIONSET">SessionSet</A> *sends,                                             <AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSIONSET">SessionSet</A> *errors);void        <AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSION-SET-DESTROY">session_set_destroy</A>             (<AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSIONSET">SessionSet</A> *set);</PRE></TD></TR></TABLE></DIV><DIVCLASS="REFSECT1"><ANAME="AEN839"></A><H2>Description</H2><P>The scheduled mode must be enabled for all rtp session that are managed through the SessionSet API. See <AHREF="ortp-rtpsession-api.html#RTP-SESSION-SET-SCHEDULING-MODE">rtp_session_set_scheduling_mode</A>().</P></DIV><DIVCLASS="REFSECT1"><ANAME="AEN843"></A><H2>Details</H2><DIVCLASS="REFSECT2"><ANAME="AEN845"></A><H3><ANAME="SESSIONSET"></A>struct SessionSet</H3><TABLEBORDER="0"BGCOLOR="#D6E8FF"WIDTH="100%"CELLPADDING="6"><TR><TD><PRECLASS="PROGRAMLISTING">struct SessionSet{	fd_set rtpset;};</PRE></TD></TR></TABLE><P></P></DIV><HR><DIVCLASS="REFSECT2"><ANAME="AEN850"></A><H3><ANAME="SESSION-SET-NEW"></A>session_set_new ()</H3><TABLEBORDER="0"BGCOLOR="#D6E8FF"WIDTH="100%"CELLPADDING="6"><TR><TD><PRECLASS="PROGRAMLISTING"><AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSIONSET">SessionSet</A>* session_set_new                 ();</PRE></TD></TR></TABLE><P>Allocates and initialize a new empty session set.</P><P></P><DIVCLASS="INFORMALTABLE"><ANAME="AEN857"><P></P><TABLEBORDER="0"WIDTH="100%"BGCOLOR="#FFD0D0"CELLSPACING="0"CELLPADDING="4"CLASS="CALSTABLE"><TBODY><TR><TDWIDTH="20%"ALIGN="RIGHT"VALIGN="TOP"><SPANCLASS="emphasis"><ICLASS="EMPHASIS">Returns</I></SPAN> :</TD><TDWIDTH="80%"ALIGN="LEFT"VALIGN="TOP"> the session set.</TD></TR></TBODY></TABLE><P></P></DIV></DIV><HR><DIVCLASS="REFSECT2"><ANAME="AEN866"></A><H3><ANAME="SESSION-SET-INIT"></A>session_set_init()</H3><TABLEBORDER="0"BGCOLOR="#D6E8FF"WIDTH="100%"CELLPADDING="6"><TR><TD><PRECLASS="PROGRAMLISTING">#define session_set_init(ss)		FD_ZERO(&amp;(ss)-&gt;rtpset)</PRE></TD></TR></TABLE><P>Initializes a session set. It is unusefull to call this function on a session set objectreturned by <AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSION-SET-NEW">session_set_new</A>().</P><P></P><DIVCLASS="INFORMALTABLE"><ANAME="AEN873"><P></P><TABLEBORDER="0"WIDTH="100%"BGCOLOR="#FFD0D0"CELLSPACING="0"CELLPADDING="4"CLASS="CALSTABLE"><TBODY><TR><TDWIDTH="20%"ALIGN="RIGHT"VALIGN="TOP"><TTCLASS="PARAMETER"><I>ss</I></TT>&nbsp;:</TD><TDWIDTH="80%"ALIGN="LEFT"VALIGN="TOP">	 a SessionSet statically allocated.</TD></TR></TBODY></TABLE><P></P></DIV></DIV><HR><DIVCLASS="REFSECT2"><ANAME="AEN882"></A><H3><ANAME="SESSION-SET-SET"></A>session_set_set()</H3><TABLEBORDER="0"BGCOLOR="#D6E8FF"WIDTH="100%"CELLPADDING="6"><TR><TD><PRECLASS="PROGRAMLISTING">#define session_set_set(ss,rtpsession)		FD_SET((rtpsession)-&gt;mask_pos,&amp;(ss)-&gt;rtpset)</PRE></TD></TR></TABLE><P>This macro adds rtp session <TTCLASS="PARAMETER"><I>_session</I></TT> to set <TTCLASS="PARAMETER"><I>_set</I></TT>.</P><P></P><DIVCLASS="INFORMALTABLE"><ANAME="AEN890"><P></P><TABLEBORDER="0"WIDTH="100%"BGCOLOR="#FFD0D0"CELLSPACING="0"CELLPADDING="4"CLASS="CALSTABLE"><TBODY><TR><TDWIDTH="20%"ALIGN="RIGHT"VALIGN="TOP"><TTCLASS="PARAMETER"><I>ss</I></TT>&nbsp;:</TD><TDWIDTH="80%"ALIGN="LEFT"VALIGN="TOP">		a set (<AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSIONSET">SessionSet</A> object)</TD></TR><TR><TDWIDTH="20%"ALIGN="RIGHT"VALIGN="TOP"><TTCLASS="PARAMETER"><I>rtpsession</I></TT>&nbsp;:</TD><TDWIDTH="80%"ALIGN="LEFT"VALIGN="TOP">	a rtp session</TD></TR></TBODY></TABLE><P></P></DIV></DIV><HR><DIVCLASS="REFSECT2"><ANAME="AEN904"></A><H3><ANAME="SESSION-SET-IS-SET"></A>session_set_is_set()</H3><TABLEBORDER="0"BGCOLOR="#D6E8FF"WIDTH="100%"CELLPADDING="6"><TR><TD><PRECLASS="PROGRAMLISTING">#define session_set_is_set(ss,rtpsession)	FD_ISSET((rtpsession)-&gt;mask_pos,&amp;(ss)-&gt;rtpset)</PRE></TD></TR></TABLE><P>This macro tests if <TTCLASS="PARAMETER"><I>_session</I></TT> is part of <TTCLASS="PARAMETER"><I>_set</I></TT>. 1 is returned if true, 0 else.</P><P></P><DIVCLASS="INFORMALTABLE"><ANAME="AEN912"><P></P><TABLEBORDER="0"WIDTH="100%"BGCOLOR="#FFD0D0"CELLSPACING="0"CELLPADDING="4"CLASS="CALSTABLE"><TBODY><TR><TDWIDTH="20%"ALIGN="RIGHT"VALIGN="TOP"><TTCLASS="PARAMETER"><I>ss</I></TT>&nbsp;:</TD><TDWIDTH="80%"ALIGN="LEFT"VALIGN="TOP">		a set (<AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSIONSET">SessionSet</A> object)</TD></TR><TR><TDWIDTH="20%"ALIGN="RIGHT"VALIGN="TOP"><TTCLASS="PARAMETER"><I>rtpsession</I></TT>&nbsp;:</TD><TDWIDTH="80%"ALIGN="LEFT"VALIGN="TOP">	a rtp session</TD></TR></TBODY></TABLE><P></P></DIV></DIV><HR><DIVCLASS="REFSECT2"><ANAME="AEN926"></A><H3><ANAME="SESSION-SET-CLR"></A>session_set_clr()</H3><TABLEBORDER="0"BGCOLOR="#D6E8FF"WIDTH="100%"CELLPADDING="6"><TR><TD><PRECLASS="PROGRAMLISTING">#define session_set_clr(ss,rtpsession)		FD_CLR((rtpsession)-&gt;mask_pos,&amp;(ss)-&gt;rtpset)</PRE></TD></TR></TABLE><P>Removes the <TTCLASS="PARAMETER"><I>_session</I></TT> from the _set.</P><P></P><DIVCLASS="INFORMALTABLE"><ANAME="AEN933"><P></P><TABLEBORDER="0"WIDTH="100%"BGCOLOR="#FFD0D0"CELLSPACING="0"CELLPADDING="4"CLASS="CALSTABLE"><TBODY><TR><TDWIDTH="20%"ALIGN="RIGHT"VALIGN="TOP"><TTCLASS="PARAMETER"><I>ss</I></TT>&nbsp;:</TD><TDWIDTH="80%"ALIGN="LEFT"VALIGN="TOP">	a set of sessions.</TD></TR><TR><TDWIDTH="20%"ALIGN="RIGHT"VALIGN="TOP"><TTCLASS="PARAMETER"><I>rtpsession</I></TT>&nbsp;:</TD><TDWIDTH="80%"ALIGN="LEFT"VALIGN="TOP"> a rtp session.</TD></TR></TBODY></TABLE><P></P></DIV></DIV><HR><DIVCLASS="REFSECT2"><ANAME="AEN946"></A><H3><ANAME="SESSION-SET-SELECT"></A>session_set_select ()</H3><TABLEBORDER="0"BGCOLOR="#D6E8FF"WIDTH="100%"CELLPADDING="6"><TR><TD><PRECLASS="PROGRAMLISTING">int         session_set_select              (<AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSIONSET">SessionSet</A> *recvs,                                             <AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSIONSET">SessionSet</A> *sends,                                             <AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSIONSET">SessionSet</A> *errors);</PRE></TD></TR></TABLE><P>This function performs similarly as libc select() function, but performs on <AHREF="ortp-rtpsession-api.html#RTPSESSION">RtpSession</A> instead of file descriptors.<AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSION-SET-SELECT">session_set_select</A>() suspends the calling process until some events arrive on one of thethree sets passed in argument. Two of the sets can be NULL.The first set <TTCLASS="PARAMETER"><I>recvs</I></TT> is interpreted as a set of RtpSession waiting for receive events:a new buffer (perhaps empty) is availlable on one or more sessions of the set, or the lastreceive operation with <AHREF="ortp-rtpsession-api.html#RTP-SESSION-RECV-WITH-TS">rtp_session_recv_with_ts</A>() would have finished if it were in blocking mode.The second set is interpreted as a set of RtpSession waiting for send events, i.e. the last<AHREF="ortp-rtpsession-api.html#RTP-SESSION-SEND-WITH-TS">rtp_session_send_with_ts</A>() call on a session would have finished if it were in blocking mode.</P><P>When some events arrived on some of sets, then the function returns and sets are changedto indicate the sessions where events happened.Sessions can be added to sets using <AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSION-SET-SET">session_set_set</A>(), a session has to be tested to be part of a set using <AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSION-SET-IS-SET">session_set_is_set</A>().</P><P></P><DIVCLASS="INFORMALTABLE"><ANAME="AEN964"><P></P><TABLEBORDER="0"WIDTH="100%"BGCOLOR="#FFD0D0"CELLSPACING="0"CELLPADDING="4"CLASS="CALSTABLE"><TBODY><TR><TDWIDTH="20%"ALIGN="RIGHT"VALIGN="TOP"><TTCLASS="PARAMETER"><I>recvs</I></TT>&nbsp;:</TD><TDWIDTH="80%"ALIGN="LEFT"VALIGN="TOP">		a set of rtp sessions to be watched for read events</TD></TR><TR><TDWIDTH="20%"ALIGN="RIGHT"VALIGN="TOP"><TTCLASS="PARAMETER"><I>sends</I></TT>&nbsp;:</TD><TDWIDTH="80%"ALIGN="LEFT"VALIGN="TOP">		a set of rtp sessions to be watched for write events</TD></TR><TR><TDWIDTH="20%"ALIGN="RIGHT"VALIGN="TOP"><TTCLASS="PARAMETER"><I>errors</I></TT>&nbsp;:</TD><TDWIDTH="80%"ALIGN="LEFT"VALIGN="TOP">		a set of rtp sessions to be watched for errors</TD></TR><TR><TDWIDTH="20%"ALIGN="RIGHT"VALIGN="TOP"><SPANCLASS="emphasis"><ICLASS="EMPHASIS">Returns</I></SPAN> :</TD><TDWIDTH="80%"ALIGN="LEFT"VALIGN="TOP"> the number of sessions on which the selected events happened.</TD></TR></TBODY></TABLE><P></P></DIV></DIV><HR><DIVCLASS="REFSECT2"><ANAME="AEN985"></A><H3><ANAME="SESSION-SET-DESTROY"></A>session_set_destroy ()</H3><TABLEBORDER="0"BGCOLOR="#D6E8FF"WIDTH="100%"CELLPADDING="6"><TR><TD><PRECLASS="PROGRAMLISTING">void        session_set_destroy             (<AHREF="ortp-multiplexing-sessions-(in-a-one-thread-design).html#SESSIONSET">SessionSet</A> *set);</PRE></TD></TR></TABLE><P></P><P></P><DIVCLASS="INFORMALTABLE"><ANAME="AEN992"><P></P><TABLEBORDER="0"WIDTH="100%"BGCOLOR="#FFD0D0"CELLSPACING="0"CELLPADDING="4"CLASS="CALSTABLE"><TBODY><TR><TDWIDTH="20%"ALIGN="RIGHT"VALIGN="TOP"><TTCLASS="PARAMETER"><I>set</I></TT>&nbsp;:</TD><TDWIDTH="80%"ALIGN="LEFT"VALIGN="TOP">	a SessionSetDestroys a session set.</TD></TR></TBODY></TABLE><P></P></DIV></DIV></DIV><DIVCLASS="REFSECT1"><ANAME="AEN1001"></A><H2>See Also</H2><P>See the mrtprecv.c and mrtpsend.c programs included in the library that usesthe SessionSet API to send or receive multiple RTP streams in one thread design.</P></DIV><DIVCLASS="NAVFOOTER"><BRCLEAR="all"><BR><TABLEWIDTH="100%"BORDER="0"BGCOLOR="#000000"CELLPADDING="1"CELLSPACING="0"><TR><TDWIDTH="25%"BGCOLOR="#C00000"ALIGN="left"><AHREF="ortp-rtp-payloads-and-profiles.html"><FONTCOLOR="#FFFFFF"SIZE="3"><B>&#60;&#60;&#60; Previous Page</B></FONT></A></TD><TDWIDTH="25%"BGCOLOR="#0000C0"ALIGN="center"><FONTCOLOR="#FFFFFF"SIZE="3"><B><AHREF="book1.html"><FONTCOLOR="#FFFFFF"SIZE="3"><B>Home</B></FONT></A></B></FONT></TD><TDWIDTH="25%"BGCOLOR="#00C000"ALIGN="center"><FONTCOLOR="#FFFFFF"SIZE="3"><B><AHREF="ortpapi.html"><FONTCOLOR="#FFFFFF"SIZE="3"><B>Up</B></FONT></A></B></FONT></TD><TDWIDTH="25%"BGCOLOR="#C00000"ALIGN="right"><AHREF="ortp-telephone-events-(rfc2833)-.html"><FONTCOLOR="#FFFFFF"SIZE="3"><B>Next Page &#62;&#62;&#62;</B></FONT></A></TD></TR><TR><TDCOLSPAN="2"ALIGN="left"><FONTCOLOR="#FFFFFF"SIZE="3"><B>RTP payloads and profiles</B></FONT></TD><TDCOLSPAN="2"ALIGN="right"><FONTCOLOR="#FFFFFF"SIZE="3"><B>Telephone events (RFC2833)</B></FONT></TD></TR></TABLE></DIV></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -