| OLD | NEW |
| (Empty) |
| 1 /* | |
| 2 * RTSP definitions | |
| 3 * Copyright (c) 2002 Fabrice Bellard. | |
| 4 * | |
| 5 * This file is part of FFmpeg. | |
| 6 * | |
| 7 * FFmpeg is free software; you can redistribute it and/or | |
| 8 * modify it under the terms of the GNU Lesser General Public | |
| 9 * License as published by the Free Software Foundation; either | |
| 10 * version 2.1 of the License, or (at your option) any later version. | |
| 11 * | |
| 12 * FFmpeg is distributed in the hope that it will be useful, | |
| 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 15 * Lesser General Public License for more details. | |
| 16 * | |
| 17 * You should have received a copy of the GNU Lesser General Public | |
| 18 * License along with FFmpeg; if not, write to the Free Software | |
| 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
| 20 */ | |
| 21 #ifndef FFMPEG_RTSP_H | |
| 22 #define FFMPEG_RTSP_H | |
| 23 | |
| 24 #include <stdint.h> | |
| 25 #include "avformat.h" | |
| 26 #include "rtspcodes.h" | |
| 27 #include "rtp.h" | |
| 28 #include "network.h" | |
| 29 | |
| 30 enum RTSPLowerTransport { | |
| 31 RTSP_LOWER_TRANSPORT_UDP = 0, | |
| 32 RTSP_LOWER_TRANSPORT_TCP = 1, | |
| 33 RTSP_LOWER_TRANSPORT_UDP_MULTICAST = 2, | |
| 34 /** | |
| 35 * This is not part of public API and shouldn't be used outside of ffmpeg. | |
| 36 */ | |
| 37 RTSP_LOWER_TRANSPORT_LAST | |
| 38 }; | |
| 39 | |
| 40 #define RTSP_DEFAULT_PORT 554 | |
| 41 #define RTSP_MAX_TRANSPORTS 8 | |
| 42 #define RTSP_TCP_MAX_PACKET_SIZE 1472 | |
| 43 #define RTSP_DEFAULT_NB_AUDIO_CHANNELS 2 | |
| 44 #define RTSP_DEFAULT_AUDIO_SAMPLERATE 44100 | |
| 45 #define RTSP_RTP_PORT_MIN 5000 | |
| 46 #define RTSP_RTP_PORT_MAX 10000 | |
| 47 | |
| 48 typedef struct RTSPTransportField { | |
| 49 int interleaved_min, interleaved_max; /**< interleave ids, if TCP transport
*/ | |
| 50 int port_min, port_max; /**< RTP ports */ | |
| 51 int client_port_min, client_port_max; /**< RTP ports */ | |
| 52 int server_port_min, server_port_max; /**< RTP ports */ | |
| 53 int ttl; /**< ttl value */ | |
| 54 uint32_t destination; /**< destination IP address */ | |
| 55 int transport; | |
| 56 enum RTSPLowerTransport lower_transport; | |
| 57 } RTSPTransportField; | |
| 58 | |
| 59 typedef struct RTSPHeader { | |
| 60 int content_length; | |
| 61 enum RTSPStatusCode status_code; /**< response code from server */ | |
| 62 int nb_transports; | |
| 63 /** in AV_TIME_BASE unit, AV_NOPTS_VALUE if not used */ | |
| 64 int64_t range_start, range_end; | |
| 65 RTSPTransportField transports[RTSP_MAX_TRANSPORTS]; | |
| 66 int seq; /**< sequence number */ | |
| 67 char session_id[512]; | |
| 68 char real_challenge[64]; /**< the RealChallenge1 field from the server */ | |
| 69 char server[64]; | |
| 70 } RTSPHeader; | |
| 71 | |
| 72 enum RTSPClientState { | |
| 73 RTSP_STATE_IDLE, | |
| 74 RTSP_STATE_PLAYING, | |
| 75 RTSP_STATE_PAUSED, | |
| 76 }; | |
| 77 | |
| 78 enum RTSPServerType { | |
| 79 RTSP_SERVER_RTP, /**< Standards-compliant RTP-server */ | |
| 80 RTSP_SERVER_REAL, /**< Realmedia-style server */ | |
| 81 RTSP_SERVER_WMS, /**< Windows Media server */ | |
| 82 RTSP_SERVER_LAST | |
| 83 }; | |
| 84 | |
| 85 enum RTSPTransport { | |
| 86 RTSP_TRANSPORT_RTP, | |
| 87 RTSP_TRANSPORT_RDT, | |
| 88 RTSP_TRANSPORT_LAST | |
| 89 }; | |
| 90 | |
| 91 typedef struct RTSPState { | |
| 92 URLContext *rtsp_hd; /* RTSP TCP connexion handle */ | |
| 93 int nb_rtsp_streams; | |
| 94 struct RTSPStream **rtsp_streams; | |
| 95 | |
| 96 enum RTSPClientState state; | |
| 97 int64_t seek_timestamp; | |
| 98 | |
| 99 /* XXX: currently we use unbuffered input */ | |
| 100 // ByteIOContext rtsp_gb; | |
| 101 int seq; /* RTSP command sequence number */ | |
| 102 char session_id[512]; | |
| 103 enum RTSPTransport transport; | |
| 104 enum RTSPLowerTransport lower_transport; | |
| 105 enum RTSPServerType server_type; | |
| 106 char last_reply[2048]; /* XXX: allocate ? */ | |
| 107 void *cur_tx; | |
| 108 int need_subscription; | |
| 109 enum AVDiscard real_setup_cache[MAX_STREAMS]; | |
| 110 char last_subscription[1024]; | |
| 111 } RTSPState; | |
| 112 | |
| 113 typedef struct RTSPStream { | |
| 114 URLContext *rtp_handle; /* RTP stream handle */ | |
| 115 void *tx_ctx; /* RTP/RDT parse context */ | |
| 116 | |
| 117 int stream_index; /* corresponding stream index, if any. -1 if none (MPEG2TS
case) */ | |
| 118 int interleaved_min, interleaved_max; /* interleave ids, if TCP transport *
/ | |
| 119 char control_url[1024]; /* url for this stream (from SDP) */ | |
| 120 | |
| 121 int sdp_port; /* port (from SDP content - not used in RTSP) */ | |
| 122 struct in_addr sdp_ip; /* IP address (from SDP content - not used in RTSP)
*/ | |
| 123 int sdp_ttl; /* IP TTL (from SDP content - not used in RTSP) */ | |
| 124 int sdp_payload_type; /* payload type - only used in SDP */ | |
| 125 RTPPayloadData rtp_payload_data; /* rtp payload parsing infos from SDP */ | |
| 126 | |
| 127 RTPDynamicProtocolHandler *dynamic_handler; ///< Only valid if it's a dynami
c protocol. (This is the handler structure) | |
| 128 PayloadContext *dynamic_protocol_context; ///< Only valid if it's a dynamic
protocol. (This is any private data associated with the dynamic protocol) | |
| 129 } RTSPStream; | |
| 130 | |
| 131 /** the callback can be used to extend the connection setup/teardown step */ | |
| 132 enum RTSPCallbackAction { | |
| 133 RTSP_ACTION_SERVER_SETUP, | |
| 134 RTSP_ACTION_SERVER_TEARDOWN, | |
| 135 RTSP_ACTION_CLIENT_SETUP, | |
| 136 RTSP_ACTION_CLIENT_TEARDOWN, | |
| 137 }; | |
| 138 | |
| 139 typedef struct RTSPActionServerSetup { | |
| 140 uint32_t ipaddr; | |
| 141 char transport_option[512]; | |
| 142 } RTSPActionServerSetup; | |
| 143 | |
| 144 typedef int FFRTSPCallback(enum RTSPCallbackAction action, | |
| 145 const char *session_id, | |
| 146 char *buf, int buf_size, | |
| 147 void *arg); | |
| 148 | |
| 149 int rtsp_init(void); | |
| 150 void rtsp_parse_line(RTSPHeader *reply, const char *buf); | |
| 151 | |
| 152 #if LIBAVFORMAT_VERSION_INT < (53 << 16) | |
| 153 extern int rtsp_default_protocols; | |
| 154 #endif | |
| 155 extern int rtsp_rtp_port_min; | |
| 156 extern int rtsp_rtp_port_max; | |
| 157 | |
| 158 int rtsp_pause(AVFormatContext *s); | |
| 159 int rtsp_resume(AVFormatContext *s); | |
| 160 | |
| 161 #endif /* FFMPEG_RTSP_H */ | |
| OLD | NEW |