]> git.sesse.net Git - ffmpeg/blob - libavformat/rtpenc.c
36064ed610b95e01a02e6b87c5773065c8e8cbfb
[ffmpeg] / libavformat / rtpenc.c
1 /*
2  * RTP output format
3  * Copyright (c) 2002 Fabrice Bellard
4  *
5  * This file is part of Libav.
6  *
7  * Libav 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  * Libav 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 Libav; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21
22 #include "avformat.h"
23 #include "mpegts.h"
24 #include "internal.h"
25 #include "libavutil/mathematics.h"
26 #include "libavutil/random_seed.h"
27 #include "libavutil/opt.h"
28
29 #include "rtpenc.h"
30
31 //#define DEBUG
32
33 static const AVOption options[] = {
34     FF_RTP_FLAG_OPTS(RTPMuxContext, flags),
35     { "payload_type", "Specify RTP payload type", offsetof(RTPMuxContext, payload_type), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, 127, AV_OPT_FLAG_ENCODING_PARAM },
36     { "ssrc", "Stream identifier", offsetof(RTPMuxContext, ssrc), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM },
37     { NULL },
38 };
39
40 static const AVClass rtp_muxer_class = {
41     .class_name = "RTP muxer",
42     .item_name  = av_default_item_name,
43     .option     = options,
44     .version    = LIBAVUTIL_VERSION_INT,
45 };
46
47 #define RTCP_SR_SIZE 28
48
49 static int is_supported(enum AVCodecID id)
50 {
51     switch(id) {
52     case AV_CODEC_ID_H263:
53     case AV_CODEC_ID_H263P:
54     case AV_CODEC_ID_H264:
55     case AV_CODEC_ID_MPEG1VIDEO:
56     case AV_CODEC_ID_MPEG2VIDEO:
57     case AV_CODEC_ID_MPEG4:
58     case AV_CODEC_ID_AAC:
59     case AV_CODEC_ID_MP2:
60     case AV_CODEC_ID_MP3:
61     case AV_CODEC_ID_PCM_ALAW:
62     case AV_CODEC_ID_PCM_MULAW:
63     case AV_CODEC_ID_PCM_S8:
64     case AV_CODEC_ID_PCM_S16BE:
65     case AV_CODEC_ID_PCM_S16LE:
66     case AV_CODEC_ID_PCM_U16BE:
67     case AV_CODEC_ID_PCM_U16LE:
68     case AV_CODEC_ID_PCM_U8:
69     case AV_CODEC_ID_MPEG2TS:
70     case AV_CODEC_ID_AMR_NB:
71     case AV_CODEC_ID_AMR_WB:
72     case AV_CODEC_ID_VORBIS:
73     case AV_CODEC_ID_THEORA:
74     case AV_CODEC_ID_VP8:
75     case AV_CODEC_ID_ADPCM_G722:
76     case AV_CODEC_ID_ADPCM_G726:
77     case AV_CODEC_ID_ILBC:
78     case AV_CODEC_ID_MJPEG:
79     case AV_CODEC_ID_SPEEX:
80         return 1;
81     default:
82         return 0;
83     }
84 }
85
86 static int rtp_write_header(AVFormatContext *s1)
87 {
88     RTPMuxContext *s = s1->priv_data;
89     int n;
90     AVStream *st;
91
92     if (s1->nb_streams != 1) {
93         av_log(s1, AV_LOG_ERROR, "Only one stream supported in the RTP muxer\n");
94         return AVERROR(EINVAL);
95     }
96     st = s1->streams[0];
97     if (!is_supported(st->codec->codec_id)) {
98         av_log(s1, AV_LOG_ERROR, "Unsupported codec %x\n", st->codec->codec_id);
99
100         return -1;
101     }
102
103     if (s->payload_type < 0)
104         s->payload_type = ff_rtp_get_payload_type(s1, st->codec);
105     s->base_timestamp = av_get_random_seed();
106     s->timestamp = s->base_timestamp;
107     s->cur_timestamp = 0;
108     if (!s->ssrc)
109         s->ssrc = av_get_random_seed();
110     s->first_packet = 1;
111     s->first_rtcp_ntp_time = ff_ntp_time();
112     if (s1->start_time_realtime)
113         /* Round the NTP time to whole milliseconds. */
114         s->first_rtcp_ntp_time = (s1->start_time_realtime / 1000) * 1000 +
115                                  NTP_OFFSET_US;
116
117     if (s1->packet_size) {
118         if (s1->pb->max_packet_size)
119             s1->packet_size = FFMIN(s1->packet_size,
120                                     s1->pb->max_packet_size);
121     } else
122         s1->packet_size = s1->pb->max_packet_size;
123     if (s1->packet_size <= 12) {
124         av_log(s1, AV_LOG_ERROR, "Max packet size %d too low\n", s1->packet_size);
125         return AVERROR(EIO);
126     }
127     s->buf = av_malloc(s1->packet_size);
128     if (s->buf == NULL) {
129         return AVERROR(ENOMEM);
130     }
131     s->max_payload_size = s1->packet_size - 12;
132
133     s->max_frames_per_packet = 0;
134     if (s1->max_delay > 0) {
135         if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
136             int frame_size = av_get_audio_frame_duration(st->codec, 0);
137             if (!frame_size)
138                 frame_size = st->codec->frame_size;
139             if (frame_size == 0) {
140                 av_log(s1, AV_LOG_ERROR, "Cannot respect max delay: frame size = 0\n");
141             } else {
142                 s->max_frames_per_packet =
143                         av_rescale_q_rnd(s1->max_delay,
144                                          AV_TIME_BASE_Q,
145                                          (AVRational){ frame_size, st->codec->sample_rate },
146                                          AV_ROUND_DOWN);
147             }
148         }
149         if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
150             /* FIXME: We should round down here... */
151             s->max_frames_per_packet = av_rescale_q(s1->max_delay, (AVRational){1, 1000000}, st->codec->time_base);
152         }
153     }
154
155     avpriv_set_pts_info(st, 32, 1, 90000);
156     switch(st->codec->codec_id) {
157     case AV_CODEC_ID_MP2:
158     case AV_CODEC_ID_MP3:
159         s->buf_ptr = s->buf + 4;
160         break;
161     case AV_CODEC_ID_MPEG1VIDEO:
162     case AV_CODEC_ID_MPEG2VIDEO:
163         break;
164     case AV_CODEC_ID_MPEG2TS:
165         n = s->max_payload_size / TS_PACKET_SIZE;
166         if (n < 1)
167             n = 1;
168         s->max_payload_size = n * TS_PACKET_SIZE;
169         s->buf_ptr = s->buf;
170         break;
171     case AV_CODEC_ID_H264:
172         /* check for H.264 MP4 syntax */
173         if (st->codec->extradata_size > 4 && st->codec->extradata[0] == 1) {
174             s->nal_length_size = (st->codec->extradata[4] & 0x03) + 1;
175         }
176         break;
177     case AV_CODEC_ID_VORBIS:
178     case AV_CODEC_ID_THEORA:
179         if (!s->max_frames_per_packet) s->max_frames_per_packet = 15;
180         s->max_frames_per_packet = av_clip(s->max_frames_per_packet, 1, 15);
181         s->max_payload_size -= 6; // ident+frag+tdt/vdt+pkt_num+pkt_length
182         s->num_frames = 0;
183         goto defaultcase;
184     case AV_CODEC_ID_ADPCM_G722:
185         /* Due to a historical error, the clock rate for G722 in RTP is
186          * 8000, even if the sample rate is 16000. See RFC 3551. */
187         avpriv_set_pts_info(st, 32, 1, 8000);
188         break;
189     case AV_CODEC_ID_ILBC:
190         if (st->codec->block_align != 38 && st->codec->block_align != 50) {
191             av_log(s1, AV_LOG_ERROR, "Incorrect iLBC block size specified\n");
192             goto fail;
193         }
194         if (!s->max_frames_per_packet)
195             s->max_frames_per_packet = 1;
196         s->max_frames_per_packet = FFMIN(s->max_frames_per_packet,
197                                          s->max_payload_size / st->codec->block_align);
198         goto defaultcase;
199     case AV_CODEC_ID_AMR_NB:
200     case AV_CODEC_ID_AMR_WB:
201         if (!s->max_frames_per_packet)
202             s->max_frames_per_packet = 12;
203         if (st->codec->codec_id == AV_CODEC_ID_AMR_NB)
204             n = 31;
205         else
206             n = 61;
207         /* max_header_toc_size + the largest AMR payload must fit */
208         if (1 + s->max_frames_per_packet + n > s->max_payload_size) {
209             av_log(s1, AV_LOG_ERROR, "RTP max payload size too small for AMR\n");
210             goto fail;
211         }
212         if (st->codec->channels != 1) {
213             av_log(s1, AV_LOG_ERROR, "Only mono is supported\n");
214             goto fail;
215         }
216     case AV_CODEC_ID_AAC:
217         s->num_frames = 0;
218     default:
219 defaultcase:
220         if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
221             avpriv_set_pts_info(st, 32, 1, st->codec->sample_rate);
222         }
223         s->buf_ptr = s->buf;
224         break;
225     }
226
227     return 0;
228
229 fail:
230     av_freep(&s->buf);
231     return AVERROR(EINVAL);
232 }
233
234 /* send an rtcp sender report packet */
235 static void rtcp_send_sr(AVFormatContext *s1, int64_t ntp_time)
236 {
237     RTPMuxContext *s = s1->priv_data;
238     uint32_t rtp_ts;
239
240     av_dlog(s1, "RTCP: %02x %"PRIx64" %x\n", s->payload_type, ntp_time, s->timestamp);
241
242     s->last_rtcp_ntp_time = ntp_time;
243     rtp_ts = av_rescale_q(ntp_time - s->first_rtcp_ntp_time, (AVRational){1, 1000000},
244                           s1->streams[0]->time_base) + s->base_timestamp;
245     avio_w8(s1->pb, (RTP_VERSION << 6));
246     avio_w8(s1->pb, RTCP_SR);
247     avio_wb16(s1->pb, 6); /* length in words - 1 */
248     avio_wb32(s1->pb, s->ssrc);
249     avio_wb32(s1->pb, ntp_time / 1000000);
250     avio_wb32(s1->pb, ((ntp_time % 1000000) << 32) / 1000000);
251     avio_wb32(s1->pb, rtp_ts);
252     avio_wb32(s1->pb, s->packet_count);
253     avio_wb32(s1->pb, s->octet_count);
254     avio_flush(s1->pb);
255 }
256
257 /* send an rtp packet. sequence number is incremented, but the caller
258    must update the timestamp itself */
259 void ff_rtp_send_data(AVFormatContext *s1, const uint8_t *buf1, int len, int m)
260 {
261     RTPMuxContext *s = s1->priv_data;
262
263     av_dlog(s1, "rtp_send_data size=%d\n", len);
264
265     /* build the RTP header */
266     avio_w8(s1->pb, (RTP_VERSION << 6));
267     avio_w8(s1->pb, (s->payload_type & 0x7f) | ((m & 0x01) << 7));
268     avio_wb16(s1->pb, s->seq);
269     avio_wb32(s1->pb, s->timestamp);
270     avio_wb32(s1->pb, s->ssrc);
271
272     avio_write(s1->pb, buf1, len);
273     avio_flush(s1->pb);
274
275     s->seq++;
276     s->octet_count += len;
277     s->packet_count++;
278 }
279
280 /* send an integer number of samples and compute time stamp and fill
281    the rtp send buffer before sending. */
282 static int rtp_send_samples(AVFormatContext *s1,
283                             const uint8_t *buf1, int size, int sample_size_bits)
284 {
285     RTPMuxContext *s = s1->priv_data;
286     int len, max_packet_size, n;
287     /* Calculate the number of bytes to get samples aligned on a byte border */
288     int aligned_samples_size = sample_size_bits/av_gcd(sample_size_bits, 8);
289
290     max_packet_size = (s->max_payload_size / aligned_samples_size) * aligned_samples_size;
291     /* Not needed, but who knows. Don't check if samples aren't an even number of bytes. */
292     if ((sample_size_bits % 8) == 0 && ((8 * size) % sample_size_bits) != 0)
293         return AVERROR(EINVAL);
294     n = 0;
295     while (size > 0) {
296         s->buf_ptr = s->buf;
297         len = FFMIN(max_packet_size, size);
298
299         /* copy data */
300         memcpy(s->buf_ptr, buf1, len);
301         s->buf_ptr += len;
302         buf1 += len;
303         size -= len;
304         s->timestamp = s->cur_timestamp + n * 8 / sample_size_bits;
305         ff_rtp_send_data(s1, s->buf, s->buf_ptr - s->buf, 0);
306         n += (s->buf_ptr - s->buf);
307     }
308     return 0;
309 }
310
311 static void rtp_send_mpegaudio(AVFormatContext *s1,
312                                const uint8_t *buf1, int size)
313 {
314     RTPMuxContext *s = s1->priv_data;
315     int len, count, max_packet_size;
316
317     max_packet_size = s->max_payload_size;
318
319     /* test if we must flush because not enough space */
320     len = (s->buf_ptr - s->buf);
321     if ((len + size) > max_packet_size) {
322         if (len > 4) {
323             ff_rtp_send_data(s1, s->buf, s->buf_ptr - s->buf, 0);
324             s->buf_ptr = s->buf + 4;
325         }
326     }
327     if (s->buf_ptr == s->buf + 4) {
328         s->timestamp = s->cur_timestamp;
329     }
330
331     /* add the packet */
332     if (size > max_packet_size) {
333         /* big packet: fragment */
334         count = 0;
335         while (size > 0) {
336             len = max_packet_size - 4;
337             if (len > size)
338                 len = size;
339             /* build fragmented packet */
340             s->buf[0] = 0;
341             s->buf[1] = 0;
342             s->buf[2] = count >> 8;
343             s->buf[3] = count;
344             memcpy(s->buf + 4, buf1, len);
345             ff_rtp_send_data(s1, s->buf, len + 4, 0);
346             size -= len;
347             buf1 += len;
348             count += len;
349         }
350     } else {
351         if (s->buf_ptr == s->buf + 4) {
352             /* no fragmentation possible */
353             s->buf[0] = 0;
354             s->buf[1] = 0;
355             s->buf[2] = 0;
356             s->buf[3] = 0;
357         }
358         memcpy(s->buf_ptr, buf1, size);
359         s->buf_ptr += size;
360     }
361 }
362
363 static void rtp_send_raw(AVFormatContext *s1,
364                          const uint8_t *buf1, int size)
365 {
366     RTPMuxContext *s = s1->priv_data;
367     int len, max_packet_size;
368
369     max_packet_size = s->max_payload_size;
370
371     while (size > 0) {
372         len = max_packet_size;
373         if (len > size)
374             len = size;
375
376         s->timestamp = s->cur_timestamp;
377         ff_rtp_send_data(s1, buf1, len, (len == size));
378
379         buf1 += len;
380         size -= len;
381     }
382 }
383
384 /* NOTE: size is assumed to be an integer multiple of TS_PACKET_SIZE */
385 static void rtp_send_mpegts_raw(AVFormatContext *s1,
386                                 const uint8_t *buf1, int size)
387 {
388     RTPMuxContext *s = s1->priv_data;
389     int len, out_len;
390
391     while (size >= TS_PACKET_SIZE) {
392         len = s->max_payload_size - (s->buf_ptr - s->buf);
393         if (len > size)
394             len = size;
395         memcpy(s->buf_ptr, buf1, len);
396         buf1 += len;
397         size -= len;
398         s->buf_ptr += len;
399
400         out_len = s->buf_ptr - s->buf;
401         if (out_len >= s->max_payload_size) {
402             ff_rtp_send_data(s1, s->buf, out_len, 0);
403             s->buf_ptr = s->buf;
404         }
405     }
406 }
407
408 static int rtp_send_ilbc(AVFormatContext *s1, const uint8_t *buf, int size)
409 {
410     RTPMuxContext *s = s1->priv_data;
411     AVStream *st = s1->streams[0];
412     int frame_duration = av_get_audio_frame_duration(st->codec, 0);
413     int frame_size = st->codec->block_align;
414     int frames = size / frame_size;
415
416     while (frames > 0) {
417         int n = FFMIN(s->max_frames_per_packet - s->num_frames, frames);
418
419         if (!s->num_frames) {
420             s->buf_ptr = s->buf;
421             s->timestamp = s->cur_timestamp;
422         }
423         memcpy(s->buf_ptr, buf, n * frame_size);
424         frames           -= n;
425         s->num_frames    += n;
426         s->buf_ptr       += n * frame_size;
427         buf              += n * frame_size;
428         s->cur_timestamp += n * frame_duration;
429
430         if (s->num_frames == s->max_frames_per_packet) {
431             ff_rtp_send_data(s1, s->buf, s->buf_ptr - s->buf, 1);
432             s->num_frames = 0;
433         }
434     }
435     return 0;
436 }
437
438 static int rtp_write_packet(AVFormatContext *s1, AVPacket *pkt)
439 {
440     RTPMuxContext *s = s1->priv_data;
441     AVStream *st = s1->streams[0];
442     int rtcp_bytes;
443     int size= pkt->size;
444
445     av_dlog(s1, "%d: write len=%d\n", pkt->stream_index, size);
446
447     rtcp_bytes = ((s->octet_count - s->last_octet_count) * RTCP_TX_RATIO_NUM) /
448         RTCP_TX_RATIO_DEN;
449     if ((s->first_packet || ((rtcp_bytes >= RTCP_SR_SIZE) &&
450                             (ff_ntp_time() - s->last_rtcp_ntp_time > 5000000))) &&
451         !(s->flags & FF_RTP_FLAG_SKIP_RTCP)) {
452         rtcp_send_sr(s1, ff_ntp_time());
453         s->last_octet_count = s->octet_count;
454         s->first_packet = 0;
455     }
456     s->cur_timestamp = s->base_timestamp + pkt->pts;
457
458     switch(st->codec->codec_id) {
459     case AV_CODEC_ID_PCM_MULAW:
460     case AV_CODEC_ID_PCM_ALAW:
461     case AV_CODEC_ID_PCM_U8:
462     case AV_CODEC_ID_PCM_S8:
463         return rtp_send_samples(s1, pkt->data, size, 8 * st->codec->channels);
464     case AV_CODEC_ID_PCM_U16BE:
465     case AV_CODEC_ID_PCM_U16LE:
466     case AV_CODEC_ID_PCM_S16BE:
467     case AV_CODEC_ID_PCM_S16LE:
468         return rtp_send_samples(s1, pkt->data, size, 16 * st->codec->channels);
469     case AV_CODEC_ID_ADPCM_G722:
470         /* The actual sample size is half a byte per sample, but since the
471          * stream clock rate is 8000 Hz while the sample rate is 16000 Hz,
472          * the correct parameter for send_samples_bits is 8 bits per stream
473          * clock. */
474         return rtp_send_samples(s1, pkt->data, size, 8 * st->codec->channels);
475     case AV_CODEC_ID_ADPCM_G726:
476         return rtp_send_samples(s1, pkt->data, size,
477                                 st->codec->bits_per_coded_sample * st->codec->channels);
478     case AV_CODEC_ID_MP2:
479     case AV_CODEC_ID_MP3:
480         rtp_send_mpegaudio(s1, pkt->data, size);
481         break;
482     case AV_CODEC_ID_MPEG1VIDEO:
483     case AV_CODEC_ID_MPEG2VIDEO:
484         ff_rtp_send_mpegvideo(s1, pkt->data, size);
485         break;
486     case AV_CODEC_ID_AAC:
487         if (s->flags & FF_RTP_FLAG_MP4A_LATM)
488             ff_rtp_send_latm(s1, pkt->data, size);
489         else
490             ff_rtp_send_aac(s1, pkt->data, size);
491         break;
492     case AV_CODEC_ID_AMR_NB:
493     case AV_CODEC_ID_AMR_WB:
494         ff_rtp_send_amr(s1, pkt->data, size);
495         break;
496     case AV_CODEC_ID_MPEG2TS:
497         rtp_send_mpegts_raw(s1, pkt->data, size);
498         break;
499     case AV_CODEC_ID_H264:
500         ff_rtp_send_h264(s1, pkt->data, size);
501         break;
502     case AV_CODEC_ID_H263:
503         if (s->flags & FF_RTP_FLAG_RFC2190) {
504             int mb_info_size = 0;
505             const uint8_t *mb_info =
506                 av_packet_get_side_data(pkt, AV_PKT_DATA_H263_MB_INFO,
507                                         &mb_info_size);
508             ff_rtp_send_h263_rfc2190(s1, pkt->data, size, mb_info, mb_info_size);
509             break;
510         }
511         /* Fallthrough */
512     case AV_CODEC_ID_H263P:
513         ff_rtp_send_h263(s1, pkt->data, size);
514         break;
515     case AV_CODEC_ID_VORBIS:
516     case AV_CODEC_ID_THEORA:
517         ff_rtp_send_xiph(s1, pkt->data, size);
518         break;
519     case AV_CODEC_ID_VP8:
520         ff_rtp_send_vp8(s1, pkt->data, size);
521         break;
522     case AV_CODEC_ID_ILBC:
523         rtp_send_ilbc(s1, pkt->data, size);
524         break;
525     case AV_CODEC_ID_MJPEG:
526         ff_rtp_send_jpeg(s1, pkt->data, size);
527         break;
528     default:
529         /* better than nothing : send the codec raw data */
530         rtp_send_raw(s1, pkt->data, size);
531         break;
532     }
533     return 0;
534 }
535
536 static int rtp_write_trailer(AVFormatContext *s1)
537 {
538     RTPMuxContext *s = s1->priv_data;
539
540     av_freep(&s->buf);
541
542     return 0;
543 }
544
545 AVOutputFormat ff_rtp_muxer = {
546     .name              = "rtp",
547     .long_name         = NULL_IF_CONFIG_SMALL("RTP output"),
548     .priv_data_size    = sizeof(RTPMuxContext),
549     .audio_codec       = AV_CODEC_ID_PCM_MULAW,
550     .video_codec       = AV_CODEC_ID_MPEG4,
551     .write_header      = rtp_write_header,
552     .write_packet      = rtp_write_packet,
553     .write_trailer     = rtp_write_trailer,
554     .priv_class        = &rtp_muxer_class,
555 };