Mercurial > mplayer.hg
annotate stream/librtsp/rtsp_session.c @ 20289:90dfe345a6d6
sync w/ r19738
author | gpoirier |
---|---|
date | Wed, 18 Oct 2006 12:06:11 +0000 |
parents | c19e6c7487b1 |
children | b8f069b793c2 |
rev | line source |
---|---|
9922 | 1 /* |
2 * This file was ported to MPlayer from xine CVS rtsp_session.c,v 1.9 2003/02/11 16:20:40 | |
3 */ | |
4 | |
5 /* | |
6 * Copyright (C) 2000-2002 the xine project | |
7 * | |
8 * This file is part of xine, a free video player. | |
9 * | |
10 * xine is free software; you can redistribute it and/or modify | |
11 * it under the terms of the GNU General Public License as published by | |
12 * the Free Software Foundation; either version 2 of the License, or | |
13 * (at your option) any later version. | |
14 * | |
15 * xine is distributed in the hope that it will be useful, | |
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 * GNU General Public License for more details. | |
19 * | |
20 * You should have received a copy of the GNU General Public License | |
21 * along with this program; if not, write to the Free Software | |
22 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA | |
23 * | |
24 * | |
25 * high level interface to rtsp servers. | |
18829
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
26 * |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
27 * 2006, Benjamin Zores and Vincent Mussard |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
28 * Support for MPEG-TS streaming through RFC compliant RTSP servers |
9922 | 29 */ |
30 | |
31 #include <sys/types.h> | |
10281 | 32 #include "config.h" |
33 #ifndef HAVE_WINSOCK2 | |
9922 | 34 #include <sys/socket.h> |
35 #include <netinet/in.h> | |
36 #include <netdb.h> | |
10281 | 37 #else |
38 #include <winsock2.h> | |
39 #endif | |
9922 | 40 #include <unistd.h> |
41 #include <stdio.h> | |
42 #include <fcntl.h> | |
43 #include <stdlib.h> | |
44 #include <string.h> | |
17351
2518f4341587
OS X compilation fix: Include inttypes.h so that uint32_t is not undefined.
diego
parents:
17332
diff
changeset
|
45 #include <inttypes.h> |
9922 | 46 |
18793 | 47 #include "mp_msg.h" |
19316 | 48 #include "../url.h" |
18829
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
49 #include "../rtp.h" |
9922 | 50 #include "rtsp.h" |
18829
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
51 #include "rtsp_rtp.h" |
9922 | 52 #include "rtsp_session.h" |
18799
e16345b97dab
moved generic rtsp related files from realrtsp to librtsp
ben
parents:
18798
diff
changeset
|
53 #include "../realrtsp/real.h" |
e16345b97dab
moved generic rtsp related files from realrtsp to librtsp
ben
parents:
18798
diff
changeset
|
54 #include "../realrtsp/rmff.h" |
e16345b97dab
moved generic rtsp related files from realrtsp to librtsp
ben
parents:
18798
diff
changeset
|
55 #include "../realrtsp/asmrp.h" |
e16345b97dab
moved generic rtsp related files from realrtsp to librtsp
ben
parents:
18798
diff
changeset
|
56 #include "../realrtsp/xbuffer.h" |
9922 | 57 |
58 /* | |
59 #define LOG | |
60 */ | |
61 | |
18829
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
62 #define RTSP_OPTIONS_PUBLIC "Public" |
18822 | 63 #define RTSP_OPTIONS_SERVER "Server" |
64 #define RTSP_OPTIONS_LOCATION "Location" | |
65 #define RTSP_OPTIONS_REAL "RealChallenge1" | |
66 #define RTSP_SERVER_TYPE_REAL "Real" | |
67 #define RTSP_SERVER_TYPE_HELIX "Helix" | |
68 #define RTSP_SERVER_TYPE_UNKNOWN "unknown" | |
69 | |
9922 | 70 struct rtsp_session_s { |
71 rtsp_t *s; | |
18792
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
72 struct real_rtsp_session_t* real_session; |
18829
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
73 struct rtp_rtsp_session_t* rtp_session; |
9922 | 74 }; |
75 | |
76 //rtsp_session_t *rtsp_session_start(char *mrl) { | |
17332
88adbc28f60b
This patch makes real rtsp tell the server to deliver data at specified
rtognimp
parents:
13676
diff
changeset
|
77 rtsp_session_t *rtsp_session_start(int fd, char **mrl, char *path, char *host, int port, int *redir, uint32_t bandwidth) { |
9922 | 78 |
18792
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
79 rtsp_session_t *rtsp_session = NULL; |
9922 | 80 char *server; |
81 char *mrl_line = NULL; | |
82 rmff_header_t *h; | |
83 | |
18792
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
84 rtsp_session = malloc (sizeof (rtsp_session_t)); |
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
85 rtsp_session->s = NULL; |
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
86 rtsp_session->real_session = NULL; |
18829
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
87 rtsp_session->rtp_session = NULL; |
18792
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
88 |
10199 | 89 //connect: |
90 *redir = 0; | |
9922 | 91 |
92 /* connect to server */ | |
10199 | 93 rtsp_session->s=rtsp_connect(fd,*mrl,path,host,port,NULL); |
9922 | 94 if (!rtsp_session->s) |
95 { | |
18793 | 96 mp_msg (MSGT_OPEN, MSGL_ERR,"rtsp_session: failed to connect to server %s\n", path); |
9922 | 97 free(rtsp_session); |
98 return NULL; | |
99 } | |
100 | |
101 /* looking for server type */ | |
18822 | 102 if (rtsp_search_answers(rtsp_session->s,RTSP_OPTIONS_SERVER)) |
103 server=strdup(rtsp_search_answers(rtsp_session->s,RTSP_OPTIONS_SERVER)); | |
9922 | 104 else { |
18822 | 105 if (rtsp_search_answers(rtsp_session->s,RTSP_OPTIONS_REAL)) |
106 server=strdup(RTSP_SERVER_TYPE_REAL); | |
9922 | 107 else |
18822 | 108 server=strdup(RTSP_SERVER_TYPE_UNKNOWN); |
9922 | 109 } |
18822 | 110 if (strstr(server,RTSP_SERVER_TYPE_REAL) || strstr(server,RTSP_SERVER_TYPE_HELIX)) |
9922 | 111 { |
112 /* we are talking to a real server ... */ | |
113 | |
114 h=real_setup_and_get_header(rtsp_session->s, bandwidth); | |
115 if (!h) { | |
116 /* got an redirect? */ | |
18822 | 117 if (rtsp_search_answers(rtsp_session->s, RTSP_OPTIONS_LOCATION)) |
9922 | 118 { |
119 free(mrl_line); | |
18822 | 120 mrl_line=strdup(rtsp_search_answers(rtsp_session->s, RTSP_OPTIONS_LOCATION)); |
18793 | 121 mp_msg (MSGT_OPEN, MSGL_INFO,"rtsp_session: redirected to %s\n", mrl_line); |
9922 | 122 rtsp_close(rtsp_session->s); |
123 free(server); | |
10199 | 124 free(*mrl); |
125 free(rtsp_session); | |
126 /* tell the caller to redirect, return url to redirect to in mrl */ | |
127 *mrl = mrl_line; | |
128 *redir = 1; | |
129 return NULL; | |
130 // goto connect; /* *shudder* i made a design mistake somewhere */ | |
9922 | 131 } else |
132 { | |
18793 | 133 mp_msg (MSGT_OPEN, MSGL_ERR,"rtsp_session: session can not be established.\n"); |
9922 | 134 rtsp_close(rtsp_session->s); |
18792
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
135 free (server); |
9922 | 136 free(rtsp_session); |
137 return NULL; | |
138 } | |
139 } | |
140 | |
18792
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
141 rtsp_session->real_session = init_real_rtsp_session (); |
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
142 rtsp_session->real_session->header_len = |
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
143 rmff_dump_header (h, (char *) rtsp_session->real_session->header, 1024); |
9922 | 144 |
18792
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
145 rtsp_session->real_session->recv = |
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
146 xbuffer_copyin (rtsp_session->real_session->recv, 0, |
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
147 rtsp_session->real_session->header, |
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
148 rtsp_session->real_session->header_len); |
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
149 |
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
150 rtsp_session->real_session->recv_size = |
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
151 rtsp_session->real_session->header_len; |
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
152 rtsp_session->real_session->recv_read = 0; |
18829
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
153 } else /* not a Real server : try RTP instead */ |
9922 | 154 { |
18829
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
155 char *public = NULL; |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
156 |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
157 /* look for the Public: field in response to RTSP OPTIONS */ |
19595 | 158 if (!(public = rtsp_search_answers (rtsp_session->s, RTSP_OPTIONS_PUBLIC))) |
18829
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
159 { |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
160 rtsp_close (rtsp_session->s); |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
161 free (server); |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
162 free (mrl_line); |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
163 free (rtsp_session); |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
164 return NULL; |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
165 } |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
166 |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
167 /* check for minimalistic RTSP RFC compliance */ |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
168 if (!strstr (public, RTSP_METHOD_DESCRIBE) |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
169 || !strstr (public, RTSP_METHOD_SETUP) |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
170 || !strstr (public, RTSP_METHOD_PLAY) |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
171 || !strstr (public, RTSP_METHOD_TEARDOWN)) |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
172 { |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
173 mp_msg (MSGT_OPEN, MSGL_ERR, |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
174 "Remote server does not meet minimal RTSP 1.0 compliance.\n"); |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
175 rtsp_close (rtsp_session->s); |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
176 free (server); |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
177 free (mrl_line); |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
178 free (rtsp_session); |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
179 return NULL; |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
180 } |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
181 |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
182 rtsp_session->rtp_session = rtp_setup_and_play (rtsp_session->s); |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
183 |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
184 /* neither a Real or an RTP server */ |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
185 if (!rtsp_session->rtp_session) |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
186 { |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
187 mp_msg (MSGT_OPEN, MSGL_ERR, "rtsp_session: unsupported RTSP server. "); |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
188 mp_msg (MSGT_OPEN, MSGL_ERR, "Server type is '%s'.\n", server); |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
189 rtsp_close (rtsp_session->s); |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
190 free (server); |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
191 free (mrl_line); |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
192 free (rtsp_session); |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
193 return NULL; |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
194 } |
9922 | 195 } |
196 free(server); | |
197 | |
198 return rtsp_session; | |
199 } | |
200 | |
201 int rtsp_session_read (rtsp_session_t *this, char *data, int len) { | |
202 | |
18792
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
203 if (this->real_session) { |
9922 | 204 int to_copy=len; |
205 char *dest=data; | |
18792
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
206 char *source = |
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
207 (char *) (this->real_session->recv + this->real_session->recv_read); |
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
208 int fill = this->real_session->recv_size - this->real_session->recv_read; |
9922 | 209 |
210 if (len < 0) return 0; | |
211 while (to_copy > fill) { | |
212 | |
213 memcpy(dest, source, fill); | |
214 to_copy -= fill; | |
215 dest += fill; | |
18792
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
216 this->real_session->recv_read = 0; |
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
217 this->real_session->recv_size = |
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
218 real_get_rdt_chunk (this->s, (char **)&(this->real_session->recv)); |
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
219 if (this->real_session->recv_size < 0) |
13676 | 220 return -1; |
18792
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
221 source = (char *) this->real_session->recv; |
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
222 fill = this->real_session->recv_size; |
9922 | 223 |
18792
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
224 if (this->real_session->recv_size == 0) { |
9922 | 225 #ifdef LOG |
18793 | 226 mp_msg (MSGT_OPEN, MSGL_INFO, "librtsp: %d of %d bytes provided\n", len-to_copy, len); |
9922 | 227 #endif |
228 return len-to_copy; | |
229 } | |
230 } | |
231 | |
232 memcpy(dest, source, to_copy); | |
18792
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
233 this->real_session->recv_read += to_copy; |
9922 | 234 |
235 #ifdef LOG | |
18793 | 236 mp_msg (MSGT_OPEN, MSGL_INFO, "librtsp: %d bytes provided\n", len); |
9922 | 237 #endif |
238 | |
239 return len; | |
18792
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
240 } |
18829
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
241 else if (this->rtp_session) |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
242 { |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
243 int l = 0; |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
244 |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
245 l = read_rtp_from_server (this->rtp_session->rtp_socket, data, len); |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
246 /* send RTSP and RTCP keepalive */ |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
247 rtcp_send_rr (this->s, this->rtp_session); |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
248 |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
249 if (l == 0) |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
250 rtsp_session_end (this); |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
251 |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
252 return l; |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
253 } |
18792
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
254 |
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
255 return 0; |
9922 | 256 } |
257 | |
258 void rtsp_session_end(rtsp_session_t *session) { | |
259 | |
260 rtsp_close(session->s); | |
18792
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
261 if (session->real_session) |
6a015ba5bf45
move real_rtsp init/uninit code to its dedicated place to simplify a bit rtsp session demuxer
ben
parents:
17351
diff
changeset
|
262 free_real_rtsp_session (session->real_session); |
18829
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
263 if (session->rtp_session) |
317e0fd394c5
added new native rtsp demuxer code for mpeg-ts over rtp (now both real and non-real servers should be handled)
ben
parents:
18822
diff
changeset
|
264 rtp_session_free (session->rtp_session); |
9922 | 265 free(session); |
266 } |