rtsp_client.h
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:9k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is MPEG4IP.
  13.  * 
  14.  * The Initial Developer of the Original Code is Cisco Systems Inc.
  15.  * Portions created by Cisco Systems Inc. are
  16.  * Copyright (C) Cisco Systems Inc. 2000, 2001.  All Rights Reserved.
  17.  * 
  18.  * Contributor(s): 
  19.  *              Bill May        wmay@cisco.com
  20.  */
  21. /*
  22.  * rtsp_client.h - API for generic RTSP client
  23.  */
  24. #ifndef __RTSP_CLIENT_H__
  25. #define __RTSP_CLIENT_H__ 1
  26. #include "systems.h"
  27. #ifdef __cplusplus
  28. extern "C" {
  29. #endif
  30. /*
  31.  * rtsp_command_t.  Structure that contains information required by
  32.  * RTSP for headers when sending commands.  For most commands, 1 or
  33.  * more fields are required to be set.  See prototypes for individual
  34.  * commands for which fields are required.
  35.  */
  36. typedef struct rtsp_command_t {
  37.   char *accept;
  38.   char *accept_encoding;
  39.   char *accept_language;
  40.   char *authorization;
  41.   uint32_t bandwidth;
  42.   uint32_t blocksize;
  43.   char *cachecontrol;
  44.   char *conference;
  45.   char *connection;
  46.   char *from;
  47.   char *proxyauth;
  48.   char *proxyrequire;
  49.   char *range;
  50.   char *referer;
  51.   double scale;
  52.   char *session;
  53.   double speed;
  54.   char *transport;
  55.   char *useragent;
  56.   char *User;
  57. } rtsp_command_t;
  58. /*
  59.  * rtsp_decode_t.  Structure containing information about the response
  60.  * from a RTSP command.  Some information will be required by application.
  61.  * User can move string memory from this structure, but must free memory
  62.  * after using it.  Make sure to set field to NULL for memory moved from
  63.  * this structure.
  64.  * User must call free_decode_response when completed
  65.  */
  66. typedef struct rtsp_decode_t {
  67.   uint32_t content_length;
  68.   uint32_t cseq;
  69.   int close_connection;
  70.   char retcode[4];         /* 3 byte return code -  delimited */
  71.   char *retresp;
  72.   char *body;              /* Contains body returned */
  73.   char *accept;
  74.   char *accept_encoding;
  75.   char *accept_language;
  76.   char *allow_public;
  77.   char *authorization;
  78.   char *bandwidth;
  79.   char *blocksize;
  80.   char *cache_control;
  81.   char *content_base;
  82.   char *content_encoding;
  83.   char *content_language;
  84.   char *content_location;
  85.   char *content_type;
  86.   char *cookie;
  87.   char *date;
  88.   char *expires;
  89.   char *from;
  90.   char *if_modified_since;
  91.   char *last_modified;
  92.   char *location;
  93.   char *proxy_authenticate;
  94.   char *proxy_require;
  95.   char *range;
  96.   char *referer;
  97.   char *require;
  98.   char *retry_after;
  99.   char *rtp_info;
  100.   char *scale;
  101.   char *server;
  102.   char *session;
  103.   char *speed;
  104.   char *transport;
  105.   char *unsupported;
  106.   char *user_agent;
  107.   char *via;
  108.   char *www_authenticate;
  109. } rtsp_decode_t;
  110. /*
  111.  * rtsp_client_t - handle for client session.  Will remain same through
  112.  * redirects.
  113.  */
  114. typedef struct rtsp_client_ rtsp_client_t;
  115.   
  116. /*
  117.  * rtsp_session_t - handle for sessions created with a client.  A session
  118.  * is defined as an stream - audio, video or other.
  119.  */
  120. typedef struct rtsp_session_ rtsp_session_t;
  121.   struct rtp_packet;
  122.   
  123. typedef void (*rtp_callback_f)(void *,
  124.        unsigned char interleaved,
  125.        struct rtp_packet *,
  126.        int len);
  127. /*
  128.  * free_decode_response - call this after the decode response has been
  129.  * used.  It will free all memory under it.
  130.  */
  131. void free_decode_response(rtsp_decode_t *decode);
  132. /*
  133.  * free_rtsp_client - call this after session has been closed to free
  134.  * all memory allocated by the client
  135.  */
  136. void free_rtsp_client(rtsp_client_t *info);
  137. /*
  138.  * rtsp_create_client - create RTSP client.
  139.  * Input - url - url to connect to.
  140.  *         err - pointer to error value (only when return value is NULL)
  141.  *               values should be errno values
  142.  * Output - pointer to rtsp_client handle
  143.  */
  144. rtsp_client_t *rtsp_create_client(const char *url, int *err);
  145. rtsp_client_t *rtsp_create_client_for_rtp_tcp(const char *url,
  146.       int *err);
  147.   typedef int (*rtsp_thread_callback_f)(void *);
  148.   int rtsp_thread_perform_callback(rtsp_client_t *info,
  149.    rtsp_thread_callback_f func,
  150.    void *ud);
  151. int rtsp_thread_set_rtp_callback(rtsp_client_t *info,
  152.  rtp_callback_f rtp_callback,
  153.  rtsp_thread_callback_f rtp_periodic,
  154.  int rtp_interleave,
  155.  void *ud);
  156.   int rtsp_thread_send_rtcp(rtsp_client_t *info,
  157.     int interleave,
  158.     uint8_t *buffer,
  159.     int buflen);
  160. /*
  161.  * rtsp message function error messages
  162.  */
  163. #define RTSP_RESPONSE_RECV_ERROR -1
  164. #define RTSP_RESPONSE_BAD -2
  165. #define RTSP_RESPONSE_MISSING_OR_BAD_PARAM -3
  166. #define RTSP_RESPONSE_BAD_URL -4
  167. #define RTSP_RESPONSE_CLOSED_SOCKET -5
  168. #define RTSP_RESPONSE_REDIRECT  1
  169. #define RTSP_RESPONSE_GOOD 0
  170. #define RTSP_RESPONSE_MALFORM_HEADER -6
  171. /*
  172.  * rtsp_send_describe - send describe message
  173.  * Input - info - handle for session
  174.  *         cmd - pointer to command structure
  175.  *         resp - pointer to pointer for response structure - free after using
  176.  * Output - error message above
  177.  */
  178. int rtsp_send_describe(rtsp_client_t *info,
  179.        rtsp_command_t *cmd,
  180.        rtsp_decode_t **resp);
  181. /*
  182.  * rtsp_send_setup - send set up message.
  183.  *   requires cmd->transport to be set up.
  184.  * Inputs - info - handle for session
  185.  *          url - "sub"-url for this stream.  Should be related to url for
  186.  *                session
  187.  *          cmd - pointer to command structure
  188.  *          session_result - pointer to session handle
  189.  *          decode_result - pointer to pointer for decode result - free when
  190.  *                          done
  191.  * Outputs - see error values
  192.  */
  193. int rtsp_send_setup(rtsp_client_t *info,
  194.     const char *url,
  195.     rtsp_command_t *cmd,
  196.     rtsp_session_t **session_result,
  197.     rtsp_decode_t **decode_result,
  198.     int is_aggregate);
  199. /*
  200.  * rtsp_send_pause - send a pause message for a stream.
  201.  * Inputs - session - handle returned by setup message
  202.  *          cmd - pointer to command structure
  203.  *          decode_result - p to p of decode resp structure - free when done
  204.  * Outputs - see error result
  205.  */
  206. int rtsp_send_pause(rtsp_session_t *session,
  207.     rtsp_command_t *cmd,
  208.     rtsp_decode_t **decode_result);
  209. /*
  210.  * rtsp_send_play - send play message for an set-up session
  211.  * You most likely want to set cmd->range.
  212.  * Inputs - session - handle returned by setup message
  213.  *          cmd - pointer to command structure
  214.  *          decode_result - p to p of decode resp structure - free when done
  215.  * Outputs - see error result
  216.  */
  217. int rtsp_send_play(rtsp_session_t *session,
  218.    rtsp_command_t *cmd,
  219.    rtsp_decode_t **decode_result);
  220. /*
  221.  * rtsp_send_aggregate_play - send play message for an set-up session
  222.  * You most likely want to set cmd->range.
  223.  * Inputs - info - client pointer.
  224.  *          aggregate_url - pointer to aggregate url.
  225.  *          cmd - pointer to command structure
  226.  *          decode_result - p to p of decode resp structure - free when done
  227.  * Outputs - see error result
  228.  */
  229. int rtsp_send_aggregate_play(rtsp_client_t *info,
  230.      const char *aggregate_url,
  231.      rtsp_command_t *cmd,
  232.      rtsp_decode_t **decode_result);
  233. /*
  234.  * rtsp_send_aggregate_pause - send play message for an set-up session
  235.  * You most likely want to set cmd->range.
  236.  * Inputs - info - client pointer.
  237.  *          aggregate_url - pointer to aggregate url.
  238.  *          cmd - pointer to command structure
  239.  *          decode_result - p to p of decode resp structure - free when done
  240.  * Outputs - see error result
  241.  */
  242. int rtsp_send_aggregate_pause(rtsp_client_t *info,
  243.       const char *aggregate_url,
  244.       rtsp_command_t *cmd,
  245.       rtsp_decode_t **decode_result);
  246.   
  247. /*
  248.  * rtsp_send_teardown - send a teardown for a particular session
  249.  * You most likely want to set cmd->range.
  250.  * Inputs - session - handle returned by setup message
  251.  *          cmd - pointer to command structure
  252.  *          decode_result - p to p of decode resp structure - free when done
  253.  * Outputs - see error result
  254.  */
  255. int rtsp_send_teardown(rtsp_session_t *session,
  256.        rtsp_command_t *cmd,
  257.        rtsp_decode_t **decode_result);
  258. int rtsp_send_aggregate_teardown (rtsp_client_t *info,
  259.   const char *url,
  260.   rtsp_command_t *cmd,
  261.   rtsp_decode_t **decode_result);
  262.   
  263. int rtsp_is_url_my_stream(rtsp_session_t *session, const char *url,
  264.   const char *content_base, const char *session_name);
  265.   struct in_addr get_server_ip_address(rtsp_session_t *session);
  266. /*
  267.  * rtsp_set_loglevel - set debug output level.
  268.  * Input - loglevel - levels from syslog.h
  269.  */
  270. void rtsp_set_loglevel(int loglevel);
  271. void rtsp_set_error_func(error_msg_func_t func);
  272. #ifdef __cplusplus
  273. }
  274. #endif
  275. #endif