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

📄 uclmmbase-rtp.html

📁 UCL Common Code Library Routines common to a number of multimedia tools. The library originates
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<HTML
><HEAD
><TITLE
>RTP</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.59"><LINK
REL="HOME"
TITLE="UCL Common Library Reference"
HREF="book1.html"><LINK
REL="UP"
TITLE="Overview"
HREF="uclmmbase.html"><LINK
REL="PREVIOUS"
TITLE="NETUDP"
HREF="uclmmbase-net-udp.html"><LINK
REL="NEXT"
TITLE="Debug"
HREF="uclmmbase-debug.html"></HEAD
><BODY
CLASS="REFENTRY"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
WIDTH="100%"
BORDER="0"
BGCOLOR="#000000"
CELLPADDING="1"
CELLSPACING="0"
><TR
><TH
COLSPAN="4"
ALIGN="center"
><FONT
COLOR="#FFFFFF"
SIZE="5"
>UCL Common Library Reference</FONT
></TH
></TR
><TR
><TD
WIDTH="25%"
BGCOLOR="#C00000"
ALIGN="left"
><A
HREF="uclmmbase-net-udp.html"
><FONT
COLOR="#FFFFFF"
SIZE="3"
><B
>&#60;&#60;&#60; Previous Page</B
></FONT
></A
></TD
><TD
WIDTH="25%"
BGCOLOR="#0000C0"
ALIGN="center"
><FONT
COLOR="#FFFFFF"
SIZE="3"
><B
><A
HREF="book1.html"
><FONT
COLOR="#FFFFFF"
SIZE="3"
><B
>Home</B
></FONT
></A
></B
></FONT
></TD
><TD
WIDTH="25%"
BGCOLOR="#00C000"
ALIGN="center"
><FONT
COLOR="#FFFFFF"
SIZE="3"
><B
><A
HREF="uclmmbase.html"
><FONT
COLOR="#FFFFFF"
SIZE="3"
><B
>Up</B
></FONT
></A
></B
></FONT
></TD
><TD
WIDTH="25%"
BGCOLOR="#C00000"
ALIGN="right"
><A
HREF="uclmmbase-debug.html"
><FONT
COLOR="#FFFFFF"
SIZE="3"
><B
>Next Page &#62;&#62;&#62;</B
></FONT
></A
></TD
></TR
></TABLE
></DIV
><H1
><A
NAME="UCLMMBASE-RTP"
>RTP</A
></H1
><DIV
CLASS="REFNAMEDIV"
><A
NAME="AEN489"
></A
><H2
>Name</H2
>RTP&nbsp;--&nbsp;Real-Time Transport Protocol (RTP) Implementation.</DIV
><DIV
CLASS="REFSYNOPSISDIV"
><A
NAME="AEN492"
></A
><H2
>Synopsis</H2
><TABLE
BORDER="0"
BGCOLOR="#D6E8FF"
WIDTH="100%"
CELLPADDING="6"
><TR
><TD
><PRE
CLASS="SYNOPSIS"
>&#13;#include &lt;rtp.h&gt;


#define     <A
HREF="uclmmbase-rtp.html#RTP-VERSION-CAPS"
>RTP_VERSION</A
>
#define     <A
HREF="uclmmbase-rtp.html#RTP-MAX-PACKET-LEN-CAPS"
>RTP_MAX_PACKET_LEN</A
>
typedef     <A
HREF="uclmmbase-rtp.html#RTP-PACKET"
>rtp_packet</A
>;
#define     <A
HREF="uclmmbase-rtp.html#RTP-PACKET-HEADER-SIZE-CAPS"
>RTP_PACKET_HEADER_SIZE</A
>
typedef     <A
HREF="uclmmbase-rtp.html#RTCP-SR"
>rtcp_sr</A
>;
typedef     <A
HREF="uclmmbase-rtp.html#RTCP-RR"
>rtcp_rr</A
>;
enum        <A
HREF="uclmmbase-rtp.html#RTCP-SDES-TYPE"
>rtcp_sdes_type</A
>;
typedef     <A
HREF="uclmmbase-rtp.html#RTCP-SDES-ITEM"
>rtcp_sdes_item</A
>;
typedef     <A
HREF="uclmmbase-rtp.html#RTCP-APP"
>rtcp_app</A
>;
<A
HREF="uclmmbase-rtp.html#RTCP-APP"
>rtcp_app</A
>*   (<A
HREF="uclmmbase-rtp.html#RTCP-APP-CALLBACK"
>*rtcp_app_callback</A
>)            (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session,
                                             <GTKDOCLINK
HREF="UINT32-T"
>uint32_t</GTKDOCLINK
> rtp_ts,
                                             int max_size);
enum        <A
HREF="uclmmbase-rtp.html#RTP-EVENT-TYPE"
>rtp_event_type</A
>;
typedef     <A
HREF="uclmmbase-rtp.html#RTP-EVENT"
>rtp_event</A
>;
void        (<A
HREF="uclmmbase-rtp.html#RTP-CALLBACK"
>*rtp_callback</A
>)                 (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session,
                                             <A
HREF="uclmmbase-rtp.html#RTP-EVENT"
>rtp_event</A
> *e);
enum        <A
HREF="uclmmbase-rtp.html#RTP-OPTION"
>rtp_option</A
>;
<GTKDOCLINK
HREF="RTP-T"
>rtp_t</GTKDOCLINK
>       <A
HREF="uclmmbase-rtp.html#RTP-INIT"
>rtp_init</A
>                        (const char *addr,
                                             <GTKDOCLINK
HREF="UINT16-T"
>uint16_t</GTKDOCLINK
> rx_port,
                                             <GTKDOCLINK
HREF="UINT16-T"
>uint16_t</GTKDOCLINK
> tx_port,
                                             int ttl,
                                             <GTKDOCLINK
HREF="DOUBLE"
>double</GTKDOCLINK
> rtcp_bw,
                                             <A
HREF="uclmmbase-rtp.html#RTP-CALLBACK"
>rtp_callback</A
> callback,
                                             <GTKDOCLINK
HREF="UINT8-T"
>uint8_t</GTKDOCLINK
> *userdata);
<GTKDOCLINK
HREF="RTP-T"
>rtp_t</GTKDOCLINK
>       <A
HREF="uclmmbase-rtp.html#RTP-INIT-IF"
>rtp_init_if</A
>                     (const char *addr,
                                             char *iface,
                                             <GTKDOCLINK
HREF="UINT16-T"
>uint16_t</GTKDOCLINK
> rx_port,
                                             <GTKDOCLINK
HREF="UINT16-T"
>uint16_t</GTKDOCLINK
> tx_port,
                                             int ttl,
                                             <GTKDOCLINK
HREF="DOUBLE"
>double</GTKDOCLINK
> rtcp_bw,
                                             <A
HREF="uclmmbase-rtp.html#RTP-CALLBACK"
>rtp_callback</A
> callback,
                                             <GTKDOCLINK
HREF="UINT8-T"
>uint8_t</GTKDOCLINK
> *userdata);
void        <A
HREF="uclmmbase-rtp.html#RTP-SEND-BYE"
>rtp_send_bye</A
>                    (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session);
void        <A
HREF="uclmmbase-rtp.html#RTP-DONE"
>rtp_done</A
>                        (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session);
int         <A
HREF="uclmmbase-rtp.html#RTP-SET-OPTION"
>rtp_set_option</A
>                  (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session,
                                             <A
HREF="uclmmbase-rtp.html#RTP-OPTION"
>rtp_option</A
> optname,
                                             int optval);
int         <A
HREF="uclmmbase-rtp.html#RTP-GET-OPTION"
>rtp_get_option</A
>                  (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session,
                                             <A
HREF="uclmmbase-rtp.html#RTP-OPTION"
>rtp_option</A
> optname,
                                             int *optval);
int         <A
HREF="uclmmbase-rtp.html#RTP-RECV"
>rtp_recv</A
>                        (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session,
                                             struct <GTKDOCLINK
HREF="TIMEVAL"
>timeval</GTKDOCLINK
> *timeout,
                                             <GTKDOCLINK
HREF="UINT32-T"
>uint32_t</GTKDOCLINK
> curr_rtp_ts);
int         <A
HREF="uclmmbase-rtp.html#RTP-SEND-DATA"
>rtp_send_data</A
>                   (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session,
                                             <GTKDOCLINK
HREF="UINT32-T"
>uint32_t</GTKDOCLINK
> rtp_ts,
                                             char pt,
                                             int m,
                                             int cc,
                                             <GTKDOCLINK
HREF="UINT32-T"
>uint32_t</GTKDOCLINK
> csrc[],
                                             char *data,
                                             int data_len,
                                             char *extn,
                                             <GTKDOCLINK
HREF="UINT16-T"
>uint16_t</GTKDOCLINK
> extn_len,
                                             <GTKDOCLINK
HREF="UINT16-T"
>uint16_t</GTKDOCLINK
> extn_type);
void        <A
HREF="uclmmbase-rtp.html#RTP-SEND-CTRL"
>rtp_send_ctrl</A
>                   (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session,
                                             <GTKDOCLINK
HREF="UINT32-T"
>uint32_t</GTKDOCLINK
> rtp_ts,
                                             <A
HREF="uclmmbase-rtp.html#RTCP-APP-CALLBACK"
>rtcp_app_callback</A
> appcallback);
void        <A
HREF="uclmmbase-rtp.html#RTP-UPDATE"
>rtp_update</A
>                      (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session);
<GTKDOCLINK
HREF="UINT32-T"
>uint32_t</GTKDOCLINK
>    <A
HREF="uclmmbase-rtp.html#RTP-MY-SSRC"
>rtp_my_ssrc</A
>                     (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session);
int         <A
HREF="uclmmbase-rtp.html#RTP-ADD-CSRC"
>rtp_add_csrc</A
>                    (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session,
                                             <GTKDOCLINK
HREF="UINT32-T"
>uint32_t</GTKDOCLINK
> csrc);
int         <A
HREF="uclmmbase-rtp.html#RTP-DEL-CSRC"
>rtp_del_csrc</A
>                    (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session,
                                             <GTKDOCLINK
HREF="UINT32-T"
>uint32_t</GTKDOCLINK
> csrc);
int         <A
HREF="uclmmbase-rtp.html#RTP-SET-SDES"
>rtp_set_sdes</A
>                    (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session,
                                             <GTKDOCLINK
HREF="UINT32-T"
>uint32_t</GTKDOCLINK
> ssrc,
                                             <A
HREF="uclmmbase-rtp.html#RTCP-SDES-TYPE"
>rtcp_sdes_type</A
> type,
                                             const char *value,
                                             int length);
const char* <A
HREF="uclmmbase-rtp.html#RTP-GET-SDES"
>rtp_get_sdes</A
>                    (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session,
                                             <GTKDOCLINK
HREF="UINT32-T"
>uint32_t</GTKDOCLINK
> ssrc,
                                             <A
HREF="uclmmbase-rtp.html#RTCP-SDES-TYPE"
>rtcp_sdes_type</A
> type);
const <A
HREF="uclmmbase-rtp.html#RTCP-SR"
>rtcp_sr</A
>* <A
HREF="uclmmbase-rtp.html#RTP-GET-SR"
>rtp_get_sr</A
>                   (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session,
                                             <GTKDOCLINK
HREF="UINT32-T"
>uint32_t</GTKDOCLINK
> ssrc);
const <A
HREF="uclmmbase-rtp.html#RTCP-RR"
>rtcp_rr</A
>* <A
HREF="uclmmbase-rtp.html#RTP-GET-RR"
>rtp_get_rr</A
>                   (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session,
                                             <GTKDOCLINK
HREF="UINT32-T"
>uint32_t</GTKDOCLINK
> reporter,
                                             <GTKDOCLINK
HREF="UINT32-T"
>uint32_t</GTKDOCLINK
> reportee);
int         <A
HREF="uclmmbase-rtp.html#RTP-SET-ENCRYPTION-KEY"
>rtp_set_encryption_key</A
>          (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session,
                                             const char *passphrase);
int         <A
HREF="uclmmbase-rtp.html#RTP-SET-MY-SSRC"
>rtp_set_my_ssrc</A
>                 (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session,
                                             <GTKDOCLINK
HREF="UINT32-T"
>uint32_t</GTKDOCLINK
> ssrc);
char*       <A
HREF="uclmmbase-rtp.html#RTP-GET-ADDR"
>rtp_get_addr</A
>                    (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session);
<GTKDOCLINK
HREF="UINT16-T"
>uint16_t</GTKDOCLINK
>    <A
HREF="uclmmbase-rtp.html#RTP-GET-RX-PORT"
>rtp_get_rx_port</A
>                 (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session);
<GTKDOCLINK
HREF="UINT16-T"
>uint16_t</GTKDOCLINK
>    <A
HREF="uclmmbase-rtp.html#RTP-GET-TX-PORT"
>rtp_get_tx_port</A
>                 (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session);
int         <A
HREF="uclmmbase-rtp.html#RTP-GET-TTL"
>rtp_get_ttl</A
>                     (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session);
<GTKDOCLINK
HREF="UINT8-T"
>uint8_t</GTKDOCLINK
>*    <A
HREF="uclmmbase-rtp.html#RTP-GET-USERDATA"
>rtp_get_userdata</A
>                (struct <GTKDOCLINK
HREF="RTP"
>rtp</GTKDOCLINK
> *session);</PRE
></TD
></TR
></TABLE
></DIV
><DIV
CLASS="REFSECT1"
><A
NAME="AEN598"
></A
><H2
>Description</H2
><P
>&#13;The Real-Time Transport Protocol (RTP) is a protocol for the transport
of audio, video, and other real-time data across IP capable networks.&#13;</P
></DIV
><DIV
CLASS="REFSECT1"
><A
NAME="AEN601"
></A
><H2
>Details</H2
><DIV
CLASS="REFSECT2"
><A
NAME="AEN603"
></A
><H3
><A
NAME="RTP-VERSION-CAPS"
></A
>RTP_VERSION</H3
><TABLE
BORDER="0"
BGCOLOR="#D6E8FF"
WIDTH="100%"
CELLPADDING="6"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>#define RTP_VERSION 2</PRE
></TD
></TR
></TABLE
><P
></P
></DIV
><HR><DIV
CLASS="REFSECT2"
><A
NAME="AEN608"
></A
><H3
><A
NAME="RTP-MAX-PACKET-LEN-CAPS"
></A
>RTP_MAX_PACKET_LEN</H3
><TABLE
BORDER="0"
BGCOLOR="#D6E8FF"
WIDTH="100%"
CELLPADDING="6"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>#define RTP_MAX_PACKET_LEN 1500</PRE
></TD
></TR
></TABLE
><P
></P
></DIV
><HR><DIV
CLASS="REFSECT2"
><A
NAME="AEN613"
></A
><H3
><A
NAME="RTP-PACKET"
></A
>rtp_packet</H3
><TABLE
BORDER="0"
BGCOLOR="#D6E8FF"
WIDTH="100%"
CELLPADDING="6"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>typedef struct {
	/* The following are pointers to the data in the packet as    */
	/* it came off the wire. The packet it read in such that the  */
	/* header maps onto the latter part of this struct, and the   */
	/* fields in this first part of the struct point into it. The */
	/* entire packet can be freed by freeing this struct, without */
	/* having to free the csrc, data and extn blocks separately.  */
	/* WARNING: Don't change the size of the first portion of the */
	/* struct without changing RTP_PACKET_HEADER_SIZE to match.   */
	uint32_t	*csrc;
	char		*data;
	int		 data_len;
	unsigned char	*extn;
	uint16_t	 extn_len;	/* Size of the extension in 32 bit words minus one */
	uint16_t	 extn_type;	/* Extension type field in the RTP packet header   */
	/* The following map directly onto the RTP packet header...   */
#ifdef WORDS_BIGENDIAN
	unsigned short   v:2;		/* packet type                */
	unsigned short   p:1;		/* padding flag               */
	unsigned short   x:1;		/* header extension flag      */
	unsigned short   cc:4;		/* CSRC count                 */
	unsigned short   m:1;		/* marker bit                 */
	unsigned short   pt:7;		/* payload type               */
#else
	unsigned short   cc:4;		/* CSRC count                 */
	unsigned short   x:1;		/* header extension flag      */
	unsigned short   p:1;		/* padding flag               */
	unsigned short   v:2;		/* packet type                */
	unsigned short   pt:7;		/* payload type               */
	unsigned short   m:1;		/* marker bit                 */
#endif
	uint16_t          seq;		/* sequence number            */
	uint32_t          ts;		/* timestamp                  */
	uint32_t          ssrc;		/* synchronization source     */
	/* The csrc list, header extension and data follow, but can't */
	/* be represented in the struct.                              */
} rtp_packet;</PRE
></TD
></TR
></TABLE
><P
>The struct begins with pointers to the data in the packet as
it came off the wire. The packet is read in such that the
header maps onto the latter part of this struct, and the
fields in this first part of the struct point into it. The
entire packet can be freed by freeing this struct, without
having to free the csrc, data and extn blocks separately.
WARNING: Don't change the size of the first portion of the
struct without changing RTP_PACKET_HEADER_SIZE to match.</P
></DIV
><HR><DIV
CLASS="REFSECT2"
><A
NAME="AEN618"
></A
><H3
><A
NAME="RTP-PACKET-HEADER-SIZE-CAPS"
></A
>RTP_PACKET_HEADER_SIZE</H3
><TABLE
BORDER="0"
BGCOLOR="#D6E8FF"
WIDTH="100%"
CELLPADDING="6"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>#define RTP_PACKET_HEADER_SIZE	((sizeof(char *) * 2) + sizeof(uint32_t *) + (2 * sizeof(int)))</PRE
></TD
></TR
></TABLE
><P
>This macro MUST resolve to the offset of the first packet
field in the <A
HREF="uclmmbase-rtp.html#RTP-PACKET"
>rtp_packet</A
> struct, including all padding.
If you change rtp_packet, make sure to change this too.</P
></DIV
><HR><DIV
CLASS="REFSECT2"
><A
NAME="AEN624"
></A
><H3
><A
NAME="RTCP-SR"
></A
>rtcp_sr</H3
><TABLE
BORDER="0"
BGCOLOR="#D6E8FF"
WIDTH="100%"
CELLPADDING="6"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>typedef struct {
	uint32_t         ssrc;
	uint32_t         ntp_sec;
	uint32_t         ntp_frac;
	uint32_t         rtp_ts;
	uint32_t         sender_pcount;
	uint32_t         sender_bcount;
} rtcp_sr;</PRE
></TD
></TR
></TABLE
><P
></P
></DIV
><HR><DIV
CLASS="REFSECT2"
><A
NAME="AEN629"
></A
><H3
><A
NAME="RTCP-RR"
></A
>rtcp_rr</H3
><TABLE
BORDER="0"
BGCOLOR="#D6E8FF"
WIDTH="100%"
CELLPADDING="6"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>typedef struct {
	uint32_t	ssrc;		/* The ssrc to which this RR pertains */
#ifdef WORDS_BIGENDIAN
	uint32_t	fract_lost:8;
	uint32_t	total_lost:24;
#else
	uint32_t	total_lost:24;
	uint32_t	fract_lost:8;

⌨️ 快捷键说明

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