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

📄 sdp.h

📁 完整的RTP RTSP代码库
💻 H
字号:
/* * The contents of this file are subject to the Mozilla Public * License Version 1.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/MPL/ *  * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. *  * The Original Code is MPEG4IP. *  * The Initial Developer of the Original Code is Cisco Systems Inc. * Portions created by Cisco Systems Inc. are * Copyright (C) Cisco Systems Inc. 2000, 2001.  All Rights Reserved. *  * Contributor(s):  *              Bill May        wmay@cisco.com *//* * sdp.h - Session Description Protocol (RFC 2327) decoder/encoder */#ifndef __SDP_H__#define __SDP_H__#include "mpeg4ip.h"#include "sdp_error.h"#ifndef TRUE#define TRUE 1#define FALSE 0#endif#ifndef NTP_TO_UNIX_TIME #define NTP_TO_UNIX_TIME 2208988800UL#endif#ifdef __cplusplusextern "C" {#endiftypedef struct string_list_t {  struct string_list_t *next;  const char *string_val;} string_list_t;typedef enum {  BANDWIDTH_MODIFIER_NONE = 0,  BANDWIDTH_MODIFIER_CT,  BANDWIDTH_MODIFIER_AS,  BANDWIDTH_MODIFIER_USER,} bandwidth_modifier_t;/* * These next 2 set of defines are used in session_desc_t field conf_type * and media_desc_t field orient_type.  They need to be in this order * (0 for no value, user value at end), so the processing routine in * sdp_decode.c can use an array lookup.  See type_values, orient_values * static variables and the check_value_list_or_user() routine. * If you want to add a value, add before the user value, in the #define * and in the static variable. */#define CONFERENCE_TYPE_NONE      0#define CONFERENCE_TYPE_BROADCAST 1#define CONFERENCE_TYPE_MEETING   2#define CONFERENCE_TYPE_MODERATED 3#define CONFERENCE_TYPE_TEST      4#define CONFERENCE_TYPE_H332      5#define CONFERENCE_TYPE_OTHER     6#define ORIENT_TYPE_NONE 0#define ORIENT_TYPE_PORTRAIT 1#define ORIENT_TYPE_LANDSCAPE 2#define ORIENT_TYPE_SEASCAPE 3#define ORIENT_TYPE_USER 4typedef struct bandwidth_t {  struct bandwidth_t *next;  bandwidth_modifier_t modifier;  unsigned long bandwidth;  const char *user_band;} bandwidth_t;typedef struct category_list_t {  struct category_list_t *next;  uint64_t category;} category_list_t;typedef struct connect_desc_t {  const char *conn_type;  const char *conn_addr;  uint32_t	ttl;  uint32_t	num_addr;  int used;} connect_desc_t;typedef enum key_types_t {  KEY_TYPE_NONE = 0,  KEY_TYPE_PROMPT,  KEY_TYPE_CLEAR,  KEY_TYPE_BASE64,  KEY_TYPE_URI,} key_types_t;typedef struct key_desc_t {  key_types_t key_type;  const char *key;} key_desc_t;typedef struct format_list_t {  struct format_list_t *next;  struct media_desc_t *media;  const char *fmt;  /* rtp map parameters */  const char *rtpmap_name;  uint32_t rtpmap_clock_rate;  uint32_t rtpmap_encode_param;  /* fmtp line */  const char *fmt_param;} format_list_t;/* * Range information - either session or media ranges. * have_range is set if rest is valid. * * if range_is_npt is set, range_start and range_end will have number * of seconds. * * if range_is_npt is false, range_start and range_end will have number * of frames, based on range_smpte_fps frames per second (range_smpte_fps * is 0 for drop-30 format). * * if range_end_infinite is set, range_end is invalid */typedef struct range_desc_t {  /* range information a=range: */  int have_range;  int range_is_npt;  double range_start;  double range_end;  uint16_t range_smpte_fps;  int range_end_infinite;} range_desc_t;/* * basic structure for definition of a media. */typedef struct media_desc_t {  struct media_desc_t *next;  struct session_desc_t *parent;  const char *media;  // media name  const char *proto;  // protocol used  const char *sdplang;  const char *lang;  const char *media_desc;      // description string  const char *control_string;  // rtsp control string  format_list_t *fmt_list;    // All possible formats for this media  string_list_t *unparsed_a_lines;  // Any unparsed lines  int recvonly, sendrecv, sendonly;  uint16_t port;       // ip port  uint16_t num_ports;   // number of ports  uint16_t rtcp_port;   // valid if rtcp_connect.used is true  uint32_t ptime;         int ptime_present;  uint32_t quality;  int quality_present;  double framerate;  int framerate_present;  connect_desc_t  media_connect;  connect_desc_t rtcp_connect;  range_desc_t    media_range;  bandwidth_t  *media_bandwidth;  int orient_type;  const char *orient_user_type;  key_desc_t key;  void *USER;} media_desc_t;typedef struct time_adj_desc_t {  struct time_adj_desc_t *next;  time_t adj_time;  int32_t offset;} time_adj_desc_t;#define MAX_REPEAT_OFFSETS 16typedef struct time_repeat_desc_t {  struct time_repeat_desc_t *next;  uint32_t repeat_interval;  uint32_t active_duration;  uint32_t   offset_cnt;  uint32_t offsets[MAX_REPEAT_OFFSETS];} time_repeat_desc_t;typedef struct session_time_desc_t {  struct session_time_desc_t *next;  time_t start_time;  time_t end_time;  time_repeat_desc_t *repeat;} session_time_desc_t;/* * session_desc_t describe a session.  It can have 1 or more media */typedef struct session_desc_t {  struct session_desc_t *next;  /* o= fields */  const char *orig_username;  uint64_t   session_id;  uint64_t   session_version;  const char *create_addr_type;  const char *create_addr;  category_list_t *category_list;  /* s= field */  const char *session_name;  /* i= field */  const char *session_desc;  /* u = field */  const char *uri;  /* Administrator Information */  string_list_t *admin_phone;  string_list_t *admin_email;  bool no_admin_or_phone;  /* connect info */  connect_desc_t session_connect;  range_desc_t   session_range;  bandwidth_t *session_bandwidth;  /* key type */  key_desc_t key;  const char *keywds;  const char *tool;  const char *charset;  const char *sdplang;  const char *lang;  const char *control_string;  const char *etag;  /* start/end times, in an array form */  session_time_desc_t *time_desc;  time_adj_desc_t *time_adj_desc;  /* media descriptions */  media_desc_t *media;  /* unparsed lines */  string_list_t *unparsed_a_lines;  int conf_type;  const char *conf_type_user;  int recvonly, sendrecv, sendonly;  /* For user use - nothing done internal */  void *USER;} session_desc_t;typedef struct sdp_decode_info_ sdp_decode_info_t;// for use in sdp_dump.cextern const char *type_values[];/* * decode routines.  You want to first create a sdp_decode_info_t * by calling either set_sdp_decode_from_memory or set_sdp_decode_from_filename * * Then call the sdp_decode routine to get the session_desc_t.  It will * handle more than 1 session at a time.  That number will be stored in * *translated. */sdp_decode_info_t *set_sdp_decode_from_memory(const char *memptr);sdp_decode_info_t *set_sdp_decode_from_filename(const char *filename);void sdp_decode_info_free(sdp_decode_info_t *free_p);int sdp_decode(sdp_decode_info_t *decode,	       session_desc_t **retval,	       int *translated);void sdp_free_session_desc(session_desc_t *sptr);  void sdp_free_media_desc(media_desc_t *mptr);/* * dump routines */void session_dump_one(session_desc_t *sptr);void session_dump_list(session_desc_t *sptr);/* * encode routines */int sdp_encode_one_to_file(session_desc_t *sptr,			   const char *filename,			   int append);int sdp_encode_list_to_file(session_desc_t *sptr,			    const char *filename,			    int append);/* * NOTE - sdp_encode_[one|list]_to_memory require freeing memory */int sdp_encode_one_to_memory(session_desc_t *sptr, char **mem);int sdp_encode_list_to_memory (session_desc_t *sptr, char **mem, int *count);void sdp_set_loglevel(int loglevel);void sdp_set_error_func(error_msg_func_t func);    /* utils */format_list_t *sdp_add_format_to_list(media_desc_t *mptr, const char *val);  format_list_t *sdp_add_format_to_end_of_list(format_list_t *list,					       format_list_t *newone);void sdp_free_format_list (format_list_t **fptr);int sdp_add_string_to_list(string_list_t **list, const char *val);  int sdp_add_strings_to_list(string_list_t **list, const char *val);void sdp_free_string_list (string_list_t **list);void sdp_time_offset_to_str(uint32_t val, char *buff, uint32_t buflen);format_list_t *sdp_find_format_in_line(format_list_t *head, const char *lptr);format_list_t *sdp_find_rtpmap_name(format_list_t *head, const char *name);void sdp_smpte_to_str(double value, uint16_t fps, char *buffer, uint buflen);media_desc_t *sdp_find_media_type(session_desc_t *sptr, const char *name);const char *find_unparsed_a_value(string_list_t *lptr, const char *value);#ifdef __cplusplus}#endif#endif /* ifdef __SDP_H__ */

⌨️ 快捷键说明

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