FFmpeg
sdp.c
Go to the documentation of this file.
1 /*
2  * copyright (c) 2007 Luca Abeni
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #include "config_components.h"
22 
23 #include <string.h>
24 #include "libavutil/avstring.h"
25 #include "libavutil/base64.h"
26 #include "libavutil/dict.h"
27 #include "libavutil/parseutils.h"
28 #include "libavutil/opt.h"
29 #include "libavcodec/xiph.h"
30 #include "libavcodec/mpeg4audio.h"
31 #include "avformat.h"
32 #include "internal.h"
33 #include "avc.h"
34 #include "hevc.h"
35 #include "rtp.h"
36 #include "version.h"
37 #if CONFIG_NETWORK
38 #include "network.h"
39 #endif
40 
41 #if CONFIG_RTP_MUXER
42 #define MAX_EXTRADATA_SIZE ((INT_MAX - 10) / 2)
43 
44 struct sdp_session_level {
45  int sdp_version; /**< protocol version (currently 0) */
46  int id; /**< session ID */
47  int version; /**< session version */
48  int start_time; /**< session start time (NTP time, in seconds),
49  or 0 in case of permanent session */
50  int end_time; /**< session end time (NTP time, in seconds),
51  or 0 if the session is not bounded */
52  int ttl; /**< TTL, in case of multicast stream */
53  const char *user; /**< username of the session's creator */
54  const char *src_addr; /**< IP address of the machine from which the session was created */
55  const char *src_type; /**< address type of src_addr */
56  const char *dst_addr; /**< destination IP address (can be multicast) */
57  const char *dst_type; /**< destination IP address type */
58  const char *name; /**< session name (can be an empty string) */
59 };
60 
61 static void sdp_write_address(char *buff, int size, const char *dest_addr,
62  const char *dest_type, int ttl)
63 {
64  if (dest_addr) {
65  if (!dest_type)
66  dest_type = "IP4";
67  if (ttl > 0 && !strcmp(dest_type, "IP4")) {
68  /* The TTL should only be specified for IPv4 multicast addresses,
69  * not for IPv6. */
70  av_strlcatf(buff, size, "c=IN %s %s/%d\r\n", dest_type, dest_addr, ttl);
71  } else {
72  av_strlcatf(buff, size, "c=IN %s %s\r\n", dest_type, dest_addr);
73  }
74  }
75 }
76 
77 static void sdp_write_header(char *buff, int size, struct sdp_session_level *s)
78 {
79  av_strlcatf(buff, size, "v=%d\r\n"
80  "o=- %d %d IN %s %s\r\n"
81  "s=%s\r\n",
82  s->sdp_version,
83  s->id, s->version, s->src_type, s->src_addr,
84  s->name);
85  sdp_write_address(buff, size, s->dst_addr, s->dst_type, s->ttl);
86  av_strlcatf(buff, size, "t=%d %d\r\n"
87  "a=tool:libavformat " AV_STRINGIFY(LIBAVFORMAT_VERSION) "\r\n",
88  s->start_time, s->end_time);
89 }
90 
91 #if CONFIG_NETWORK
92 static int resolve_destination(char *dest_addr, int size, char *type,
93  int type_size)
94 {
95  struct addrinfo hints = { 0 }, *ai;
96  int is_multicast;
97 
98  av_strlcpy(type, "IP4", type_size);
99  if (!dest_addr[0])
100  return 0;
101 
102  /* Resolve the destination, since it must be written
103  * as a numeric IP address in the SDP. */
104 
105  if (getaddrinfo(dest_addr, NULL, &hints, &ai))
106  return 0;
107  getnameinfo(ai->ai_addr, ai->ai_addrlen, dest_addr, size,
108  NULL, 0, NI_NUMERICHOST);
109 #ifdef AF_INET6
110  if (ai->ai_family == AF_INET6)
111  av_strlcpy(type, "IP6", type_size);
112 #endif
113  is_multicast = ff_is_multicast_address(ai->ai_addr);
114  freeaddrinfo(ai);
115  return is_multicast;
116 }
117 #else
118 static int resolve_destination(char *dest_addr, int size, char *type,
119  int type_size)
120 {
121  return 0;
122 }
123 #endif
124 
125 static int sdp_get_address(char *dest_addr, int size, int *ttl, const char *url)
126 {
127  int port;
128  const char *p;
129  char proto[32];
130 
131  av_url_split(proto, sizeof(proto), NULL, 0, dest_addr, size, &port, NULL, 0, url);
132 
133  *ttl = 0;
134 
135  if (strcmp(proto, "rtp") && strcmp(proto, "srtp")) {
136  /* The url isn't for the actual rtp sessions,
137  * don't parse out anything else than the destination.
138  */
139  return 0;
140  }
141 
142  p = strchr(url, '?');
143  if (p) {
144  char buff[64];
145 
146  if (av_find_info_tag(buff, sizeof(buff), "ttl", p)) {
147  *ttl = strtol(buff, NULL, 10);
148  } else {
149  *ttl = 5;
150  }
151  }
152 
153  return port;
154 }
155 
156 #define MAX_PSET_SIZE 1024
157 static int extradata2psets(AVFormatContext *s, const AVCodecParameters *par,
158  char **out)
159 {
160  char *psets, *p;
161  const uint8_t *r;
162  static const char pset_string[] = "; sprop-parameter-sets=";
163  static const char profile_string[] = "; profile-level-id=";
164  uint8_t *extradata = par->extradata;
165  int extradata_size = par->extradata_size;
166  uint8_t *tmpbuf = NULL;
167  const uint8_t *sps = NULL, *sps_end;
168 
169  *out = NULL;
170 
171  if (par->extradata_size > MAX_EXTRADATA_SIZE) {
172  av_log(s, AV_LOG_ERROR, "Too much extradata!\n");
173  return AVERROR_INVALIDDATA;
174  }
175  if (par->extradata[0] == 1) {
176  int ret = ff_avc_write_annexb_extradata(par->extradata, &extradata,
177  &extradata_size);
178  if (ret < 0)
179  return ret;
180 
181  tmpbuf = extradata;
182  }
183 
184  psets = av_mallocz(MAX_PSET_SIZE);
185  if (!psets) {
186  av_log(s, AV_LOG_ERROR, "Cannot allocate memory for the parameter sets.\n");
187  av_free(tmpbuf);
188  return AVERROR(ENOMEM);
189  }
190  memcpy(psets, pset_string, strlen(pset_string));
191  p = psets + strlen(pset_string);
192  r = ff_avc_find_startcode(extradata, extradata + extradata_size);
193  while (r < extradata + extradata_size) {
194  const uint8_t *r1;
195  uint8_t nal_type;
196 
197  while (!*(r++));
198  nal_type = *r & 0x1f;
199  r1 = ff_avc_find_startcode(r, extradata + extradata_size);
200  if (nal_type != 7 && nal_type != 8) { /* Only output SPS and PPS */
201  r = r1;
202  continue;
203  }
204  if (p != (psets + strlen(pset_string))) {
205  if (p - psets >= MAX_PSET_SIZE)
206  goto fail_in_loop;
207  *p = ',';
208  p++;
209  }
210  if (!sps) {
211  sps = r;
212  sps_end = r1;
213  }
214  if (!av_base64_encode(p, MAX_PSET_SIZE - (p - psets), r, r1 - r)) {
215  av_log(s, AV_LOG_ERROR, "Cannot Base64-encode %"PTRDIFF_SPECIFIER" %"PTRDIFF_SPECIFIER"!\n",
216  MAX_PSET_SIZE - (p - psets), r1 - r);
217 fail_in_loop:
218  av_free(psets);
219  av_free(tmpbuf);
220 
221  return AVERROR_INVALIDDATA;
222  }
223  p += strlen(p);
224  r = r1;
225  }
226  if (sps && sps_end - sps >= 4 && p - psets <= MAX_PSET_SIZE - strlen(profile_string) - 7) {
227  memcpy(p, profile_string, strlen(profile_string));
228  p += strlen(p);
229  ff_data_to_hex(p, sps + 1, 3, 0);
230  }
231  av_free(tmpbuf);
232 
233  *out = psets;
234  return 0;
235 }
236 
237 static int extradata2psets_hevc(const AVCodecParameters *par, char **out)
238 {
239  char *psets;
240  uint8_t *extradata = par->extradata;
241  int extradata_size = par->extradata_size;
242  uint8_t *tmpbuf = NULL;
243  int ps_pos[3] = { 0 };
244  static const char * const ps_names[3] = { "vps", "sps", "pps" };
245  int num_arrays, num_nalus;
246  int pos, i, j, ret = 0;
247 
248  *out = NULL;
249 
250  // Convert to hvcc format. Since we need to group multiple NALUs of
251  // the same type, and we might need to convert from one format to the
252  // other anyway, we get away with a little less work by using the hvcc
253  // format.
254  if (par->extradata[0] != 1) {
255  AVIOContext *pb;
256 
257  ret = avio_open_dyn_buf(&pb);
258  if (ret < 0)
259  return ret;
260 
261  ret = ff_isom_write_hvcc(pb, par->extradata, par->extradata_size, 0);
262  if (ret < 0) {
263  avio_close_dyn_buf(pb, &tmpbuf);
264  goto err;
265  }
266  extradata_size = avio_close_dyn_buf(pb, &extradata);
267  tmpbuf = extradata;
268  }
269 
270  if (extradata_size < 23)
271  goto err;
272 
273  num_arrays = extradata[22];
274  pos = 23;
275  for (i = 0; i < num_arrays; i++) {
276  int num_nalus, nalu_type;
277  if (pos + 3 > extradata_size)
278  goto err;
279  nalu_type = extradata[pos] & 0x3f;
280  // Not including libavcodec/hevc.h to avoid confusion between
281  // NAL_* with the same name for both H.264 and HEVC.
282  if (nalu_type == 32) // VPS
283  ps_pos[0] = pos;
284  else if (nalu_type == 33) // SPS
285  ps_pos[1] = pos;
286  else if (nalu_type == 34) // PPS
287  ps_pos[2] = pos;
288  num_nalus = AV_RB16(&extradata[pos + 1]);
289  pos += 3;
290  for (j = 0; j < num_nalus; j++) {
291  int len;
292  if (pos + 2 > extradata_size)
293  goto err;
294  len = AV_RB16(&extradata[pos]);
295  pos += 2;
296  if (pos + len > extradata_size)
297  goto err;
298  pos += len;
299  }
300  }
301  if (!ps_pos[0] || !ps_pos[1] || !ps_pos[2])
302  goto err;
303 
304  psets = av_mallocz(MAX_PSET_SIZE);
305  if (!psets) {
306  ret = AVERROR(ENOMEM);
307  goto err;
308  }
309 
310  psets[0] = '\0';
311 
312  for (i = 0; i < 3; i++) {
313  pos = ps_pos[i];
314 
315  if (i > 0)
316  av_strlcat(psets, "; ", MAX_PSET_SIZE);
317  av_strlcatf(psets, MAX_PSET_SIZE, "sprop-%s=", ps_names[i]);
318 
319  // Skipping boundary checks in the input here; we've already traversed
320  // the whole hvcc structure above without issues
321  num_nalus = AV_RB16(&extradata[pos + 1]);
322  pos += 3;
323  for (j = 0; j < num_nalus; j++) {
324  int len = AV_RB16(&extradata[pos]);
325  int strpos;
326  pos += 2;
327  if (j > 0)
328  av_strlcat(psets, ",", MAX_PSET_SIZE);
329  strpos = strlen(psets);
330  if (!av_base64_encode(psets + strpos, MAX_PSET_SIZE - strpos,
331  &extradata[pos], len)) {
332  av_free(psets);
333  goto err;
334  }
335  pos += len;
336  }
337  }
338  av_free(tmpbuf);
339 
340  *out = psets;
341  return 0;
342 err:
343  if (ret >= 0)
345  av_free(tmpbuf);
346  return ret;
347 }
348 
349 static int extradata2config(AVFormatContext *s, const AVCodecParameters *par,
350  char **out)
351 {
352  char *config;
353 
354  *out = NULL;
355 
356  if (par->extradata_size > MAX_EXTRADATA_SIZE) {
357  av_log(s, AV_LOG_ERROR, "Too much extradata!\n");
358  return AVERROR_INVALIDDATA;
359  }
360  config = av_malloc(10 + par->extradata_size * 2);
361  if (!config) {
362  av_log(s, AV_LOG_ERROR, "Cannot allocate memory for the config info.\n");
363  return AVERROR(ENOMEM);
364  }
365  memcpy(config, "; config=", 9);
366  ff_data_to_hex(config + 9, par->extradata, par->extradata_size, 0);
367 
368  *out = config;
369  return 0;
370 }
371 
372 static int xiph_extradata2config(AVFormatContext *s, const AVCodecParameters *par,
373  char **out)
374 {
375  uint8_t *config;
376  char *encoded_config;
377  const uint8_t *header_start[3];
378  int headers_len, header_len[3], config_len;
379  int first_header_size, ret;
380 
381  *out = NULL;
382 
383  switch (par->codec_id) {
384  case AV_CODEC_ID_THEORA:
385  first_header_size = 42;
386  break;
387  case AV_CODEC_ID_VORBIS:
388  first_header_size = 30;
389  break;
390  default:
391  av_log(s, AV_LOG_ERROR, "Unsupported Xiph codec ID\n");
392  return AVERROR(ENOSYS);
393  }
394 
396  first_header_size, header_start,
397  header_len);
398  if (ret < 0) {
399  av_log(s, AV_LOG_ERROR, "Extradata corrupt.\n");
400  return ret;
401  }
402 
403  headers_len = header_len[0] + header_len[2];
404  config_len = 4 + // count
405  3 + // ident
406  2 + // packet size
407  1 + // header count
408  2 + // header size
409  headers_len; // and the rest
410 
411  config = av_malloc(config_len);
412  if (!config)
413  goto xiph_fail;
414 
415  encoded_config = av_malloc(AV_BASE64_SIZE(config_len));
416  if (!encoded_config) {
417  av_free(config);
418  goto xiph_fail;
419  }
420 
421  config[0] = config[1] = config[2] = 0;
422  config[3] = 1;
423  config[4] = (RTP_XIPH_IDENT >> 16) & 0xff;
424  config[5] = (RTP_XIPH_IDENT >> 8) & 0xff;
425  config[6] = (RTP_XIPH_IDENT ) & 0xff;
426  config[7] = (headers_len >> 8) & 0xff;
427  config[8] = headers_len & 0xff;
428  config[9] = 2;
429  config[10] = header_len[0];
430  config[11] = 0; // size of comment header; nonexistent
431  memcpy(config + 12, header_start[0], header_len[0]);
432  memcpy(config + 12 + header_len[0], header_start[2], header_len[2]);
433 
434  av_base64_encode(encoded_config, AV_BASE64_SIZE(config_len),
435  config, config_len);
436  av_free(config);
437 
438  *out = encoded_config;
439  return 0;
440 
441 xiph_fail:
443  "Not enough memory for configuration string\n");
444  return AVERROR(ENOMEM);
445 }
446 
447 static int latm_context2profilelevel(const AVCodecParameters *par)
448 {
449  /* MP4A-LATM
450  * The RTP payload format specification is described in RFC 3016
451  * The encoding specifications are provided in ISO/IEC 14496-3 */
452 
453  int profile_level = 0x2B;
454 
455  /* TODO: AAC Profile only supports AAC LC Object Type.
456  * Different Object Types should implement different Profile Levels */
457 
458  if (par->sample_rate <= 24000) {
459  if (par->ch_layout.nb_channels <= 2)
460  profile_level = 0x28; // AAC Profile, Level 1
461  } else if (par->sample_rate <= 48000) {
462  if (par->ch_layout.nb_channels <= 2) {
463  profile_level = 0x29; // AAC Profile, Level 2
464  } else if (par->ch_layout.nb_channels <= 5) {
465  profile_level = 0x2A; // AAC Profile, Level 4
466  }
467  } else if (par->sample_rate <= 96000) {
468  if (par->ch_layout.nb_channels <= 5) {
469  profile_level = 0x2B; // AAC Profile, Level 5
470  }
471  }
472 
473  return profile_level;
474 }
475 
476 static int latm_context2config(AVFormatContext *s, const AVCodecParameters *par,
477  char **out)
478 {
479  /* MP4A-LATM
480  * The RTP payload format specification is described in RFC 3016
481  * The encoding specifications are provided in ISO/IEC 14496-3 */
482 
483  uint8_t config_byte[6];
484  int rate_index;
485  char *config;
486 
487  *out = NULL;
488 
489  for (rate_index = 0; rate_index < 16; rate_index++)
490  if (ff_mpeg4audio_sample_rates[rate_index] == par->sample_rate)
491  break;
492  if (rate_index == 16) {
493  av_log(s, AV_LOG_ERROR, "Unsupported sample rate\n");
494  return AVERROR(ENOSYS);
495  }
496 
497  config_byte[0] = 0x40;
498  config_byte[1] = 0;
499  config_byte[2] = 0x20 | rate_index;
500  config_byte[3] = par->ch_layout.nb_channels << 4;
501  config_byte[4] = 0x3f;
502  config_byte[5] = 0xc0;
503 
504  config = av_malloc(6*2+1);
505  if (!config) {
506  av_log(s, AV_LOG_ERROR, "Cannot allocate memory for the config info.\n");
507  return AVERROR(ENOMEM);
508  }
509  ff_data_to_hex(config, config_byte, 6, 1);
510 
511  *out = config;
512  return 0;
513 }
514 
515 static int sdp_write_media_attributes(char *buff, int size, const AVStream *st,
516  int payload_type, AVFormatContext *fmt)
517 {
518  char *config = NULL;
519  const AVCodecParameters *p = st->codecpar;
520  int ret = 0;
521 
522  switch (p->codec_id) {
523  case AV_CODEC_ID_DIRAC:
524  av_strlcatf(buff, size, "a=rtpmap:%d VC2/90000\r\n", payload_type);
525  break;
526  case AV_CODEC_ID_H264: {
527  int mode = 1;
528  if (fmt && fmt->oformat && fmt->oformat->priv_class &&
529  av_opt_flag_is_set(fmt->priv_data, "rtpflags", "h264_mode0"))
530  mode = 0;
531  if (p->extradata_size) {
532  ret = extradata2psets(fmt, p, &config);
533  if (ret < 0)
534  return ret;
535  }
536  av_strlcatf(buff, size, "a=rtpmap:%d H264/90000\r\n"
537  "a=fmtp:%d packetization-mode=%d%s\r\n",
538  payload_type,
539  payload_type, mode, config ? config : "");
540  break;
541  }
542  case AV_CODEC_ID_H261:
543  {
544  const char *pic_fmt = NULL;
545  /* only QCIF and CIF are specified as supported in RFC 4587 */
546  if (p->width == 176 && p->height == 144)
547  pic_fmt = "QCIF=1";
548  else if (p->width == 352 && p->height == 288)
549  pic_fmt = "CIF=1";
550  if (payload_type >= RTP_PT_PRIVATE)
551  av_strlcatf(buff, size, "a=rtpmap:%d H261/90000\r\n", payload_type);
552  if (pic_fmt)
553  av_strlcatf(buff, size, "a=fmtp:%d %s\r\n", payload_type, pic_fmt);
554  break;
555  }
556  case AV_CODEC_ID_H263:
557  case AV_CODEC_ID_H263P:
558  /* a=framesize is required by 3GPP TS 26.234 (PSS). It
559  * actually specifies the maximum video size, but we only know
560  * the current size. This is required for playback on Android
561  * stagefright and on Samsung bada. */
562  if (!fmt || !fmt->oformat->priv_class ||
563  !av_opt_flag_is_set(fmt->priv_data, "rtpflags", "rfc2190") ||
565  av_strlcatf(buff, size, "a=rtpmap:%d H263-2000/90000\r\n"
566  "a=framesize:%d %d-%d\r\n",
567  payload_type,
568  payload_type, p->width, p->height);
569  break;
570  case AV_CODEC_ID_HEVC:
571  if (p->extradata_size) {
572  ret = extradata2psets_hevc(p, &config);
573  if (ret < 0)
574  return ret;
575  }
576  av_strlcatf(buff, size, "a=rtpmap:%d H265/90000\r\n", payload_type);
577  if (config)
578  av_strlcatf(buff, size, "a=fmtp:%d %s\r\n",
579  payload_type, config);
580  break;
581  case AV_CODEC_ID_MPEG4:
582  if (p->extradata_size) {
583  ret = extradata2config(fmt, p, &config);
584  if (ret < 0)
585  return ret;
586  }
587  av_strlcatf(buff, size, "a=rtpmap:%d MP4V-ES/90000\r\n"
588  "a=fmtp:%d profile-level-id=1%s\r\n",
589  payload_type,
590  payload_type, config ? config : "");
591  break;
592  case AV_CODEC_ID_AAC:
593  if (fmt && fmt->oformat && fmt->oformat->priv_class &&
594  av_opt_flag_is_set(fmt->priv_data, "rtpflags", "latm")) {
595  ret = latm_context2config(fmt, p, &config);
596  if (ret < 0)
597  return ret;
598  av_strlcatf(buff, size, "a=rtpmap:%d MP4A-LATM/%d/%d\r\n"
599  "a=fmtp:%d profile-level-id=%d;cpresent=0;config=%s\r\n",
600  payload_type, p->sample_rate, p->ch_layout.nb_channels,
601  payload_type, latm_context2profilelevel(p), config);
602  } else {
603  if (p->extradata_size) {
604  ret = extradata2config(fmt, p, &config);
605  if (ret < 0)
606  return ret;
607  } else {
608  /* FIXME: maybe we can forge config information based on the
609  * codec parameters...
610  */
611  av_log(fmt, AV_LOG_ERROR, "AAC with no global headers is currently not supported.\n");
612  return AVERROR(ENOSYS);
613  }
614  av_strlcatf(buff, size, "a=rtpmap:%d MPEG4-GENERIC/%d/%d\r\n"
615  "a=fmtp:%d profile-level-id=1;"
616  "mode=AAC-hbr;sizelength=13;indexlength=3;"
617  "indexdeltalength=3%s\r\n",
618  payload_type, p->sample_rate, p->ch_layout.nb_channels,
619  payload_type, config);
620  }
621  break;
623  if (payload_type >= RTP_PT_PRIVATE)
624  av_strlcatf(buff, size, "a=rtpmap:%d L16/%d/%d\r\n",
625  payload_type,
627  break;
629  if (payload_type >= RTP_PT_PRIVATE)
630  av_strlcatf(buff, size, "a=rtpmap:%d L24/%d/%d\r\n",
631  payload_type,
633  break;
635  if (payload_type >= RTP_PT_PRIVATE)
636  av_strlcatf(buff, size, "a=rtpmap:%d PCMU/%d/%d\r\n",
637  payload_type,
639  break;
641  if (payload_type >= RTP_PT_PRIVATE)
642  av_strlcatf(buff, size, "a=rtpmap:%d PCMA/%d/%d\r\n",
643  payload_type,
645  break;
646  case AV_CODEC_ID_AMR_NB:
647  av_strlcatf(buff, size, "a=rtpmap:%d AMR/%d/%d\r\n"
648  "a=fmtp:%d octet-align=1\r\n",
649  payload_type, p->sample_rate, p->ch_layout.nb_channels,
650  payload_type);
651  break;
652  case AV_CODEC_ID_AMR_WB:
653  av_strlcatf(buff, size, "a=rtpmap:%d AMR-WB/%d/%d\r\n"
654  "a=fmtp:%d octet-align=1\r\n",
655  payload_type, p->sample_rate, p->ch_layout.nb_channels,
656  payload_type);
657  break;
658  case AV_CODEC_ID_VORBIS:
659  if (p->extradata_size)
660  ret = xiph_extradata2config(fmt, p, &config);
661  else {
662  av_log(fmt, AV_LOG_ERROR, "Vorbis configuration info missing\n");
664  }
665  if (ret < 0)
666  return ret;
667 
668  av_strlcatf(buff, size, "a=rtpmap:%d vorbis/%d/%d\r\n"
669  "a=fmtp:%d configuration=%s\r\n",
670  payload_type, p->sample_rate, p->ch_layout.nb_channels,
671  payload_type, config);
672  break;
673  case AV_CODEC_ID_THEORA: {
674  const char *pix_fmt;
675  switch (p->format) {
676  case AV_PIX_FMT_YUV420P:
677  pix_fmt = "YCbCr-4:2:0";
678  break;
679  case AV_PIX_FMT_YUV422P:
680  pix_fmt = "YCbCr-4:2:2";
681  break;
682  case AV_PIX_FMT_YUV444P:
683  pix_fmt = "YCbCr-4:4:4";
684  break;
685  default:
686  av_log(fmt, AV_LOG_ERROR, "Unsupported pixel format.\n");
687  return AVERROR(ENOSYS);
688  }
689 
690  if (p->extradata_size)
691  ret = xiph_extradata2config(fmt, p, &config);
692  else {
693  av_log(fmt, AV_LOG_ERROR, "Theora configuration info missing\n");
695  }
696  if (ret < 0)
697  return ret;
698 
699  av_strlcatf(buff, size, "a=rtpmap:%d theora/90000\r\n"
700  "a=fmtp:%d delivery-method=inline; "
701  "width=%d; height=%d; sampling=%s; "
702  "configuration=%s\r\n",
703  payload_type, payload_type,
704  p->width, p->height, pix_fmt, config);
705  break;
706  }
708  case AV_CODEC_ID_RAWVIDEO: {
709  const char *pix_fmt;
710  int bit_depth = 8;
711 
712  switch (p->format) {
713  case AV_PIX_FMT_UYVY422:
714  pix_fmt = "YCbCr-4:2:2";
715  break;
717  pix_fmt = "YCbCr-4:2:2";
718  bit_depth = 10;
719  break;
720  case AV_PIX_FMT_YUV420P:
721  pix_fmt = "YCbCr-4:2:0";
722  break;
723  case AV_PIX_FMT_RGB24:
724  pix_fmt = "RGB";
725  break;
726  case AV_PIX_FMT_BGR24:
727  pix_fmt = "BGR";
728  break;
729  default:
730  av_log(fmt, AV_LOG_ERROR, "Unsupported pixel format.\n");
731  return AVERROR(ENOSYS);
732  }
733 
734  av_strlcatf(buff, size, "a=rtpmap:%d raw/90000\r\n"
735  "a=fmtp:%d sampling=%s; "
736  "width=%d; height=%d; "
737  "depth=%d",
738  payload_type, payload_type,
739  pix_fmt, p->width, p->height, bit_depth);
741  av_strlcatf(buff, size, "; interlace");
742  av_strlcatf(buff, size, "\r\n");
743  break;
744  }
745 
746  case AV_CODEC_ID_VP8:
747  av_strlcatf(buff, size, "a=rtpmap:%d VP8/90000\r\n",
748  payload_type);
749  break;
750  case AV_CODEC_ID_VP9:
751  av_strlcatf(buff, size, "a=rtpmap:%d VP9/90000\r\n",
752  payload_type);
753  break;
754  case AV_CODEC_ID_MJPEG:
755  if (payload_type >= RTP_PT_PRIVATE)
756  av_strlcatf(buff, size, "a=rtpmap:%d JPEG/90000\r\n",
757  payload_type);
758  break;
760  if (payload_type >= RTP_PT_PRIVATE)
761  av_strlcatf(buff, size, "a=rtpmap:%d G722/%d/%d\r\n",
762  payload_type,
763  8000, p->ch_layout.nb_channels);
764  break;
765  case AV_CODEC_ID_ADPCM_G726: {
766  if (payload_type >= RTP_PT_PRIVATE)
767  av_strlcatf(buff, size, "a=rtpmap:%d AAL2-G726-%d/%d\r\n",
768  payload_type,
770  p->sample_rate);
771  break;
772  }
774  if (payload_type >= RTP_PT_PRIVATE)
775  av_strlcatf(buff, size, "a=rtpmap:%d G726-%d/%d\r\n",
776  payload_type,
778  p->sample_rate);
779  break;
780  }
781  case AV_CODEC_ID_ILBC:
782  av_strlcatf(buff, size, "a=rtpmap:%d iLBC/%d\r\n"
783  "a=fmtp:%d mode=%d\r\n",
784  payload_type, p->sample_rate,
785  payload_type, p->block_align == 38 ? 20 : 30);
786  break;
787  case AV_CODEC_ID_SPEEX:
788  av_strlcatf(buff, size, "a=rtpmap:%d speex/%d\r\n",
789  payload_type, p->sample_rate);
790  break;
791  case AV_CODEC_ID_OPUS:
792  /* The opus RTP draft says that all opus streams MUST be declared
793  as stereo, to avoid negotiation failures. The actual number of
794  channels can change on a packet-by-packet basis. The number of
795  channels a receiver prefers to receive or a sender plans to send
796  can be declared via fmtp parameters (both default to mono), but
797  receivers MUST be able to receive and process stereo packets. */
798  av_strlcatf(buff, size, "a=rtpmap:%d opus/48000/2\r\n",
799  payload_type);
800  if (p->ch_layout.nb_channels == 2) {
801  av_strlcatf(buff, size, "a=fmtp:%d sprop-stereo=1\r\n",
802  payload_type);
803  }
804  break;
805  default:
806  /* Nothing special to do here... */
807  break;
808  }
809 
810  av_free(config);
811 
812  return 0;
813 }
814 
815 int ff_sdp_write_media(char *buff, int size, const AVStream *st, int idx,
816  const char *dest_addr, const char *dest_type,
817  int port, int ttl, AVFormatContext *fmt)
818 {
819  const AVCodecParameters *p = st->codecpar;
820  const char *type;
821  int payload_type;
822 
823  payload_type = ff_rtp_get_payload_type(fmt, st->codecpar, idx);
824 
825  switch (p->codec_type) {
826  case AVMEDIA_TYPE_VIDEO : type = "video" ; break;
827  case AVMEDIA_TYPE_AUDIO : type = "audio" ; break;
828  case AVMEDIA_TYPE_SUBTITLE: type = "text" ; break;
829  default : type = "application"; break;
830  }
831 
832  av_strlcatf(buff, size, "m=%s %d RTP/AVP %d\r\n", type, port, payload_type);
833  sdp_write_address(buff, size, dest_addr, dest_type, ttl);
834  if (p->bit_rate) {
835  av_strlcatf(buff, size, "b=AS:%"PRId64"\r\n", p->bit_rate / 1000);
836  }
837 
838  return sdp_write_media_attributes(buff, size, st, payload_type, fmt);
839 }
840 
841 int av_sdp_create(AVFormatContext *ac[], int n_files, char *buf, int size)
842 {
843  AVDictionaryEntry *title = av_dict_get(ac[0]->metadata, "title", NULL, 0);
844  struct sdp_session_level s = { 0 };
845  int i, j, port, ttl, is_multicast, index = 0;
846  char dst[32], dst_type[5];
847 
848  memset(buf, 0, size);
849  s.user = "-";
850  s.src_addr = "127.0.0.1"; /* FIXME: Properly set this */
851  s.src_type = "IP4";
852  s.name = title ? title->value : "No Name";
853 
854  port = 0;
855  ttl = 0;
856  if (n_files == 1) {
857  port = sdp_get_address(dst, sizeof(dst), &ttl, ac[0]->url ? ac[0]->url : "");
858  is_multicast = resolve_destination(dst, sizeof(dst), dst_type,
859  sizeof(dst_type));
860  if (!is_multicast)
861  ttl = 0;
862  if (dst[0]) {
863  s.dst_addr = dst;
864  s.dst_type = dst_type;
865  s.ttl = ttl;
866  if (!strcmp(dst_type, "IP6")) {
867  s.src_addr = "::1";
868  s.src_type = "IP6";
869  }
870  }
871  }
872  sdp_write_header(buf, size, &s);
873 
874  dst[0] = 0;
875  for (i = 0; i < n_files; i++) {
876  if (n_files != 1) {
877  port = sdp_get_address(dst, sizeof(dst), &ttl, ac[i]->url ? ac[i]->url : "");
878  is_multicast = resolve_destination(dst, sizeof(dst), dst_type,
879  sizeof(dst_type));
880  if (!is_multicast)
881  ttl = 0;
882  }
883  for (j = 0; j < ac[i]->nb_streams; j++) {
884  int ret = ff_sdp_write_media(buf, size, ac[i]->streams[j], index++,
885  dst[0] ? dst : NULL, dst_type,
886  (port > 0) ? port + j * 2 : 0,
887  ttl, ac[i]);
888  if (ret < 0)
889  return ret;
890 
891  if (port <= 0) {
892  av_strlcatf(buf, size,
893  "a=control:streamid=%d\r\n", i + j);
894  }
895  if (ac[i]->pb && ac[i]->pb->av_class) {
896  uint8_t *crypto_suite = NULL, *crypto_params = NULL;
897  av_opt_get(ac[i]->pb, "srtp_out_suite", AV_OPT_SEARCH_CHILDREN,
898  &crypto_suite);
899  av_opt_get(ac[i]->pb, "srtp_out_params", AV_OPT_SEARCH_CHILDREN,
900  &crypto_params);
901  if (crypto_suite && crypto_suite[0])
902  av_strlcatf(buf, size,
903  "a=crypto:1 %s inline:%s\r\n",
904  crypto_suite, crypto_params);
905  av_free(crypto_suite);
906  av_free(crypto_params);
907  }
908  }
909  }
910 
911  return 0;
912 }
913 #else
914 int av_sdp_create(AVFormatContext *ac[], int n_files, char *buf, int size)
915 {
916  return AVERROR(ENOSYS);
917 }
918 
919 int ff_sdp_write_media(char *buff, int size, const AVStream *st, int idx,
920  const char *dest_addr, const char *dest_type,
921  int port, int ttl, AVFormatContext *fmt)
922 {
923  return AVERROR(ENOSYS);
924 }
925 #endif
AV_OPT_SEARCH_CHILDREN
#define AV_OPT_SEARCH_CHILDREN
Search in possible children of the given object first.
Definition: opt.h:522
AVMEDIA_TYPE_SUBTITLE
@ AVMEDIA_TYPE_SUBTITLE
Definition: avutil.h:204
AVCodecParameters::extradata
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent.
Definition: codec_par.h:69
name
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default minimum maximum flags name is the option name
Definition: writing_filters.txt:88
r
const char * r
Definition: vf_curves.c:126
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
opt.h
av_find_info_tag
int av_find_info_tag(char *arg, int arg_size, const char *tag1, const char *info)
Attempt to find a specific tag in a URL.
Definition: parseutils.c:753
av_opt_flag_is_set
int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name)
Check whether a particular flag is set in a flags field.
Definition: opt.c:1341
AVCodecParameters::codec_type
enum AVMediaType codec_type
General type of the encoded data.
Definition: codec_par.h:51
hevc.h
out
FILE * out
Definition: movenc.c:54
AVCodecParameters
This struct describes the properties of an encoded stream.
Definition: codec_par.h:47
AV_FIELD_PROGRESSIVE
@ AV_FIELD_PROGRESSIVE
Definition: defs.h:200
AV_CODEC_ID_DIRAC
@ AV_CODEC_ID_DIRAC
Definition: codec_id.h:168
AV_CODEC_ID_RAWVIDEO
@ AV_CODEC_ID_RAWVIDEO
Definition: codec_id.h:65
AV_CODEC_ID_MPEG4
@ AV_CODEC_ID_MPEG4
Definition: codec_id.h:64
AV_CODEC_ID_AMR_NB
@ AV_CODEC_ID_AMR_NB
Definition: codec_id.h:421
AV_CODEC_ID_ADPCM_G722
@ AV_CODEC_ID_ADPCM_G722
Definition: codec_id.h:395
AV_PIX_FMT_BGR24
@ AV_PIX_FMT_BGR24
packed RGB 8:8:8, 24bpp, BGRBGR...
Definition: pixfmt.h:76
AVChannelLayout::nb_channels
int nb_channels
Number of channels in this layout.
Definition: channel_layout.h:313
bit_depth
static void bit_depth(AudioStatsContext *s, const uint64_t *const mask, uint8_t *depth)
Definition: af_astats.c:245
av_strlcatf
size_t av_strlcatf(char *dst, size_t size, const char *fmt,...)
Definition: avstring.c:103
tf_sess_config.config
config
Definition: tf_sess_config.py:33
AV_CODEC_ID_AMR_WB
@ AV_CODEC_ID_AMR_WB
Definition: codec_id.h:422
av_malloc
#define av_malloc(s)
Definition: tableprint_vlc.h:30
AV_CODEC_ID_H261
@ AV_CODEC_ID_H261
Definition: codec_id.h:55
xiph.h
freeaddrinfo
#define freeaddrinfo
Definition: network.h:218
mpeg4audio.h
AV_CODEC_ID_SPEEX
@ AV_CODEC_ID_SPEEX
Definition: codec_id.h:475
AV_CODEC_ID_PCM_S16BE
@ AV_CODEC_ID_PCM_S16BE
Definition: codec_id.h:329
type
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
Definition: writing_filters.txt:86
ff_data_to_hex
char * ff_data_to_hex(char *buf, const uint8_t *src, int size, int lowercase)
Write hexadecimal string corresponding to given binary data.
Definition: utils.c:455
avio_close_dyn_buf
int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer)
Return the written size and a pointer to the buffer.
Definition: aviobuf.c:1406
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:180
av_dict_get
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
Definition: dict.c:62
avio_open_dyn_buf
int avio_open_dyn_buf(AVIOContext **s)
Open a write only memory stream.
Definition: aviobuf.c:1361
AV_CODEC_ID_ADPCM_G726
@ AV_CODEC_ID_ADPCM_G726
Definition: codec_id.h:378
s
#define s(width, name)
Definition: cbs_vp9.c:198
pix_fmt
static enum AVPixelFormat pix_fmt
Definition: demux_decode.c:41
AVMEDIA_TYPE_AUDIO
@ AVMEDIA_TYPE_AUDIO
Definition: avutil.h:202
AV_CODEC_ID_VP9
@ AV_CODEC_ID_VP9
Definition: codec_id.h:220
AVCodecParameters::width
int width
Video only.
Definition: codec_par.h:134
AV_CODEC_ID_PCM_MULAW
@ AV_CODEC_ID_PCM_MULAW
Definition: codec_id.h:334
AV_PIX_FMT_YUV420P
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:73
AV_CODEC_ID_H264
@ AV_CODEC_ID_H264
Definition: codec_id.h:79
AVFormatContext
Format I/O context.
Definition: avformat.h:1255
AV_CODEC_ID_PCM_ALAW
@ AV_CODEC_ID_PCM_ALAW
Definition: codec_id.h:335
internal.h
AVStream::codecpar
AVCodecParameters * codecpar
Codec parameters associated with this stream.
Definition: avformat.h:766
RTP_PT_PRIVATE
#define RTP_PT_PRIVATE
Definition: rtp.h:79
PTRDIFF_SPECIFIER
#define PTRDIFF_SPECIFIER
Definition: internal.h:140
NULL
#define NULL
Definition: coverity.c:32
avc.h
parseutils.h
ff_is_multicast_address
int ff_is_multicast_address(struct sockaddr *addr)
Definition: network.c:145
AV_PIX_FMT_YUV422P10
#define AV_PIX_FMT_YUV422P10
Definition: pixfmt.h:479
AVOutputFormat::priv_class
const AVClass * priv_class
AVClass for the private context.
Definition: avformat.h:538
AVCodecParameters::ch_layout
AVChannelLayout ch_layout
Audio only.
Definition: codec_par.h:180
base64.h
index
int index
Definition: gxfenc.c:89
AVCodecParameters::sample_rate
int sample_rate
Audio only.
Definition: codec_par.h:184
AVCodecParameters::extradata_size
int extradata_size
Size of the extradata content in bytes.
Definition: codec_par.h:73
AVFormatContext::nb_streams
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
Definition: avformat.h:1311
AV_CODEC_ID_AAC
@ AV_CODEC_ID_AAC
Definition: codec_id.h:442
NI_NUMERICHOST
#define NI_NUMERICHOST
Definition: network.h:195
AVIOContext
Bytestream IO Context.
Definition: avio.h:160
AV_PIX_FMT_RGB24
@ AV_PIX_FMT_RGB24
packed RGB 8:8:8, 24bpp, RGBRGB...
Definition: pixfmt.h:75
RTP_XIPH_IDENT
#define RTP_XIPH_IDENT
Definition: rtp.h:91
start_time
static int64_t start_time
Definition: ffplay.c:329
AV_CODEC_ID_H263
@ AV_CODEC_ID_H263
Definition: codec_id.h:56
size
int size
Definition: twinvq_data.h:10344
AV_CODEC_ID_OPUS
@ AV_CODEC_ID_OPUS
Definition: codec_id.h:500
av_sdp_create
int av_sdp_create(AVFormatContext *ac[], int n_files, char *buf, int size)
Generate an SDP for an RTP session.
Definition: sdp.c:914
version
version
Definition: libkvazaar.c:321
AV_CODEC_ID_BITPACKED
@ AV_CODEC_ID_BITPACKED
Definition: codec_id.h:281
rtp.h
getaddrinfo
#define getaddrinfo
Definition: network.h:217
ff_isom_write_hvcc
int ff_isom_write_hvcc(AVIOContext *pb, const uint8_t *data, int size, int ps_array_completeness)
Writes HEVC extradata (parameter sets, declarative SEI NAL units) to the provided AVIOContext.
Definition: hevc.c:1042
AV_CODEC_ID_MJPEG
@ AV_CODEC_ID_MJPEG
Definition: codec_id.h:59
AV_BASE64_SIZE
#define AV_BASE64_SIZE(x)
Calculate the output size needed to base64-encode x bytes to a null-terminated string.
Definition: base64.h:66
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:255
AV_CODEC_ID_THEORA
@ AV_CODEC_ID_THEORA
Definition: codec_id.h:82
getnameinfo
#define getnameinfo
Definition: network.h:219
AVCodecParameters::height
int height
Definition: codec_par.h:135
AVCodecParameters::block_align
int block_align
Audio only.
Definition: codec_par.h:191
MAX_EXTRADATA_SIZE
#define MAX_EXTRADATA_SIZE
Definition: latmenc.c:35
AV_CODEC_ID_HEVC
@ AV_CODEC_ID_HEVC
Definition: codec_id.h:226
av_url_split
void av_url_split(char *proto, int proto_size, char *authorization, int authorization_size, char *hostname, int hostname_size, int *port_ptr, char *path, int path_size, const char *url)
Split a URL string into components.
Definition: utils.c:358
AV_STRINGIFY
#define AV_STRINGIFY(s)
Definition: macros.h:66
av_mallocz
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
Definition: mem.c:254
len
int len
Definition: vorbis_enc_data.h:426
AVCodecParameters::field_order
enum AVFieldOrder field_order
Video only.
Definition: codec_par.h:161
version.h
LIBAVFORMAT_VERSION
#define LIBAVFORMAT_VERSION
Definition: version.h:40
ret
ret
Definition: filter_design.txt:187
AVStream
Stream structure.
Definition: avformat.h:743
AVFormatContext::oformat
const struct AVOutputFormat * oformat
The output container format.
Definition: avformat.h:1274
av_strlcat
size_t av_strlcat(char *dst, const char *src, size_t size)
Append the string src to the string dst, but to a total length of no more than size - 1 bytes,...
Definition: avstring.c:95
sps
static int FUNC() sps(CodedBitstreamContext *ctx, RWContext *rw, H264RawSPS *current)
Definition: cbs_h264_syntax_template.c:260
pos
unsigned int pos
Definition: spdifenc.c:413
avformat.h
dict.h
network.h
id
enum AVCodecID id
Definition: dts2pts.c:364
AV_PIX_FMT_UYVY422
@ AV_PIX_FMT_UYVY422
packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1
Definition: pixfmt.h:88
AV_CODEC_ID_H263P
@ AV_CODEC_ID_H263P
Definition: codec_id.h:71
AV_CODEC_ID_ADPCM_G726LE
@ AV_CODEC_ID_ADPCM_G726LE
Definition: codec_id.h:402
ff_avc_write_annexb_extradata
int ff_avc_write_annexb_extradata(const uint8_t *in, uint8_t **buf, int *size)
Definition: avc.c:255
ff_sdp_write_media
int ff_sdp_write_media(char *buff, int size, const AVStream *st, int idx, const char *dest_addr, const char *dest_type, int port, int ttl, AVFormatContext *fmt)
Append the media-specific SDP fragment for the media stream c to the buffer buff.
Definition: sdp.c:919
mode
mode
Definition: ebur128.h:83
av_base64_encode
char * av_base64_encode(char *out, int out_size, const uint8_t *in, int in_size)
Encode data to base64 and null-terminate.
Definition: base64.c:147
avpriv_split_xiph_headers
int avpriv_split_xiph_headers(const uint8_t *extradata, int extradata_size, int first_header_size, const uint8_t *header_start[3], int header_len[3])
Split a single extradata buffer into the three headers that most Xiph codecs use.
Definition: xiph.c:26
AV_PIX_FMT_YUV444P
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Definition: pixfmt.h:78
ff_mpeg4audio_sample_rates
const int ff_mpeg4audio_sample_rates[16]
Definition: mpeg4audio_sample_rates.h:26
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
AVCodecParameters::bits_per_coded_sample
int bits_per_coded_sample
The number of bits per sample in the codedwords.
Definition: codec_par.h:110
AV_PIX_FMT_YUV422P
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:77
AVCodecParameters::format
int format
Definition: codec_par.h:92
av_free
#define av_free(p)
Definition: tableprint_vlc.h:33
AVDictionaryEntry
Definition: dict.h:89
AVCodecParameters::codec_id
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
Definition: codec_par.h:55
AV_CODEC_ID_ILBC
@ AV_CODEC_ID_ILBC
Definition: codec_id.h:499
AV_CODEC_ID_VP8
@ AV_CODEC_ID_VP8
Definition: codec_id.h:192
av_strlcpy
size_t av_strlcpy(char *dst, const char *src, size_t size)
Copy the string src to dst, but no more than size - 1 bytes, and null-terminate dst.
Definition: avstring.c:85
AVCodecParameters::bit_rate
int64_t bit_rate
The average bitrate of the encoded data (in bits per second).
Definition: codec_par.h:97
av_opt_get
int av_opt_get(void *obj, const char *name, int search_flags, uint8_t **out_val)
Definition: opt.c:1145
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
AV_CODEC_ID_VORBIS
@ AV_CODEC_ID_VORBIS
Definition: codec_id.h:445
AVDictionaryEntry::value
char * value
Definition: dict.h:91
avstring.h
addrinfo
Definition: network.h:137
AVFormatContext::priv_data
void * priv_data
Format private data.
Definition: avformat.h:1283
AV_CODEC_ID_PCM_S24BE
@ AV_CODEC_ID_PCM_S24BE
Definition: codec_id.h:341
ff_rtp_get_payload_type
int ff_rtp_get_payload_type(const AVFormatContext *fmt, const AVCodecParameters *par, int idx)
Return the payload type for a given stream used in the given format context.
Definition: rtp.c:93
AVIOContext::av_class
const AVClass * av_class
A class for private options.
Definition: avio.h:173
AV_RB16
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_WB24 unsigned int_TMPL AV_RB16
Definition: bytestream.h:98
ff_avc_find_startcode
const uint8_t * ff_avc_find_startcode(const uint8_t *p, const uint8_t *end)
Definition: avc.c:67