1 /*
2 * RTP output format
3 * Copyright (c) 2002 Fabrice Bellard
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
28
30
38 };
39
45 };
46
47 #define RTCP_SR_SIZE 28
48
50 {
51 switch(id) {
83 return 1;
84 default:
85 return 0;
86 }
87 }
88
90 {
94
98 }
102
103 return -1;
104 }
105
107 /* Re-validate non-dynamic payload types */
110
112 } else {
113 /* private option takes priority */
115 }
116
125 /* Round the NTP time to whole milliseconds. */
128 // Pick a random sequence start number, but in the lower end of the
129 // available range, so that any wraparound doesn't happen immediately.
130 // (Immediate wraparound would be an issue for SRTP.)
134 } else
136 } else
137 s->
seq &= 0xffff;
// Use the given parameter, wrapped to the right interval
138
143 } else
148 }
152 }
154
157 } else {
159 }
166 break;
169 break;
172 if (n < 1)
173 n = 1;
175 break;
179 "Packetizing H261 is experimental and produces incorrect "
180 "packetization for cases where GOBs don't fit into packets "
181 "(even though most receivers may handle it just fine). "
182 "Please set -f_strict experimental in order to enable it.\n");
184 goto fail;
185 }
186 break;
188 /* check for H.264 MP4 syntax */
191 }
192 break;
194 /* Only check for the standardized hvcC version of extradata, keeping
195 * things simple and similar to the avcC/H264 case above, instead
196 * of trying to handle the pre-standardization versions (as in
197 * libavcodec/hevc.c). */
200 }
201 break;
205 break;
207 /* Due to a historical error, the clock rate for G722 in RTP is
208 * 8000, even if the sample rate is 16000. See RFC 3551. */
210 break;
214 goto fail;
215 }
216 /* The opus RTP RFC says that all opus streams should use 48000 Hz
217 * as clock rate, since all opus sample rates can be expressed in
218 * this clock rate, and sample rate changes on the fly are supported. */
220 break;
224 goto fail;
225 }
227 break;
232 n = 31;
233 else
234 n = 61;
235 /* max_header_toc_size + the largest AMR payload must fit */
238 goto fail;
239 }
242 goto fail;
243 }
244 break;
247 break;
248 default:
249 break;
250 }
251
252 return 0;
253
254 fail:
257 }
258
259 /* send an rtcp sender report packet */
261 {
263 uint32_t rtp_ts;
264
266
269 s1->streams[0]->time_base) +
s->base_timestamp;
278
283 avio_wb16(
s1->pb, (7 + len + 3) / 4);
/* length in words - 1 */
284
290 for (len = (7 + len) % 4; len % 4; len++)
292 }
293
294 if (bye) {
299 }
300
302 }
303
304 /* send an rtp packet. sequence number is incremented, but the caller
305 must update the timestamp itself */
307 {
309
310 av_dlog(s1,
"rtp_send_data size=%d\n", len);
311
312 /* build the RTP header */
318
321
322 s->
seq = (s->
seq + 1) & 0xffff;
325 }
326
327 /* send an integer number of samples and compute time stamp and fill
328 the rtp send buffer before sending. */
330 const uint8_t *buf1,
int size,
int sample_size_bits)
331 {
333 int len, max_packet_size,
n;
334 /* Calculate the number of bytes to get samples aligned on a byte border */
335 int aligned_samples_size = sample_size_bits/
av_gcd(sample_size_bits, 8);
336
337 max_packet_size = (s->
max_payload_size / aligned_samples_size) * aligned_samples_size;
338 /* Not needed, but who knows. Don't check if samples aren't an even number of bytes. */
339 if ((sample_size_bits % 8) == 0 && ((8 *
size) % sample_size_bits) != 0)
341 n = 0;
342 while (size > 0) {
344 len =
FFMIN(max_packet_size, size);
345
346 /* copy data */
354 }
355 return 0;
356 }
357
360 {
363
365
366 /* test if we must flush because not enough space */
368 if ((len + size) > max_packet_size) {
369 if (len > 4) {
372 }
373 }
376 }
377
378 /* add the packet */
379 if (size > max_packet_size) {
380 /* big packet: fragment */
381 count = 0;
382 while (size > 0) {
383 len = max_packet_size - 4;
384 if (len > size)
386 /* build fragmented packet */
389 s->
buf[2] = count >> 8;
391 memcpy(s->
buf + 4, buf1, len);
396 }
397 } else {
399 /* no fragmentation possible */
404 }
405 memcpy(s->
buf_ptr, buf1, size);
407 }
408 }
409
412 {
414 int len, max_packet_size;
415
417
418 while (size > 0) {
419 len = max_packet_size;
420 if (len > size)
422
425
428 }
429 }
430
431 /* NOTE: size is assumed to be an integer multiple of TS_PACKET_SIZE */
434 {
437
441 if (len > size)
447
452 }
453 }
454 }
455
457 {
463
464 while (frames > 0) {
470 }
471
475 }
476 memcpy(s->
buf_ptr, buf, frame_size);
477 frames--;
482
486 }
487 }
488 return 0;
489 }
490
492 {
495 int rtcp_bytes;
497
499
508 }
510
523 /* The actual sample size is half a byte per sample, but since the
524 * stream clock rate is 8000 Hz while the sample rate is 16000 Hz,
525 * the correct parameter for send_samples_bits is 8 bits per stream
526 * clock. */
534 break;
538 break;
542 else
544 break;
548 break;
551 break;
554 break;
557 break;
560 int mb_info_size = 0;
563 &mb_info_size);
564 if (!mb_info) {
567 }
569 break;
570 }
571 /* Fallthrough */
574 break;
577 break;
581 break;
584 break;
587 break;
590 break;
594 "Packet size %d too large for max RTP payload size %d\n",
597 }
598 /* Intentional fallthrough */
599 default:
600 /* better than nothing : send the codec raw data */
602 break;
603 }
604 return 0;
605 }
606
608 {
610
611 /* If the caller closes and recreates ->pb, this might actually
612 * be NULL here even if it was successfully allocated at the start. */
616
617 return 0;
618 }
619
629 .priv_class = &rtp_muxer_class,
631 };