📄 ortp-multiplexing-sessions-(in-a-one-thread-design).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><<< 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 >>></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) -- 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"> #include <ortp.h>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(&(ss)->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> :</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)->mask_pos,&(ss)->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> :</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> :</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)->mask_pos,&(ss)->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> :</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> :</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)->mask_pos,&(ss)->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> :</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> :</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> :</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> :</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> :</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> :</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><<< 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 >>></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 + -