组成 SDP API 的函数调用由共享对象 libcommputil.so.1 提供。此共享对象中的函数可解析 SDP 描述以及检查该描述的语法。
sdp.h 头文件定义 sdp_session_t 结构,该结构包含以下成员:
typedef struct sdp_session {
int sdp_session_version; /* SDP session verstion */
int s_version; /* SDP version field */
sdp_origin_t *s_origin; /* SDP origin field */
char *s_name; /* SDP name field */
char *s_info; /* SDP info field */
char *s_uri; /* SDP uri field */
sdp_list_t *s_email; /* SDP email field */
sdp_list_t *s_phone; /* SDP phone field */
sdp_conn_t *s_conn; /* SDP connection field */
sdp_bandwidth_t *s_bw; /* SDP bandwidth field */
sdp_time_t *s_time; /* SDP time field */
sdp_zone_t *s_zone; /* SDP zone field */
sdp_key_t *s_key; /* SDP key field */
sdp_attr_t *s_attr; /* SDP attribute field */
sdp_media_t *s_media; /* SDP media field */
} sdp_session_t;
sdp_session_version 成员可跟踪该结构的版本。sdp_session_version 成员的初始值为 SDP_SESSION_VERSION_1。
sdp_origin_t 结构包含以下成员:
typedef struct sdp_origin {
char *o_username; /* username of the originating host */
uint64_t o_id; /* session id */
uint64_t o_version; /* version number of this session */
/* description */
char *o_nettype; /* type of network */
char *o_addrtype; /* type of the address */
char *o_address; /* address of the machine from which */
/* session was created */
} sdp_origin_t;
sdp_conn_t 结构包含以下成员:
typedef struct sdp_conn {
char *c_nettype; /* type of network */
char *c_addrtype; /* type of the address */
char *c_address; /* unicast-address or multicast */
/* address */
int c_addrcount; /* number of addresses (case of */
/* multicast address with layered */
/* encodings */
struct sdp_conn *c_next; /* pointer to next connection */
/* structure; there could be several */
/* connection fields in SDP description */
uint8_t c_ttl; /* TTL value for IPV4 multicast address */
} sdp_conn_t;
sdp_bandwidth_t 结构包含以下成员:
typedef struct sdp_bandwidth {
char *b_type; /* info needed to interpret b_value */
uint64_t b_value; /* bandwidth value */
struct sdp_bandwidth *b_next; /* pointer to next bandwidth structure*/
/* (there could be several bandwidth */
/* fields in SDP description */
} sdp_bandwidth_t;
sdp_list_t 结构是 void 指针的链接列表。该结构包含 SDP 字段。对于 email 和 phone 等 SDP 结构字段,void 指针指向字符缓冲区。如果没有预定义元素数目,则可使用该结构来保留信息,就像在重复的 offset 字段中 void 指针保留整数值的情况一样。
sdp_list_t 结构包含以下成员:
typedef struct sdp_list {
void *value; /* string values in case of email, phone and */
/* format (in media field) or integer values */
/* in case of offset (in repeat field) */
struct sdp_list *next; /* pointer to the next node in the list */
} sdp_list_t;
sdp_repeat_t 结构将始终是时间结构 sdp_time_t 的一部分。repeat 字段不会单独出现在 SDP 描述中,该字段始终与 time 字段关联。
sdp_repeat_t 结构包含以下成员:
typedef struct sdp_repeat {
uint64_t r_interval; /* repeat interval, e.g. 86400 seconds */
/* (1 day) */
uint64_t r_duration; /* duration of session, e.g. 3600 */
/* seconds (1 hour) */
sdp_list_t *r_offset; /* linked list of offset values; each */
/* represents offset from start-time */
/* in the SDP time field */
struct sdp_repeat *r_next; /* pointer to next repeat structure; */
/* there could be several repeat */
/* fields in the SDP description */
sdp_time_t 结构包含以下成员:
typedef struct sdp_time {
uint64_t t_start; /* start-time for a session */
uint64_t t_stop; /* end-time for a session */
sdp_repeat_t *t_repeat; /* points to the SDP repeat field */
struct sdp_time *t_next; /* pointer to next time field; there */
/* could there could be several time */
/* fields in SDP description */
} sdp_time_t;
sdp_zone_t 结构包含以下成员:
typedef struct sdp_zone {
uint64_t z_time; /* base time */
char *z_offset; /* offset added to z_time to determine */
/* session time; mainly used for daylight */
/* saving time conversions */
struct sdp_zone *z_next; /* pointer to next zone field; there */
/* could be several <adjustment-time> */
/* <offset> pairs within a zone field */
} sdp_zone_t;
sdp_key_t 结构包含以下成员:
typedef struct sdp_key {
char *k_method; /* key type */
char *k_enckey; /* encryption key */
} sdp_key_t;
sdp_attr_t 结构包含以下成员:
typedef struct sdp_attr {
char *a_name; /* name of the attribute */
char *a_value; /* value of the attribute */
struct sdp_attr *a_next; /* pointer to the next attribute */
/* structure; there could be several */
/* attribute fields within SDP description */
} sdp_attr_t;
sdp_media_t 结构包含以下成员:
typedef struct sdp_media {
char *m_name; /* name of the media such as "audio", */
/* "video", "message" */
uint_t m_port; /* transport layer port information */
int m_portcount; /* number of ports in case of */
/* hierarchically encoded streams */
char *m_proto; /* transport protocol */
sdp_list_t *m_format; /* media format description */
char *m_info; /* media info field */
sdp_conn_t *m_conn; /* media connection field */
sdp_bandwidth_t *m_bw; /* media bandwidth field */
sdp_key_t *m_key; /* media key field */
sdp_attr_t *m_attr; /* media attribute field */
struct sdp_media *m_next; /* pointer to next media structure; */
/* there could be several media */
/* sections in SDP description */
sdp_session_t *m_session; /* pointer to the session structure */
} sdp_media_t;