annotate sdp.c @ 6455:3f50c7effad1 libavformat

rtsp: 10l, try to update the correct rtp stream This fixes a bug from rev 22917. Now RTSP streams where the individual RTCP sender reports aren't sent at the same time actually are synced properly.
author mstorsjo
date Fri, 03 Sep 2010 07:10:21 +0000
parents 1c0b01ca809d
children f06908662125
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"
6349
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
24 #include "libavcodec/xiph.h"
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
25 #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
26 #include "internal.h"
2961
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
27 #include "avc.h"
2677
005c0fd8d3eb Explicitly include rtp.h (needed for rtp_get_payload_type())
lucabe
parents: 2541
diff changeset
28 #include "rtp.h"
5525
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
29 #if CONFIG_NETWORK
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
30 #include "network.h"
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
31 #endif
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
32
4206
c3102b189cb6 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 4049
diff changeset
33 #if CONFIG_RTP_MUXER
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
34 #define MAX_EXTRADATA_SIZE ((INT_MAX - 10) / 2)
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
35
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
36 struct sdp_session_level {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
37 int sdp_version; /**< protocol version (currently 0) */
4421
a6849222fccc cosmetics: comment grammar/spelling fixes
diego
parents: 4360
diff changeset
38 int id; /**< session ID */
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
39 int version; /**< session version */
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
40 int start_time; /**< session start time (NTP time, in seconds),
4421
a6849222fccc cosmetics: comment grammar/spelling fixes
diego
parents: 4360
diff changeset
41 or 0 in case of permanent session */
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
42 int end_time; /**< session end time (NTP time, in seconds),
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
43 or 0 if the session is not bounded */
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
44 int ttl; /**< TTL, in case of multicast stream */
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
45 const char *user; /**< username of the session's creator */
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
46 const char *src_addr; /**< IP address of the machine from which the session was created */
6405
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
47 const char *src_type; /**< address type of src_addr */
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
48 const char *dst_addr; /**< destination IP address (can be multicast) */
6405
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
49 const char *dst_type; /**< destination IP address type */
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
50 const char *name; /**< session name (can be an empty string) */
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
51 };
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
52
6405
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
53 static void sdp_write_address(char *buff, int size, const char *dest_addr,
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
54 const char *dest_type, int ttl)
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
55 {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
56 if (dest_addr) {
6405
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
57 if (!dest_type)
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
58 dest_type = "IP4";
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
59 if (ttl > 0) {
6405
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
60 av_strlcatf(buff, size, "c=IN %s %s/%d\r\n", dest_type, dest_addr, ttl);
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
61 } else {
6405
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
62 av_strlcatf(buff, size, "c=IN %s %s\r\n", dest_type, dest_addr);
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
63 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
64 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
65 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
66
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
67 static void sdp_write_header(char *buff, int size, struct sdp_session_level *s)
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
68 {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
69 av_strlcatf(buff, size, "v=%d\r\n"
6405
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
70 "o=- %d %d IN %s %s\r\n"
5291
c17cb5ef9c61 Emit the SDP lines in the correct order
lucabe
parents: 4836
diff changeset
71 "s=%s\r\n",
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
72 s->sdp_version,
6405
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
73 s->id, s->version, s->src_type, s->src_addr,
4360
f0facf61e48d use new metadata API in rtp muxer
aurel
parents: 4206
diff changeset
74 s->name);
6405
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
75 sdp_write_address(buff, size, s->dst_addr, s->dst_type, s->ttl);
5291
c17cb5ef9c61 Emit the SDP lines in the correct order
lucabe
parents: 4836
diff changeset
76 av_strlcatf(buff, size, "t=%d %d\r\n"
c17cb5ef9c61 Emit the SDP lines in the correct order
lucabe
parents: 4836
diff changeset
77 "a=tool:libavformat " AV_STRINGIFY(LIBAVFORMAT_VERSION) "\r\n",
c17cb5ef9c61 Emit the SDP lines in the correct order
lucabe
parents: 4836
diff changeset
78 s->start_time, s->end_time);
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
79 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
80
5525
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
81 #if CONFIG_NETWORK
6405
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
82 static void resolve_destination(char *dest_addr, int size, char *type,
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
83 int type_size)
5525
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
84 {
6408
3a89d4044e01 Simplify resolve_destination in sdp.c further, now that we don't enforce IPv4 any longer
mstorsjo
parents: 6407
diff changeset
85 struct addrinfo hints, *ai;
5525
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
86
6405
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
87 av_strlcpy(type, "IP4", type_size);
5525
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
88 if (!dest_addr[0])
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
89 return;
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
90
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
91 /* 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
92 * 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
93
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
94 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
95 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
96 return;
6409
fe8fadaf5fb6 Reindent
mstorsjo
parents: 6408
diff changeset
97 getnameinfo(ai->ai_addr, ai->ai_addrlen, dest_addr, size,
fe8fadaf5fb6 Reindent
mstorsjo
parents: 6408
diff changeset
98 NULL, 0, NI_NUMERICHOST);
fe8fadaf5fb6 Reindent
mstorsjo
parents: 6408
diff changeset
99 if (ai->ai_family == AF_INET6)
fe8fadaf5fb6 Reindent
mstorsjo
parents: 6408
diff changeset
100 av_strlcpy(type, "IP6", type_size);
5525
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
101 freeaddrinfo(ai);
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 #else
6407
cb173cbeaa96 10l, add new function parameters to resolve_destination for !config_network too
mstorsjo
parents: 6406
diff changeset
104 static void resolve_destination(char *dest_addr, int size, char *type,
cb173cbeaa96 10l, add new function parameters to resolve_destination for !config_network too
mstorsjo
parents: 6406
diff changeset
105 int type_size)
5525
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
106 {
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
107 }
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
108 #endif
f484a964bed1 Make sure the destination address is written as an IP address in the SDP
lucabe
parents: 5501
diff changeset
109
4049
116a6910592c Rename functions in sdp.c for consistency's sake.
stefano
parents: 3788
diff changeset
110 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
111 {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
112 int port;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
113 const char *p;
5500
fc0a32a383d3 Check the URL used for the SDP destination.
lucabe
parents: 5476
diff changeset
114 char proto[32];
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
115
6182
4fc5e0e4e1cd Make ff_url_split() public
mru
parents: 6119
diff changeset
116 av_url_split(proto, sizeof(proto), NULL, 0, dest_addr, size, &port, NULL, 0, url);
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
117
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
118 *ttl = 0;
5500
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 if (strcmp(proto, "rtp")) {
fc0a32a383d3 Check the URL used for the SDP destination.
lucabe
parents: 5476
diff changeset
121 /* The url isn't for the actual rtp sessions,
fc0a32a383d3 Check the URL used for the SDP destination.
lucabe
parents: 5476
diff changeset
122 * don't parse out anything else than the destination.
fc0a32a383d3 Check the URL used for the SDP destination.
lucabe
parents: 5476
diff changeset
123 */
fc0a32a383d3 Check the URL used for the SDP destination.
lucabe
parents: 5476
diff changeset
124 return 0;
fc0a32a383d3 Check the URL used for the SDP destination.
lucabe
parents: 5476
diff changeset
125 }
fc0a32a383d3 Check the URL used for the SDP destination.
lucabe
parents: 5476
diff changeset
126
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
127 p = strchr(url, '?');
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
128 if (p) {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
129 char buff[64];
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
130 int is_multicast = find_info_tag(buff, sizeof(buff), "multicast", p);
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
131
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
132 if (is_multicast) {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
133 if (find_info_tag(buff, sizeof(buff), "ttl", p)) {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
134 *ttl = strtol(buff, NULL, 10);
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
135 } else {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
136 *ttl = 5;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
137 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
138 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
139 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
140
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
141 return port;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
142 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
143
2961
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
144 #define MAX_PSET_SIZE 1024
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
145 static char *extradata2psets(AVCodecContext *c)
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 char *psets, *p;
3051
3ecfaa7d0f3b Missing const, fix warnings:
reimar
parents: 2961
diff changeset
148 const uint8_t *r;
2961
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
149 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
150
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
151 if (c->extradata_size > MAX_EXTRADATA_SIZE) {
4421
a6849222fccc cosmetics: comment grammar/spelling fixes
diego
parents: 4360
diff changeset
152 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
153
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
154 return NULL;
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
155 }
6119
16ca32d9c5f0 Use a bitstream filter for converting the extradata syntax when generating an SDP.
lucabe
parents: 6009
diff changeset
156 if (c->extradata[0] == 1) {
16ca32d9c5f0 Use a bitstream filter for converting the extradata syntax when generating an SDP.
lucabe
parents: 6009
diff changeset
157 uint8_t *dummy_p;
16ca32d9c5f0 Use a bitstream filter for converting the extradata syntax when generating an SDP.
lucabe
parents: 6009
diff changeset
158 int dummy_int;
16ca32d9c5f0 Use a bitstream filter for converting the extradata syntax when generating an SDP.
lucabe
parents: 6009
diff changeset
159 AVBitStreamFilterContext *bsfc= av_bitstream_filter_init("h264_mp4toannexb");
16ca32d9c5f0 Use a bitstream filter for converting the extradata syntax when generating an SDP.
lucabe
parents: 6009
diff changeset
160
16ca32d9c5f0 Use a bitstream filter for converting the extradata syntax when generating an SDP.
lucabe
parents: 6009
diff changeset
161 if (!bsfc) {
16ca32d9c5f0 Use a bitstream filter for converting the extradata syntax when generating an SDP.
lucabe
parents: 6009
diff changeset
162 av_log(c, AV_LOG_ERROR, "Cannot open the h264_mp4toannexb BSF!\n");
16ca32d9c5f0 Use a bitstream filter for converting the extradata syntax when generating an SDP.
lucabe
parents: 6009
diff changeset
163
16ca32d9c5f0 Use a bitstream filter for converting the extradata syntax when generating an SDP.
lucabe
parents: 6009
diff changeset
164 return NULL;
16ca32d9c5f0 Use a bitstream filter for converting the extradata syntax when generating an SDP.
lucabe
parents: 6009
diff changeset
165 }
16ca32d9c5f0 Use a bitstream filter for converting the extradata syntax when generating an SDP.
lucabe
parents: 6009
diff changeset
166 av_bitstream_filter_filter(bsfc, c, NULL, &dummy_p, &dummy_int, NULL, 0, 0);
16ca32d9c5f0 Use a bitstream filter for converting the extradata syntax when generating an SDP.
lucabe
parents: 6009
diff changeset
167 av_bitstream_filter_close(bsfc);
16ca32d9c5f0 Use a bitstream filter for converting the extradata syntax when generating an SDP.
lucabe
parents: 6009
diff changeset
168 }
2961
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
169
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
170 psets = av_mallocz(MAX_PSET_SIZE);
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
171 if (psets == NULL) {
4421
a6849222fccc cosmetics: comment grammar/spelling fixes
diego
parents: 4360
diff changeset
172 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
173 return NULL;
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
174 }
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
175 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
176 p = psets + strlen(pset_string);
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
177 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
178 while (r < c->extradata + c->extradata_size) {
3051
3ecfaa7d0f3b Missing const, fix warnings:
reimar
parents: 2961
diff changeset
179 const uint8_t *r1;
4812
f7bc722a3a36 Only insert the SPS and PPS NALs in sprop-parameter-sets
lucabe
parents: 4502
diff changeset
180 uint8_t nal_type;
2961
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 while (!*(r++));
4812
f7bc722a3a36 Only insert the SPS and PPS NALs in sprop-parameter-sets
lucabe
parents: 4502
diff changeset
183 nal_type = *r & 0x1f;
2961
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
184 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
185 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
186 r = r1;
f7bc722a3a36 Only insert the SPS and PPS NALs in sprop-parameter-sets
lucabe
parents: 4502
diff changeset
187 continue;
f7bc722a3a36 Only insert the SPS and PPS NALs in sprop-parameter-sets
lucabe
parents: 4502
diff changeset
188 }
2961
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
189 if (p != (psets + strlen(pset_string))) {
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
190 *p = ',';
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
191 p++;
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
192 }
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
193 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
194 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
195 av_free(psets);
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
196
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
197 return NULL;
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
198 }
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
199 p += strlen(p);
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
200 r = r1;
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
201 }
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
202
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
203 return psets;
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
204 }
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
205
2916
c2588e541432 Pass a proper context to av_log()
lucabe
parents: 2729
diff changeset
206 static char *extradata2config(AVCodecContext *c)
2521
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
207 {
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
208 char *config;
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
209
2916
c2588e541432 Pass a proper context to av_log()
lucabe
parents: 2729
diff changeset
210 if (c->extradata_size > MAX_EXTRADATA_SIZE) {
4421
a6849222fccc cosmetics: comment grammar/spelling fixes
diego
parents: 4360
diff changeset
211 av_log(c, AV_LOG_ERROR, "Too much extradata!\n");
2521
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
212
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
213 return NULL;
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
214 }
2916
c2588e541432 Pass a proper context to av_log()
lucabe
parents: 2729
diff changeset
215 config = av_malloc(10 + c->extradata_size * 2);
2521
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
216 if (config == NULL) {
4421
a6849222fccc cosmetics: comment grammar/spelling fixes
diego
parents: 4360
diff changeset
217 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
218 return NULL;
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
219 }
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
220 memcpy(config, "; config=", 9);
5883
fd37c39041cd Add a lowercase parameter to ff_data_to_hex
mstorsjo
parents: 5775
diff changeset
221 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
222 config[9 + c->extradata_size * 2] = 0;
2521
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
223
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
224 return config;
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
225 }
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
226
6349
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
227 static char *xiph_extradata2config(AVCodecContext *c)
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
228 {
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
229 char *config, *encoded_config;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
230 uint8_t *header_start[3];
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
231 int headers_len, header_len[3], config_len;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
232 int first_header_size;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
233
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
234 switch (c->codec_id) {
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
235 case CODEC_ID_THEORA:
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
236 first_header_size = 42;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
237 break;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
238 case CODEC_ID_VORBIS:
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
239 first_header_size = 30;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
240 break;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
241 default:
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
242 av_log(c, AV_LOG_ERROR, "Unsupported Xiph codec ID\n");
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
243 return NULL;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
244 }
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
245
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
246 if (ff_split_xiph_headers(c->extradata, c->extradata_size,
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
247 first_header_size, header_start,
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
248 header_len) < 0) {
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
249 av_log(c, AV_LOG_ERROR, "Extradata corrupt.\n");
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
250 return NULL;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
251 }
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
252
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
253 headers_len = header_len[0] + header_len[2];
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
254 config_len = 4 + // count
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
255 3 + // ident
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
256 2 + // packet size
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
257 1 + // header count
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
258 2 + // header size
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
259 headers_len; // and the rest
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
260
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
261 config = av_malloc(config_len);
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
262 if (!config)
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
263 goto xiph_fail;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
264
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
265 encoded_config = av_malloc(AV_BASE64_SIZE(config_len));
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
266 if (!encoded_config) {
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
267 av_free(config);
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
268 goto xiph_fail;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
269 }
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
270
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
271 config[0] = config[1] = config[2] = 0;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
272 config[3] = 1;
6355
3aa7765383b5 rtpenc_xiph: Set the ident value via a define
mstorsjo
parents: 6349
diff changeset
273 config[4] = (RTP_XIPH_IDENT >> 16) & 0xff;
3aa7765383b5 rtpenc_xiph: Set the ident value via a define
mstorsjo
parents: 6349
diff changeset
274 config[5] = (RTP_XIPH_IDENT >> 8) & 0xff;
3aa7765383b5 rtpenc_xiph: Set the ident value via a define
mstorsjo
parents: 6349
diff changeset
275 config[6] = (RTP_XIPH_IDENT ) & 0xff;
6349
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
276 config[7] = (headers_len >> 8) & 0xff;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
277 config[8] = headers_len & 0xff;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
278 config[9] = 2;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
279 config[10] = header_len[0];
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
280 config[11] = 0; // size of comment header; nonexistent
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
281 memcpy(config + 12, header_start[0], header_len[0]);
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
282 memcpy(config + 12 + header_len[0], header_start[2], header_len[2]);
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
283
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
284 av_base64_encode(encoded_config, AV_BASE64_SIZE(config_len),
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
285 config, config_len);
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
286 av_free(config);
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
287
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
288 return encoded_config;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
289
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
290 xiph_fail:
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
291 av_log(c, AV_LOG_ERROR,
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
292 "Not enough memory for configuration string\n");
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
293 return NULL;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
294 }
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
295
4049
116a6910592c Rename functions in sdp.c for consistency's sake.
stefano
parents: 3788
diff changeset
296 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
297 {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
298 char *config = NULL;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
299
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
300 switch (c->codec_id) {
2958
b489d30f8685 Add minimal support for H.264 video in the SDP generator
lucabe
parents: 2916
diff changeset
301 case CODEC_ID_H264:
2961
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
302 if (c->extradata_size) {
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
303 config = extradata2psets(c);
b9a3b81c5eb8 Support out-of-band parameter sets in SDP for H.264 video
lucabe
parents: 2958
diff changeset
304 }
2958
b489d30f8685 Add minimal support for H.264 video in the SDP generator
lucabe
parents: 2916
diff changeset
305 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
306 "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
307 payload_type,
b489d30f8685 Add minimal support for H.264 video in the SDP generator
lucabe
parents: 2916
diff changeset
308 payload_type, config ? config : "");
b489d30f8685 Add minimal support for H.264 video in the SDP generator
lucabe
parents: 2916
diff changeset
309 break;
4814
730b214077ca Add support for H.263 video in the RTP muxer
lucabe
parents: 4812
diff changeset
310 case CODEC_ID_H263:
730b214077ca Add support for H.263 video in the RTP muxer
lucabe
parents: 4812
diff changeset
311 case CODEC_ID_H263P:
730b214077ca Add support for H.263 video in the RTP muxer
lucabe
parents: 4812
diff changeset
312 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
313 break;
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
314 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
315 if (c->extradata_size) {
2916
c2588e541432 Pass a proper context to av_log()
lucabe
parents: 2729
diff changeset
316 config = extradata2config(c);
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
317 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
318 av_strlcatf(buff, size, "a=rtpmap:%d MP4V-ES/90000\r\n"
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
319 "a=fmtp:%d profile-level-id=1%s\r\n",
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
320 payload_type,
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
321 payload_type, config ? config : "");
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
322 break;
2521
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
323 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
324 if (c->extradata_size) {
2916
c2588e541432 Pass a proper context to av_log()
lucabe
parents: 2729
diff changeset
325 config = extradata2config(c);
2521
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
326 } else {
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
327 /* FIXME: maybe we can forge config information based on the
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
328 * codec parameters...
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
329 */
4421
a6849222fccc cosmetics: comment grammar/spelling fixes
diego
parents: 4360
diff changeset
330 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
331 return NULL;
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
332 }
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
333 if (config == NULL) {
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
334 return NULL;
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
335 }
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
336 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
337 "a=fmtp:%d profile-level-id=1;"
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
338 "mode=AAC-hbr;sizelength=13;indexlength=3;"
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
339 "indexdeltalength=3%s\r\n",
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
340 payload_type, c->sample_rate, c->channels,
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
341 payload_type, config);
776b5c2a1bf1 AAC support in the SDP generator
lucabe
parents: 2422
diff changeset
342 break;
2729
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
343 case CODEC_ID_PCM_S16BE:
5474
ff40a9607f5b Use RTP_PT_PRIVATE in sdp.c instead of hardcoding 96.
lucabe
parents: 5291
diff changeset
344 if (payload_type >= RTP_PT_PRIVATE)
2729
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
345 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
346 payload_type,
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
347 c->sample_rate, c->channels);
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
348 break;
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
349 case CODEC_ID_PCM_MULAW:
5474
ff40a9607f5b Use RTP_PT_PRIVATE in sdp.c instead of hardcoding 96.
lucabe
parents: 5291
diff changeset
350 if (payload_type >= RTP_PT_PRIVATE)
2729
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
351 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
352 payload_type,
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
353 c->sample_rate, c->channels);
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
354 break;
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
355 case CODEC_ID_PCM_ALAW:
5474
ff40a9607f5b Use RTP_PT_PRIVATE in sdp.c instead of hardcoding 96.
lucabe
parents: 5291
diff changeset
356 if (payload_type >= RTP_PT_PRIVATE)
2729
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
357 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
358 payload_type,
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
359 c->sample_rate, c->channels);
e808770ba0c6 Add support for some more audio formats
lucabe
parents: 2677
diff changeset
360 break;
4836
bf87d9ffb3ae Add support for AMR audio in the RTP muxer
lucabe
parents: 4814
diff changeset
361 case CODEC_ID_AMR_NB:
bf87d9ffb3ae Add support for AMR audio in the RTP muxer
lucabe
parents: 4814
diff changeset
362 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
363 "a=fmtp:%d octet-align=1\r\n",
bf87d9ffb3ae Add support for AMR audio in the RTP muxer
lucabe
parents: 4814
diff changeset
364 payload_type, c->sample_rate, c->channels,
bf87d9ffb3ae Add support for AMR audio in the RTP muxer
lucabe
parents: 4814
diff changeset
365 payload_type);
bf87d9ffb3ae Add support for AMR audio in the RTP muxer
lucabe
parents: 4814
diff changeset
366 break;
bf87d9ffb3ae Add support for AMR audio in the RTP muxer
lucabe
parents: 4814
diff changeset
367 case CODEC_ID_AMR_WB:
bf87d9ffb3ae Add support for AMR audio in the RTP muxer
lucabe
parents: 4814
diff changeset
368 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
369 "a=fmtp:%d octet-align=1\r\n",
bf87d9ffb3ae Add support for AMR audio in the RTP muxer
lucabe
parents: 4814
diff changeset
370 payload_type, c->sample_rate, c->channels,
bf87d9ffb3ae Add support for AMR audio in the RTP muxer
lucabe
parents: 4814
diff changeset
371 payload_type);
bf87d9ffb3ae Add support for AMR audio in the RTP muxer
lucabe
parents: 4814
diff changeset
372 break;
6349
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
373 case CODEC_ID_VORBIS:
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
374 if (c->extradata_size)
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
375 config = xiph_extradata2config(c);
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
376 else
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
377 av_log(c, AV_LOG_ERROR, "Vorbis configuration info missing\n");
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
378 if (!config)
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
379 return NULL;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
380
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
381 av_strlcatf(buff, size, "a=rtpmap:%d vorbis/%d/%d\r\n"
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
382 "a=fmtp:%d configuration=%s\r\n",
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
383 payload_type, c->sample_rate, c->channels,
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
384 payload_type, config);
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
385 break;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
386 case CODEC_ID_THEORA: {
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
387 const char *pix_fmt;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
388 if (c->extradata_size)
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
389 config = xiph_extradata2config(c);
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
390 else
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
391 av_log(c, AV_LOG_ERROR, "Theora configuation info missing\n");
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
392 if (!config)
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
393 return NULL;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
394
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
395 switch (c->pix_fmt) {
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
396 case PIX_FMT_YUV420P:
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
397 pix_fmt = "YCbCr-4:2:0";
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
398 break;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
399 case PIX_FMT_YUV422P:
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
400 pix_fmt = "YCbCr-4:2:2";
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
401 break;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
402 case PIX_FMT_YUV444P:
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
403 pix_fmt = "YCbCr-4:4:4";
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
404 break;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
405 default:
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
406 av_log(c, AV_LOG_ERROR, "Unsupported pixel format.\n");
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
407 return NULL;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
408 }
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
409
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
410 av_strlcatf(buff, size, "a=rtpmap:%d theora/90000\r\n"
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
411 "a=fmtp:%d delivery-method=inline; "
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
412 "width=%d; height=%d; sampling=%s; "
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
413 "configuration=%s\r\n",
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
414 payload_type, payload_type,
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
415 c->width, c->height, pix_fmt, config);
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
416 break;
93c7a56fa912 Add RTP packetization of Theora and Vorbis
mstorsjo
parents: 6182
diff changeset
417 }
6379
0bcd6a8bc5d5 Add RTP packetization of VP8
mstorsjo
parents: 6355
diff changeset
418 case CODEC_ID_VP8:
0bcd6a8bc5d5 Add RTP packetization of VP8
mstorsjo
parents: 6355
diff changeset
419 av_strlcatf(buff, size, "a=rtpmap:%d VP8/90000\r\n",
0bcd6a8bc5d5 Add RTP packetization of VP8
mstorsjo
parents: 6355
diff changeset
420 payload_type);
0bcd6a8bc5d5 Add RTP packetization of VP8
mstorsjo
parents: 6355
diff changeset
421 break;
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
422 default:
4421
a6849222fccc cosmetics: comment grammar/spelling fixes
diego
parents: 4360
diff changeset
423 /* Nothing special to do here... */
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
424 break;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
425 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
426
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
427 av_free(config);
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
428
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
429 return buff;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
430 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
431
6405
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
432 void ff_sdp_write_media(char *buff, int size, AVCodecContext *c, const char *dest_addr, const char *dest_type, int port, int ttl)
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
433 {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
434 const char *type;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
435 int payload_type;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
436
4502
daca5391106a Rename rtp_get_payload_type() to ff_rtp_get_payload_type(), as it is not
lucabe
parents: 4421
diff changeset
437 payload_type = ff_rtp_get_payload_type(c);
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
438 if (payload_type < 0) {
5910
536e5527c1e0 Define AVMediaType enum, and use it instead of enum CodecType, which
stefano
parents: 5883
diff changeset
439 payload_type = RTP_PT_PRIVATE + (c->codec_type == AVMEDIA_TYPE_AUDIO);
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
440 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
441
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
442 switch (c->codec_type) {
5910
536e5527c1e0 Define AVMediaType enum, and use it instead of enum CodecType, which
stefano
parents: 5883
diff changeset
443 case AVMEDIA_TYPE_VIDEO : type = "video" ; break;
536e5527c1e0 Define AVMediaType enum, and use it instead of enum CodecType, which
stefano
parents: 5883
diff changeset
444 case AVMEDIA_TYPE_AUDIO : type = "audio" ; break;
536e5527c1e0 Define AVMediaType enum, and use it instead of enum CodecType, which
stefano
parents: 5883
diff changeset
445 case AVMEDIA_TYPE_SUBTITLE: type = "text" ; break;
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
446 default : type = "application"; break;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
447 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
448
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
449 av_strlcatf(buff, size, "m=%s %d RTP/AVP %d\r\n", type, port, payload_type);
6405
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
450 sdp_write_address(buff, size, dest_addr, dest_type, ttl);
3113
f1aecf52bac5 Add some information about the stream bitrate, if available
lucabe
parents: 3051
diff changeset
451 if (c->bit_rate) {
f1aecf52bac5 Add some information about the stream bitrate, if available
lucabe
parents: 3051
diff changeset
452 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
453 }
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
454
4049
116a6910592c Rename functions in sdp.c for consistency's sake.
stefano
parents: 3788
diff changeset
455 sdp_write_media_attributes(buff, size, c, payload_type);
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
456 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
457
2317
2adc9f64ecfb Change avf_sdp_create() to get a pre-allocated buffer as input, and to
lucabe
parents: 2316
diff changeset
458 int avf_sdp_create(AVFormatContext *ac[], int n_files, char *buff, int size)
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
459 {
4360
f0facf61e48d use new metadata API in rtp muxer
aurel
parents: 4206
diff changeset
460 AVMetadataTag *title = av_metadata_get(ac[0]->metadata, "title", NULL, 0);
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
461 struct sdp_session_level s;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
462 int i, j, port, ttl;
6405
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
463 char dst[32], dst_type[5];
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
464
2422
f3a8f7d55bd1 Fill the buffer with 0 before writing an SDP in it
lucabe
parents: 2317
diff changeset
465 memset(buff, 0, size);
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
466 memset(&s, 0, sizeof(struct sdp_session_level));
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
467 s.user = "-";
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
468 s.src_addr = "127.0.0.1"; /* FIXME: Properly set this */
6405
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
469 s.src_type = "IP4";
4360
f0facf61e48d use new metadata API in rtp muxer
aurel
parents: 4206
diff changeset
470 s.name = title ? title->value : "No Name";
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
471
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
472 port = 0;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
473 ttl = 0;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
474 if (n_files == 1) {
4049
116a6910592c Rename functions in sdp.c for consistency's sake.
stefano
parents: 3788
diff changeset
475 port = sdp_get_address(dst, sizeof(dst), &ttl, ac[0]->filename);
6405
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
476 resolve_destination(dst, sizeof(dst), dst_type, sizeof(dst_type));
5501
89259491d541 Always set the destination address even if no port was found.
lucabe
parents: 5500
diff changeset
477 if (dst[0]) {
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
478 s.dst_addr = dst;
6405
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
479 s.dst_type = dst_type;
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
480 s.ttl = ttl;
6405
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
481 if (!strcmp(dst_type, "IP6")) {
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
482 s.src_addr = "::1";
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
483 s.src_type = "IP6";
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
484 }
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
485 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
486 }
2317
2adc9f64ecfb Change avf_sdp_create() to get a pre-allocated buffer as input, and to
lucabe
parents: 2316
diff changeset
487 sdp_write_header(buff, size, &s);
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
488
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
489 dst[0] = 0;
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
490 for (i = 0; i < n_files; i++) {
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
491 if (n_files != 1) {
4049
116a6910592c Rename functions in sdp.c for consistency's sake.
stefano
parents: 3788
diff changeset
492 port = sdp_get_address(dst, sizeof(dst), &ttl, ac[i]->filename);
6405
1f6088eaa469 Properly handle IPv6 addresses in the SDP generation
mstorsjo
parents: 6379
diff changeset
493 resolve_destination(dst, sizeof(dst), dst_type, sizeof(dst_type));
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
494 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
495 for (j = 0; j < ac[i]->nb_streams; j++) {
6009
b740f4918397 Make ff_sdp_write_media a lavf-internal function
mstorsjo
parents: 5910
diff changeset
496 ff_sdp_write_media(buff, size,
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
497 ac[i]->streams[j]->codec, dst[0] ? dst : NULL,
6406
189ff77baaf3 Reindent, rewrap lines
mstorsjo
parents: 6405
diff changeset
498 dst_type, (port > 0) ? port + j * 2 : 0, ttl);
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
499 if (port <= 0) {
2317
2adc9f64ecfb Change avf_sdp_create() to get a pre-allocated buffer as input, and to
lucabe
parents: 2316
diff changeset
500 av_strlcatf(buff, size,
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
501 "a=control:streamid=%d\r\n", i + j);
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
502 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
503 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
504 }
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
505
2317
2adc9f64ecfb Change avf_sdp_create() to get a pre-allocated buffer as input, and to
lucabe
parents: 2316
diff changeset
506 return 0;
2284
59d84b0f7d30 Introduce an SDP generator
lucabe
parents:
diff changeset
507 }
2316
5a4914f78109 Fix linking when RTP is disabled and libraries are dynamic
lucabe
parents: 2284
diff changeset
508 #else
2317
2adc9f64ecfb Change avf_sdp_create() to get a pre-allocated buffer as input, and to
lucabe
parents: 2316
diff changeset
509 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
510 {
2317
2adc9f64ecfb Change avf_sdp_create() to get a pre-allocated buffer as input, and to
lucabe
parents: 2316
diff changeset
511 return AVERROR(ENOSYS);
2316
5a4914f78109 Fix linking when RTP is disabled and libraries are dynamic
lucabe
parents: 2284
diff changeset
512 }
6009
b740f4918397 Make ff_sdp_write_media a lavf-internal function
mstorsjo
parents: 5910
diff changeset
513
6414
1c0b01ca809d Make stub version of ff_sdp_write_media() match its prototype
andoma
parents: 6409
diff changeset
514 void ff_sdp_write_media(char *buff, int size, AVCodecContext *c, const char *dest_addr, const char *dest_type, int port, int ttl)
6009
b740f4918397 Make ff_sdp_write_media a lavf-internal function
mstorsjo
parents: 5910
diff changeset
515 {
b740f4918397 Make ff_sdp_write_media a lavf-internal function
mstorsjo
parents: 5910
diff changeset
516 }
2316
5a4914f78109 Fix linking when RTP is disabled and libraries are dynamic
lucabe
parents: 2284
diff changeset
517 #endif