annotate sdp.c @ 5910:536e5527c1e0 libavformat

Define AVMediaType enum, and use it instead of enum CodecType, which is deprecated and will be dropped at the next major bump.
author stefano
date Tue, 30 Mar 2010 23:30:55 +0000
parents fd37c39041cd
children b740f4918397
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
1 /*
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
2 * copyright (c) 2007 Luca Abeni
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
3 *
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
4 * This file is part of FFmpeg.
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
5 *
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
6 * FFmpeg is free software; you can redistribute it and/or
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
7 * modify it under the terms of the GNU Lesser General Public
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
8 * License as published by the Free Software Foundation; either
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
9 * version 2.1 of the License, or (at your option) any later version.
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
10 *
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
11 * FFmpeg is distributed in the hope that it will be useful,
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
14 * Lesser General Public License for more details.
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
15 *
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
16 * You should have received a copy of the GNU Lesser General Public
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
17 * License along with FFmpeg; if not, write to the Free Software
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
19 */
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
20
5500
fc0a32a383d3 Check the URL used for the SDP destination.
lucabe
parents: 5476
diff changeset
21 #include <string.h>
3286
6f61c3b36632 Use full path for #includes from another directory.
diego
parents: 3276
diff changeset
22 #include "libavutil/avstring.h"
6f61c3b36632 Use full path for #includes from another directory.
diego
parents: 3276
diff changeset
23 #include "libavutil/base64.h"
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
24 #include "avformat.h"
3788
ca6df1ecb412 Export data_to_hex() as private API in lavf, rename to ff_data_to_hex() and
rbultje
parents: 3605
diff changeset
25 #include "internal.h"
2961
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
26 #include "avc.h"
2677
005c0fd8d3eb Explicitly include rtp.h (needed for rtp_get_payload_type())
lucabe
parents: 2541
diff changeset
27 #include "rtp.h"
5525
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
28 #if CONFIG_NETWORK
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
29 #include "network.h"
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
30 #endif
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
31
4206
c3102b189cb6 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 4049
diff changeset
32 #if CONFIG_RTP_MUXER
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
33 #define MAX_EXTRADATA_SIZE ((INT_MAX - 10) / 2)
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
34
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
35 struct sdp_session_level {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
36 int sdp_version; /**< protocol version (currently 0) */
4421
a6849222fccc cosmetics: comment grammar/spelling fixes
diego
parents: 4360
diff changeset
37 int id; /**< session ID */
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
38 int version; /**< session version */
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
39 int start_time; /**< session start time (NTP time, in seconds),
4421
a6849222fccc cosmetics: comment grammar/spelling fixes
diego
parents: 4360
diff changeset
40 or 0 in case of permanent session */
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
41 int end_time; /**< session end time (NTP time, in seconds),
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
42 or 0 if the session is not bounded */
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
43 int ttl; /**< TTL, in case of multicast stream */
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
44 const char *user; /**< username of the session's creator */
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
45 const char *src_addr; /**< IP address of the machine from which the session was created */
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
46 const char *dst_addr; /**< destination IP address (can be multicast) */
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
47 const char *name; /**< session name (can be an empty string) */
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
48 };
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
49
4049
116a6910592c Rename functions in sdp.c for consistency's sake.
stefano
parents: 3788
diff changeset
50 static void sdp_write_address(char *buff, int size, const char *dest_addr, int ttl)
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
51 {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
52 if (dest_addr) {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
53 if (ttl > 0) {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
54 av_strlcatf(buff, size, "c=IN IP4 %s/%d\r\n", dest_addr, ttl);
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
55 } else {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
56 av_strlcatf(buff, size, "c=IN IP4 %s\r\n", dest_addr);
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
57 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
58 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
59 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
60
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
61 static void sdp_write_header(char *buff, int size, struct sdp_session_level *s)
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
62 {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
63 av_strlcatf(buff, size, "v=%d\r\n"
3605
e8d0c5f2ee60 Fix a typo in sdp_write_header(): change "IPV4", which is not a valid
stefano
parents: 3548
diff changeset
64 "o=- %d %d IN IP4 %s\r\n"
5291
c17cb5ef9c61 Emit the SDP lines in the correct order
lucabe
parents: 4836
diff changeset
65 "s=%s\r\n",
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
66 s->sdp_version,
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
67 s->id, s->version, s->src_addr,
4360
f0facf61e48d use new metadata API in rtp muxer
aurel
parents: 4206
diff changeset
68 s->name);
4049
116a6910592c Rename functions in sdp.c for consistency's sake.
stefano
parents: 3788
diff changeset
69 sdp_write_address(buff, size, s->dst_addr, s->ttl);
5291
c17cb5ef9c61 Emit the SDP lines in the correct order
lucabe
parents: 4836
diff changeset
70 av_strlcatf(buff, size, "t=%d %d\r\n"
c17cb5ef9c61 Emit the SDP lines in the correct order
lucabe
parents: 4836
diff changeset
71 "a=tool:libavformat " AV_STRINGIFY(LIBAVFORMAT_VERSION) "\r\n",
c17cb5ef9c61 Emit the SDP lines in the correct order
lucabe
parents: 4836
diff changeset
72 s->start_time, s->end_time);
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
73 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
74
5525
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
75 #if CONFIG_NETWORK
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
76 static void resolve_destination(char *dest_addr, int size)
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
77 {
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
78 struct addrinfo hints, *ai, *cur;
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
79
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
80 if (!dest_addr[0])
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
81 return;
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
82
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
83 /* Resolve the destination, since it must be written
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
84 * as a numeric IP address in the SDP. */
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
85
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
86 memset(&hints, 0, sizeof(hints));
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
87 /* We only support IPv4 addresses in the SDP at the moment. */
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
88 hints.ai_family = AF_INET;
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
89 if (getaddrinfo(dest_addr, NULL, &hints, &ai))
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
90 return;
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
91 for (cur = ai; cur; cur = cur->ai_next) {
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
92 if (cur->ai_family == AF_INET) {
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
93 getnameinfo(cur->ai_addr, cur->ai_addrlen, dest_addr, size,
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
94 NULL, 0, NI_NUMERICHOST);
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
95 break;
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
96 }
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
97 }
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
98 freeaddrinfo(ai);
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
99 }
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
100 #else
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
101 static void resolve_destination(char *dest_addr, int size)
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
102 {
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
103 }
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
104 #endif
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
105
4049
116a6910592c Rename functions in sdp.c for consistency's sake.
stefano
parents: 3788
diff changeset
106 static int sdp_get_address(char *dest_addr, int size, int *ttl, const char *url)
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
107 {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
108 int port;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
109 const char *p;
5500
fc0a32a383d3 Check the URL used for the SDP destination.
lucabe
parents: 5476
diff changeset
110 char proto[32];
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
111
5775
7a123cc24a81 Rename url_split to ff_url_split
mstorsjo
parents: 5525
diff changeset
112 ff_url_split(proto, sizeof(proto), NULL, 0, dest_addr, size, &port, NULL, 0, url);
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
113
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
114 *ttl = 0;
5500
fc0a32a383d3 Check the URL used for the SDP destination.
lucabe
parents: 5476
diff changeset
115
fc0a32a383d3 Check the URL used for the SDP destination.
lucabe
parents: 5476
diff changeset
116 if (strcmp(proto, "rtp")) {
fc0a32a383d3 Check the URL used for the SDP destination.
lucabe
parents: 5476
diff changeset
117 /* The url isn't for the actual rtp sessions,
fc0a32a383d3 Check the URL used for the SDP destination.
lucabe
parents: 5476
diff changeset
118 * don't parse out anything else than the destination.
fc0a32a383d3 Check the URL used for the SDP destination.
lucabe
parents: 5476
diff changeset
119 */
fc0a32a383d3 Check the URL used for the SDP destination.
lucabe
parents: 5476
diff changeset
120 return 0;
fc0a32a383d3 Check the URL used for the SDP destination.
lucabe
parents: 5476
diff changeset
121 }
fc0a32a383d3 Check the URL used for the SDP destination.
lucabe
parents: 5476
diff changeset
122
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
123 p = strchr(url, '?');
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
124 if (p) {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
125 char buff[64];
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
126 int is_multicast = find_info_tag(buff, sizeof(buff), "multicast", p);
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
127
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
128 if (is_multicast) {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
129 if (find_info_tag(buff, sizeof(buff), "ttl", p)) {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
130 *ttl = strtol(buff, NULL, 10);
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
131 } else {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
132 *ttl = 5;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
133 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
134 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
135 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
136
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
137 return port;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
138 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
139
2961
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
140 #define MAX_PSET_SIZE 1024
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
141 static char *extradata2psets(AVCodecContext *c)
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
142 {
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
143 char *psets, *p;
3051
3ecfaa7d0f3b Missing const, fix warnings:
reimar
parents: 2961
diff changeset
144 const uint8_t *r;
2961
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
145 const char *pset_string = "; sprop-parameter-sets=";
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
146
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
147 if (c->extradata_size > MAX_EXTRADATA_SIZE) {
4421
a6849222fccc cosmetics: comment grammar/spelling fixes
diego
parents: 4360
diff changeset
148 av_log(c, AV_LOG_ERROR, "Too much extradata!\n");
2961
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
149
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
150 return NULL;
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
151 }
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
152
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
153 psets = av_mallocz(MAX_PSET_SIZE);
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
154 if (psets == NULL) {
4421
a6849222fccc cosmetics: comment grammar/spelling fixes
diego
parents: 4360
diff changeset
155 av_log(c, AV_LOG_ERROR, "Cannot allocate memory for the parameter sets.\n");
2961
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
156 return NULL;
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
157 }
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
158 memcpy(psets, pset_string, strlen(pset_string));
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
159 p = psets + strlen(pset_string);
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
160 r = ff_avc_find_startcode(c->extradata, c->extradata + c->extradata_size);
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
161 while (r < c->extradata + c->extradata_size) {
3051
3ecfaa7d0f3b Missing const, fix warnings:
reimar
parents: 2961
diff changeset
162 const uint8_t *r1;
4812
f7bc722a3a36 Only insert the SPS and PPS NALs in sprop-parameter-sets
lucabe
parents: 4502
diff changeset
163 uint8_t nal_type;
2961
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
164
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
165 while (!*(r++));
4812
f7bc722a3a36 Only insert the SPS and PPS NALs in sprop-parameter-sets
lucabe
parents: 4502
diff changeset
166 nal_type = *r & 0x1f;
2961
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
167 r1 = ff_avc_find_startcode(r, c->extradata + c->extradata_size);
4812
f7bc722a3a36 Only insert the SPS and PPS NALs in sprop-parameter-sets
lucabe
parents: 4502
diff changeset
168 if (nal_type != 7 && nal_type != 8) { /* Only output SPS and PPS */
f7bc722a3a36 Only insert the SPS and PPS NALs in sprop-parameter-sets
lucabe
parents: 4502
diff changeset
169 r = r1;
f7bc722a3a36 Only insert the SPS and PPS NALs in sprop-parameter-sets
lucabe
parents: 4502
diff changeset
170 continue;
f7bc722a3a36 Only insert the SPS and PPS NALs in sprop-parameter-sets
lucabe
parents: 4502
diff changeset
171 }
2961
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
172 if (p != (psets + strlen(pset_string))) {
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
173 *p = ',';
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
174 p++;
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
175 }
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
176 if (av_base64_encode(p, MAX_PSET_SIZE - (p - psets), r, r1 - r) == NULL) {
4421
a6849222fccc cosmetics: comment grammar/spelling fixes
diego
parents: 4360
diff changeset
177 av_log(c, AV_LOG_ERROR, "Cannot Base64-encode %td %td!\n", MAX_PSET_SIZE - (p - psets), r1 - r);
2961
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
178 av_free(psets);
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
179
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
180 return NULL;
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
181 }
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
182 p += strlen(p);
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
183 r = r1;
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
184 }
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
185
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
186 return psets;
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
187 }
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
188
2916
c2588e541432 Pass a proper context to av_log()
lucabe
parents: 2729
diff changeset
189 static char *extradata2config(AVCodecContext *c)
2521
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
190 {
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
191 char *config;
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
192
2916
c2588e541432 Pass a proper context to av_log()
lucabe
parents: 2729
diff changeset
193 if (c->extradata_size > MAX_EXTRADATA_SIZE) {
4421
a6849222fccc cosmetics: comment grammar/spelling fixes
diego
parents: 4360
diff changeset
194 av_log(c, AV_LOG_ERROR, "Too much extradata!\n");
2521
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
195
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
196 return NULL;
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
197 }
2916
c2588e541432 Pass a proper context to av_log()
lucabe
parents: 2729
diff changeset
198 config = av_malloc(10 + c->extradata_size * 2);
2521
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
199 if (config == NULL) {
4421
a6849222fccc cosmetics: comment grammar/spelling fixes
diego
parents: 4360
diff changeset
200 av_log(c, AV_LOG_ERROR, "Cannot allocate memory for the config info.\n");
2521
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
201 return NULL;
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
202 }
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
203 memcpy(config, "; config=", 9);
5883
fd37c39041cd Add a lowercase parameter to ff_data_to_hex
mstorsjo
parents: 5775
diff changeset
204 ff_data_to_hex(config + 9, c->extradata, c->extradata_size, 0);
2916
c2588e541432 Pass a proper context to av_log()
lucabe
parents: 2729
diff changeset
205 config[9 + c->extradata_size * 2] = 0;
2521
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
206
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
207 return config;
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
208 }
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
209
4049
116a6910592c Rename functions in sdp.c for consistency's sake.
stefano
parents: 3788
diff changeset
210 static char *sdp_write_media_attributes(char *buff, int size, AVCodecContext *c, int payload_type)
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
211 {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
212 char *config = NULL;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
213
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
214 switch (c->codec_id) {
2958
b489d30f8685 Add minimal support for H.264 video in the SDP generator
lucabe
parents: 2916
diff changeset
215 case CODEC_ID_H264:
2961
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
216 if (c->extradata_size) {
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
217 config = extradata2psets(c);
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
218 }
2958
b489d30f8685 Add minimal support for H.264 video in the SDP generator
lucabe
parents: 2916
diff changeset
219 av_strlcatf(buff, size, "a=rtpmap:%d H264/90000\r\n"
b489d30f8685 Add minimal support for H.264 video in the SDP generator
lucabe
parents: 2916
diff changeset
220 "a=fmtp:%d packetization-mode=1%s\r\n",
b489d30f8685 Add minimal support for H.264 video in the SDP generator
lucabe
parents: 2916
diff changeset
221 payload_type,
b489d30f8685 Add minimal support for H.264 video in the SDP generator
lucabe
parents: 2916
diff changeset
222 payload_type, config ? config : "");
b489d30f8685 Add minimal support for H.264 video in the SDP generator
lucabe
parents: 2916
diff changeset
223 break;
4814
730b214077ca Add support for H.263 video in the RTP muxer
lucabe
parents: 4812
diff changeset
224 case CODEC_ID_H263:
730b214077ca Add support for H.263 video in the RTP muxer
lucabe
parents: 4812
diff changeset
225 case CODEC_ID_H263P:
730b214077ca Add support for H.263 video in the RTP muxer
lucabe
parents: 4812
diff changeset
226 av_strlcatf(buff, size, "a=rtpmap:%d H263-2000/90000\r\n", payload_type);
730b214077ca Add support for H.263 video in the RTP muxer
lucabe
parents: 4812
diff changeset
227 break;
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
228 case CODEC_ID_MPEG4:
2541
90609bab3de3 Test extradata_size instead of the CODEC_FLAG_GLOBAL_HEADER flag to check if
lucabe
parents: 2521
diff changeset
229 if (c->extradata_size) {
2916
c2588e541432 Pass a proper context to av_log()
lucabe
parents: 2729
diff changeset
230 config = extradata2config(c);
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
231 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
232 av_strlcatf(buff, size, "a=rtpmap:%d MP4V-ES/90000\r\n"
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
233 "a=fmtp:%d profile-level-id=1%s\r\n",
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
234 payload_type,
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
235 payload_type, config ? config : "");
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
236 break;
2521
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
237 case CODEC_ID_AAC:
2541
90609bab3de3 Test extradata_size instead of the CODEC_FLAG_GLOBAL_HEADER flag to check if
lucabe
parents: 2521
diff changeset
238 if (c->extradata_size) {
2916
c2588e541432 Pass a proper context to av_log()
lucabe
parents: 2729
diff changeset
239 config = extradata2config(c);
2521
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
240 } else {
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
241 /* FIXME: maybe we can forge config information based on the
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
242 * codec parameters...
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
243 */
4421
a6849222fccc cosmetics: comment grammar/spelling fixes
diego
parents: 4360
diff changeset
244 av_log(c, AV_LOG_ERROR, "AAC with no global headers is currently not supported.\n");
2521
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
245 return NULL;
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
246 }
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
247 if (config == NULL) {
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
248 return NULL;
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
249 }
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
250 av_strlcatf(buff, size, "a=rtpmap:%d MPEG4-GENERIC/%d/%d\r\n"
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
251 "a=fmtp:%d profile-level-id=1;"
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
252 "mode=AAC-hbr;sizelength=13;indexlength=3;"
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
253 "indexdeltalength=3%s\r\n",
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
254 payload_type, c->sample_rate, c->channels,
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
255 payload_type, config);
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
256 break;
2729
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
257 case CODEC_ID_PCM_S16BE:
5474
ff40a9607f5b Use RTP_PT_PRIVATE in sdp.c instead of hardcoding 96.
lucabe
parents: 5291
diff changeset
258 if (payload_type >= RTP_PT_PRIVATE)
2729
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
259 av_strlcatf(buff, size, "a=rtpmap:%d L16/%d/%d\r\n",
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
260 payload_type,
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
261 c->sample_rate, c->channels);
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
262 break;
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
263 case CODEC_ID_PCM_MULAW:
5474
ff40a9607f5b Use RTP_PT_PRIVATE in sdp.c instead of hardcoding 96.
lucabe
parents: 5291
diff changeset
264 if (payload_type >= RTP_PT_PRIVATE)
2729
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
265 av_strlcatf(buff, size, "a=rtpmap:%d PCMU/%d/%d\r\n",
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
266 payload_type,
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
267 c->sample_rate, c->channels);
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
268 break;
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
269 case CODEC_ID_PCM_ALAW:
5474
ff40a9607f5b Use RTP_PT_PRIVATE in sdp.c instead of hardcoding 96.
lucabe
parents: 5291
diff changeset
270 if (payload_type >= RTP_PT_PRIVATE)
2729
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
271 av_strlcatf(buff, size, "a=rtpmap:%d PCMA/%d/%d\r\n",
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
272 payload_type,
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
273 c->sample_rate, c->channels);
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
274 break;
4836
bf87d9ffb3ae Add support for AMR audio in the RTP muxer
lucabe
parents: 4814
diff changeset
275 case CODEC_ID_AMR_NB:
bf87d9ffb3ae Add support for AMR audio in the RTP muxer
lucabe
parents: 4814
diff changeset
276 av_strlcatf(buff, size, "a=rtpmap:%d AMR/%d/%d\r\n"
bf87d9ffb3ae Add support for AMR audio in the RTP muxer
lucabe
parents: 4814
diff changeset
277 "a=fmtp:%d octet-align=1\r\n",
bf87d9ffb3ae Add support for AMR audio in the RTP muxer
lucabe
parents: 4814
diff changeset
278 payload_type, c->sample_rate, c->channels,
bf87d9ffb3ae Add support for AMR audio in the RTP muxer
lucabe
parents: 4814
diff changeset
279 payload_type);
bf87d9ffb3ae Add support for AMR audio in the RTP muxer
lucabe
parents: 4814
diff changeset
280 break;
bf87d9ffb3ae Add support for AMR audio in the RTP muxer
lucabe
parents: 4814
diff changeset
281 case CODEC_ID_AMR_WB:
bf87d9ffb3ae Add support for AMR audio in the RTP muxer
lucabe
parents: 4814
diff changeset
282 av_strlcatf(buff, size, "a=rtpmap:%d AMR-WB/%d/%d\r\n"
bf87d9ffb3ae Add support for AMR audio in the RTP muxer
lucabe
parents: 4814
diff changeset
283 "a=fmtp:%d octet-align=1\r\n",
bf87d9ffb3ae Add support for AMR audio in the RTP muxer
lucabe
parents: 4814
diff changeset
284 payload_type, c->sample_rate, c->channels,
bf87d9ffb3ae Add support for AMR audio in the RTP muxer
lucabe
parents: 4814
diff changeset
285 payload_type);
bf87d9ffb3ae Add support for AMR audio in the RTP muxer
lucabe
parents: 4814
diff changeset
286 break;
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
287 default:
4421
a6849222fccc cosmetics: comment grammar/spelling fixes
diego
parents: 4360
diff changeset
288 /* Nothing special to do here... */
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
289 break;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
290 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
291
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
292 av_free(config);
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
293
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
294 return buff;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
295 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
296
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
297 static void sdp_write_media(char *buff, int size, AVCodecContext *c, const char *dest_addr, int port, int ttl)
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
298 {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
299 const char *type;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
300 int payload_type;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
301
4502
daca5391106a Rename rtp_get_payload_type() to ff_rtp_get_payload_type(), as it is not
lucabe
parents: 4421
diff changeset
302 payload_type = ff_rtp_get_payload_type(c);
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
303 if (payload_type < 0) {
5910
536e5527c1e0 Define AVMediaType enum, and use it instead of enum CodecType, which
stefano
parents: 5883
diff changeset
304 payload_type = RTP_PT_PRIVATE + (c->codec_type == AVMEDIA_TYPE_AUDIO);
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
305 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
306
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
307 switch (c->codec_type) {
5910
536e5527c1e0 Define AVMediaType enum, and use it instead of enum CodecType, which
stefano
parents: 5883
diff changeset
308 case AVMEDIA_TYPE_VIDEO : type = "video" ; break;
536e5527c1e0 Define AVMediaType enum, and use it instead of enum CodecType, which
stefano
parents: 5883
diff changeset
309 case AVMEDIA_TYPE_AUDIO : type = "audio" ; break;
536e5527c1e0 Define AVMediaType enum, and use it instead of enum CodecType, which
stefano
parents: 5883
diff changeset
310 case AVMEDIA_TYPE_SUBTITLE: type = "text" ; break;
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
311 default : type = "application"; break;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
312 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
313
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
314 av_strlcatf(buff, size, "m=%s %d RTP/AVP %d\r\n", type, port, payload_type);
4049
116a6910592c Rename functions in sdp.c for consistency's sake.
stefano
parents: 3788
diff changeset
315 sdp_write_address(buff, size, dest_addr, ttl);
3113
f1aecf52bac5 Add some information about the stream bitrate, if available
lucabe
parents: 3051
diff changeset
316 if (c->bit_rate) {
f1aecf52bac5 Add some information about the stream bitrate, if available
lucabe
parents: 3051
diff changeset
317 av_strlcatf(buff, size, "b=AS:%d\r\n", c->bit_rate / 1000);
f1aecf52bac5 Add some information about the stream bitrate, if available
lucabe
parents: 3051
diff changeset
318 }
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
319
4049
116a6910592c Rename functions in sdp.c for consistency's sake.
stefano
parents: 3788
diff changeset
320 sdp_write_media_attributes(buff, size, c, payload_type);
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
321 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
322
2317
2adc9f64ecfb Change avf_sdp_create() to get a pre-allocated buffer as input, and to
lucabe
parents: 2316
diff changeset
323 int avf_sdp_create(AVFormatContext *ac[], int n_files, char *buff, int size)
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
324 {
4360
f0facf61e48d use new metadata API in rtp muxer
aurel
parents: 4206
diff changeset
325 AVMetadataTag *title = av_metadata_get(ac[0]->metadata, "title", NULL, 0);
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
326 struct sdp_session_level s;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
327 int i, j, port, ttl;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
328 char dst[32];
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
329
2422
f3a8f7d55bd1 Fill the buffer with 0 before writing an SDP in it
lucabe
parents: 2317
diff changeset
330 memset(buff, 0, size);
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
331 memset(&s, 0, sizeof(struct sdp_session_level));
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
332 s.user = "-";
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
333 s.src_addr = "127.0.0.1"; /* FIXME: Properly set this */
4360
f0facf61e48d use new metadata API in rtp muxer
aurel
parents: 4206
diff changeset
334 s.name = title ? title->value : "No Name";
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
335
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
336 port = 0;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
337 ttl = 0;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
338 if (n_files == 1) {
4049
116a6910592c Rename functions in sdp.c for consistency's sake.
stefano
parents: 3788
diff changeset
339 port = sdp_get_address(dst, sizeof(dst), &ttl, ac[0]->filename);
5525
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
340 resolve_destination(dst, sizeof(dst));
5501
89259491d541 Always set the destination address even if no port was found.
lucabe
parents: 5500
diff changeset
341 if (dst[0]) {
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
342 s.dst_addr = dst;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
343 s.ttl = ttl;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
344 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
345 }
2317
2adc9f64ecfb Change avf_sdp_create() to get a pre-allocated buffer as input, and to
lucabe
parents: 2316
diff changeset
346 sdp_write_header(buff, size, &s);
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
347
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
348 dst[0] = 0;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
349 for (i = 0; i < n_files; i++) {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
350 if (n_files != 1) {
4049
116a6910592c Rename functions in sdp.c for consistency's sake.
stefano
parents: 3788
diff changeset
351 port = sdp_get_address(dst, sizeof(dst), &ttl, ac[i]->filename);
5525
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
352 resolve_destination(dst, sizeof(dst));
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
353 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
354 for (j = 0; j < ac[i]->nb_streams; j++) {
2317
2adc9f64ecfb Change avf_sdp_create() to get a pre-allocated buffer as input, and to
lucabe
parents: 2316
diff changeset
355 sdp_write_media(buff, size,
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
356 ac[i]->streams[j]->codec, dst[0] ? dst : NULL,
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
357 (port > 0) ? port + j * 2 : 0, ttl);
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
358 if (port <= 0) {
2317
2adc9f64ecfb Change avf_sdp_create() to get a pre-allocated buffer as input, and to
lucabe
parents: 2316
diff changeset
359 av_strlcatf(buff, size,
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
360 "a=control:streamid=%d\r\n", i + j);
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
361 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
362 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
363 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
364
2317
2adc9f64ecfb Change avf_sdp_create() to get a pre-allocated buffer as input, and to
lucabe
parents: 2316
diff changeset
365 return 0;
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
366 }
2316
5a4914f78109 Fix linking when RTP is disabled and libraries are dynamic
lucabe
parents: 2284
diff changeset
367 #else
2317
2adc9f64ecfb Change avf_sdp_create() to get a pre-allocated buffer as input, and to
lucabe
parents: 2316
diff changeset
368 int avf_sdp_create(AVFormatContext *ac[], int n_files, char *buff, int size)
2316
5a4914f78109 Fix linking when RTP is disabled and libraries are dynamic
lucabe
parents: 2284
diff changeset
369 {
2317
2adc9f64ecfb Change avf_sdp_create() to get a pre-allocated buffer as input, and to
lucabe
parents: 2316
diff changeset
370 return AVERROR(ENOSYS);
2316
5a4914f78109 Fix linking when RTP is disabled and libraries are dynamic
lucabe
parents: 2284
diff changeset
371 }
5a4914f78109 Fix linking when RTP is disabled and libraries are dynamic
lucabe
parents: 2284
diff changeset
372 #endif