66ea4ced92d3b7f9d098f03d54676aab1a75a06c
[ffmpeg.git] / 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, {.dbl = -1 }, -1, 127, AV_OPT_FLAG_ENCODING_PARAM },
36     { NULL },
37 };
38
39 static const AVClass rtp_muxer_class = {
40     .class_name = "RTP muxer",
41     .item_name  = av_default_item_name,
42     .option     = options,
43     .version    = LIBAVUTIL_VERSION_INT,
44 };
45
46 #define RTCP_SR_SIZE 28
47
48 static int is_supported(enum CodecID id)
49 {
50     switch(id) {
51     case CODEC_ID_H263:
52     case CODEC_ID_H263P:
53     case CODEC_ID_H264:
54     case CODEC_ID_MPEG1VIDEO:
55     case CODEC_ID_MPEG2VIDEO:
56     case CODEC_ID_MPEG4:
57     case CODEC_ID_AAC:
58     case CODEC_ID_MP2:
59     case CODEC_ID_MP3:
60     case CODEC_ID_PCM_ALAW:
61     case CODEC_ID_PCM_MULAW:
62     case CODEC_ID_PCM_S8:
63     case CODEC_ID_PCM_S16BE:
64     case CODEC_ID_PCM_S16LE:
65     case CODEC_ID_PCM_U16BE:
66     case CODEC_ID_PCM_U16LE:
67     case CODEC_ID_PCM_U8:
68     case CODEC_ID_MPEG2TS:
69     case CODEC_ID_AMR_NB:
70     case CODEC_ID_AMR_WB:
71     case CODEC_ID_VORBIS:
72     case CODEC_ID_THEORA:
73     case CODEC_ID_VP8:
74     case CODEC_ID_ADPCM_G722:
75     case CODEC_ID_ADPCM_G726:
76         return 1;
77     default:
78         return 0;
79     }
80 }
81
82 static int rtp_write_header(AVFormatContext *s1)
83 {
84     RTPMuxContext *s = s1->priv_data;
85     int max_packet_size, n;
86     AVStream *st;
87
88     if (s1->nb_streams != 1) {
89         av_log(s1, AV_LOG_ERROR, "Only one stream supported in the RTP muxer\n");
90         return AVERROR(EINVAL);
91     }
92     st = s1->streams[0];
93     if (!is_supported(st->codec->codec_id)) {
94         av_log(s1, AV_LOG_ERROR, "Unsupported codec %x\n", st->codec->codec_id);
95
96         return -1;
97     }
98
99     if (s->payload_type < 0)
100         s->payload_type = ff_rtp_get_payload_type(s1, st->codec);
101     s->base_timestamp = av_get_random_seed();
102     s->timestamp = s->base_timestamp;
103     s->cur_timestamp = 0;
104     s->ssrc = av_get_random_seed();
105     s->first_packet = 1;
106     s->first_rtcp_ntp_time = ff_ntp_time();
107     if (s1->start_time_realtime)
108         /* Round the NTP time to whole milliseconds. */
109         s->first_rtcp_ntp_time = (s1->start_time_realtime / 1000) * 1000 +
110                                  NTP_OFFSET_US;
111
112     max_packet_size = s1->pb->max_packet_size;
113     if (max_packet_size <= 12) {
114         av_log(s1, AV_LOG_ERROR, "Max packet size %d too low\n", max_packet_size);
115         return AVERROR(EIO);
116     }
117     s->buf = av_malloc(max_packet_size);
118     if (s->buf == NULL) {
119         return AVERROR(ENOMEM);
120     }
121     s->max_payload_size = max_packet_size - 12;
122
123     s->max_frames_per_packet = 0;
124     if (s1->max_delay) {
125         if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
126             if (st->codec->frame_size == 0) {
127                 av_log(s1, AV_LOG_ERROR, "Cannot respect max delay: frame size = 0\n");
128             } else {
129                 s->max_frames_per_packet = av_rescale_rnd(s1->max_delay, st->codec->sample_rate, AV_TIME_BASE * (int64_t)st->codec->frame_size, AV_ROUND_DOWN);
130             }
131         }
132         if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
133             /* FIXME: We should round down here... */
134             s->max_frames_per_packet = av_rescale_q(s1->max_delay, (AVRational){1, 1000000}, st->codec->time_base);
135         }
136     }
137
138     avpriv_set_pts_info(st, 32, 1, 90000);
139     switch(st->codec->codec_id) {
140     case CODEC_ID_MP2:
141     case CODEC_ID_MP3:
142         s->buf_ptr = s->buf + 4;
143         break;
144     case CODEC_ID_MPEG1VIDEO:
145     case CODEC_ID_MPEG2VIDEO:
146         break;
147     case CODEC_ID_MPEG2TS:
148         n = s->max_payload_size / TS_PACKET_SIZE;
149         if (n < 1)
150             n = 1;
151         s->max_payload_size = n * TS_PACKET_SIZE;
152         s->buf_ptr = s->buf;
153         break;
154     case CODEC_ID_H264:
155         /* check for H.264 MP4 syntax */
156         if (st->codec->extradata_size > 4 && st->codec->extradata[0] == 1) {
157             s->nal_length_size = (st->codec->extradata[4] & 0x03) + 1;
158         }
159         break;
160     case CODEC_ID_VORBIS:
161     case CODEC_ID_THEORA:
162         if (!s->max_frames_per_packet) s->max_frames_per_packet = 15;
163         s->max_frames_per_packet = av_clip(s->max_frames_per_packet, 1, 15);
164         s->max_payload_size -= 6; // ident+frag+tdt/vdt+pkt_num+pkt_length
165         s->num_frames = 0;
166         goto defaultcase;
167     case CODEC_ID_VP8:
168         av_log(s1, AV_LOG_ERROR, "RTP VP8 payload implementation is "
169                                  "incompatible with the latest spec drafts.\n");
170         break;
171     case CODEC_ID_ADPCM_G722:
172         /* Due to a historical error, the clock rate for G722 in RTP is
173          * 8000, even if the sample rate is 16000. See RFC 3551. */
174         avpriv_set_pts_info(st, 32, 1, 8000);
175         break;
176     case CODEC_ID_AMR_NB:
177     case CODEC_ID_AMR_WB:
178         if (!s->max_frames_per_packet)
179             s->max_frames_per_packet = 12;
180         if (st->codec->codec_id == CODEC_ID_AMR_NB)
181             n = 31;
182         else
183             n = 61;
184         /* max_header_toc_size + the largest AMR payload must fit */
185         if (1 + s->max_frames_per_packet + n > s->max_payload_size) {
186             av_log(s1, AV_LOG_ERROR, "RTP max payload size too small for AMR\n");
187             return -1;
188         }
189         if (st->codec->channels != 1) {
190             av_log(s1, AV_LOG_ERROR, "Only mono is supported\n");
191             return -1;
192         }
193     case CODEC_ID_AAC:
194         s->num_frames = 0;
195     default:
196 defaultcase:
197         if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
198             avpriv_set_pts_info(st, 32, 1, st->codec->sample_rate);
199         }
200         s->buf_ptr = s->buf;
201         break;
202     }
203
204     return 0;
205 }
206
207 /* send an rtcp sender report packet */
208 static void rtcp_send_sr(AVFormatContext *s1, int64_t ntp_time)
209 {
210     RTPMuxContext *s = s1->priv_data;
211     uint32_t rtp_ts;
212
213     av_dlog(s1, "RTCP: %02x %"PRIx64" %x\n", s->payload_type, ntp_time, s->timestamp);
214
215     s->last_rtcp_ntp_time = ntp_time;
216     rtp_ts = av_rescale_q(ntp_time - s->first_rtcp_ntp_time, (AVRational){1, 1000000},
217                           s1->streams[0]->time_base) + s->base_timestamp;
218     avio_w8(s1->pb, (RTP_VERSION << 6));
219     avio_w8(s1->pb, RTCP_SR);
220     avio_wb16(s1->pb, 6); /* length in words - 1 */
221     avio_wb32(s1->pb, s->ssrc);
222     avio_wb32(s1->pb, ntp_time / 1000000);
223     avio_wb32(s1->pb, ((ntp_time % 1000000) << 32) / 1000000);
224     avio_wb32(s1->pb, rtp_ts);
225     avio_wb32(s1->pb, s->packet_count);
226     avio_wb32(s1->pb, s->octet_count);
227     avio_flush(s1->pb);
228 }
229
230 /* send an rtp packet. sequence number is incremented, but the caller
231    must update the timestamp itself */
232 void ff_rtp_send_data(AVFormatContext *s1, const uint8_t *buf1, int len, int m)
233 {
234     RTPMuxContext *s = s1->priv_data;
235
236     av_dlog(s1, "rtp_send_data size=%d\n", len);
237
238     /* build the RTP header */
239     avio_w8(s1->pb, (RTP_VERSION << 6));
240     avio_w8(s1->pb, (s->payload_type & 0x7f) | ((m & 0x01) << 7));
241     avio_wb16(s1->pb, s->seq);
242     avio_wb32(s1->pb, s->timestamp);
243     avio_wb32(s1->pb, s->ssrc);
244
245     avio_write(s1->pb, buf1, len);
246     avio_flush(s1->pb);
247
248     s->seq++;
249     s->octet_count += len;
250     s->packet_count++;
251 }
252
253 /* send an integer number of samples and compute time stamp and fill
254    the rtp send buffer before sending. */
255 static void rtp_send_samples(AVFormatContext *s1,
256                              const uint8_t *buf1, int size, int sample_size_bits)
257 {
258     RTPMuxContext *s = s1->priv_data;
259     int len, max_packet_size, n;
260     /* Calculate the number of bytes to get samples aligned on a byte border */
261     int aligned_samples_size = sample_size_bits/av_gcd(sample_size_bits, 8);
262
263     max_packet_size = (s->max_payload_size / aligned_samples_size) * aligned_samples_size;
264     /* Not needed, but who knows. Don't check if samples aren't an even number of bytes. */
265     if ((sample_size_bits % 8) == 0 && ((8 * size) % sample_size_bits) != 0)
266         av_abort();
267     n = 0;
268     while (size > 0) {
269         s->buf_ptr = s->buf;
270         len = FFMIN(max_packet_size, size);
271
272         /* copy data */
273         memcpy(s->buf_ptr, buf1, len);
274         s->buf_ptr += len;
275         buf1 += len;
276         size -= len;
277         s->timestamp = s->cur_timestamp + n * 8 / sample_size_bits;
278         ff_rtp_send_data(s1, s->buf, s->buf_ptr - s->buf, 0);
279         n += (s->buf_ptr - s->buf);
280     }
281 }
282
283 static void rtp_send_mpegaudio(AVFormatContext *s1,
284                                const uint8_t *buf1, int size)
285 {
286     RTPMuxContext *s = s1->priv_data;
287     int len, count, max_packet_size;
288
289     max_packet_size = s->max_payload_size;
290
291     /* test if we must flush because not enough space */
292     len = (s->buf_ptr - s->buf);
293     if ((len + size) > max_packet_size) {
294         if (len > 4) {
295             ff_rtp_send_data(s1, s->buf, s->buf_ptr - s->buf, 0);
296             s->buf_ptr = s->buf + 4;
297         }
298     }
299     if (s->buf_ptr == s->buf + 4) {
300         s->timestamp = s->cur_timestamp;
301     }
302
303     /* add the packet */
304     if (size > max_packet_size) {
305         /* big packet: fragment */
306         count = 0;
307         while (size > 0) {
308             len = max_packet_size - 4;
309             if (len > size)
310                 len = size;
311             /* build fragmented packet */
312             s->buf[0] = 0;
313             s->buf[1] = 0;
314             s->buf[2] = count >> 8;
315             s->buf[3] = count;
316             memcpy(s->buf + 4, buf1, len);
317             ff_rtp_send_data(s1, s->buf, len + 4, 0);
318             size -= len;
319             buf1 += len;
320             count += len;
321         }
322     } else {
323         if (s->buf_ptr == s->buf + 4) {
324             /* no fragmentation possible */
325             s->buf[0] = 0;
326             s->buf[1] = 0;
327             s->buf[2] = 0;
328             s->buf[3] = 0;
329         }
330         memcpy(s->buf_ptr, buf1, size);
331         s->buf_ptr += size;
332     }
333 }
334
335 static void rtp_send_raw(AVFormatContext *s1,
336                          const uint8_t *buf1, int size)
337 {
338     RTPMuxContext *s = s1->priv_data;
339     int len, max_packet_size;
340
341     max_packet_size = s->max_payload_size;
342
343     while (size > 0) {
344         len = max_packet_size;
345         if (len > size)
346             len = size;
347
348         s->timestamp = s->cur_timestamp;
349         ff_rtp_send_data(s1, buf1, len, (len == size));
350
351         buf1 += len;
352         size -= len;
353     }
354 }
355
356 /* NOTE: size is assumed to be an integer multiple of TS_PACKET_SIZE */
357 static void rtp_send_mpegts_raw(AVFormatContext *s1,
358                                 const uint8_t *buf1, int size)
359 {
360     RTPMuxContext *s = s1->priv_data;
361     int len, out_len;
362
363     while (size >= TS_PACKET_SIZE) {
364         len = s->max_payload_size - (s->buf_ptr - s->buf);
365         if (len > size)
366             len = size;
367         memcpy(s->buf_ptr, buf1, len);
368         buf1 += len;
369         size -= len;
370         s->buf_ptr += len;
371
372         out_len = s->buf_ptr - s->buf;
373         if (out_len >= s->max_payload_size) {
374             ff_rtp_send_data(s1, s->buf, out_len, 0);
375             s->buf_ptr = s->buf;
376         }
377     }
378 }
379
380 static int rtp_write_packet(AVFormatContext *s1, AVPacket *pkt)
381 {
382     RTPMuxContext *s = s1->priv_data;
383     AVStream *st = s1->streams[0];
384     int rtcp_bytes;
385     int size= pkt->size;
386
387     av_dlog(s1, "%d: write len=%d\n", pkt->stream_index, size);
388
389     rtcp_bytes = ((s->octet_count - s->last_octet_count) * RTCP_TX_RATIO_NUM) /
390         RTCP_TX_RATIO_DEN;
391     if ((s->first_packet || ((rtcp_bytes >= RTCP_SR_SIZE) &&
392                             (ff_ntp_time() - s->last_rtcp_ntp_time > 5000000))) &&
393         !(s->flags & FF_RTP_FLAG_SKIP_RTCP)) {
394         rtcp_send_sr(s1, ff_ntp_time());
395         s->last_octet_count = s->octet_count;
396         s->first_packet = 0;
397     }
398     s->cur_timestamp = s->base_timestamp + pkt->pts;
399
400     switch(st->codec->codec_id) {
401     case CODEC_ID_PCM_MULAW:
402     case CODEC_ID_PCM_ALAW:
403     case CODEC_ID_PCM_U8:
404     case CODEC_ID_PCM_S8:
405         rtp_send_samples(s1, pkt->data, size, 8 * st->codec->channels);
406         break;
407     case CODEC_ID_PCM_U16BE:
408     case CODEC_ID_PCM_U16LE:
409     case CODEC_ID_PCM_S16BE:
410     case CODEC_ID_PCM_S16LE:
411         rtp_send_samples(s1, pkt->data, size, 16 * st->codec->channels);
412         break;
413     case CODEC_ID_ADPCM_G722:
414         /* The actual sample size is half a byte per sample, but since the
415          * stream clock rate is 8000 Hz while the sample rate is 16000 Hz,
416          * the correct parameter for send_samples_bits is 8 bits per stream
417          * clock. */
418         rtp_send_samples(s1, pkt->data, size, 8 * st->codec->channels);
419         break;
420     case CODEC_ID_ADPCM_G726:
421         rtp_send_samples(s1, pkt->data, size,
422                          st->codec->bits_per_coded_sample * st->codec->channels);
423         break;
424     case CODEC_ID_MP2:
425     case CODEC_ID_MP3:
426         rtp_send_mpegaudio(s1, pkt->data, size);
427         break;
428     case CODEC_ID_MPEG1VIDEO:
429     case CODEC_ID_MPEG2VIDEO:
430         ff_rtp_send_mpegvideo(s1, pkt->data, size);
431         break;
432     case CODEC_ID_AAC:
433         if (s->flags & FF_RTP_FLAG_MP4A_LATM)
434             ff_rtp_send_latm(s1, pkt->data, size);
435         else
436             ff_rtp_send_aac(s1, pkt->data, size);
437         break;
438     case CODEC_ID_AMR_NB:
439     case CODEC_ID_AMR_WB:
440         ff_rtp_send_amr(s1, pkt->data, size);
441         break;
442     case CODEC_ID_MPEG2TS:
443         rtp_send_mpegts_raw(s1, pkt->data, size);
444         break;
445     case CODEC_ID_H264:
446         ff_rtp_send_h264(s1, pkt->data, size);
447         break;
448     case CODEC_ID_H263:
449         if (s->flags & FF_RTP_FLAG_RFC2190) {
450             ff_rtp_send_h263_rfc2190(s1, pkt->data, size);
451             break;
452         }
453         /* Fallthrough */
454     case CODEC_ID_H263P:
455         ff_rtp_send_h263(s1, pkt->data, size);
456         break;
457     case CODEC_ID_VORBIS:
458     case CODEC_ID_THEORA:
459         ff_rtp_send_xiph(s1, pkt->data, size);
460         break;
461     case CODEC_ID_VP8:
462         ff_rtp_send_vp8(s1, pkt->data, size);
463         break;
464     default:
465         /* better than nothing : send the codec raw data */
466         rtp_send_raw(s1, pkt->data, size);
467         break;
468     }
469     return 0;
470 }
471
472 static int rtp_write_trailer(AVFormatContext *s1)
473 {
474     RTPMuxContext *s = s1->priv_data;
475
476     av_freep(&s->buf);
477
478     return 0;
479 }
480
481 AVOutputFormat ff_rtp_muxer = {
482     .name              = "rtp",
483     .long_name         = NULL_IF_CONFIG_SMALL("RTP output format"),
484     .priv_data_size    = sizeof(RTPMuxContext),
485     .audio_codec       = CODEC_ID_PCM_MULAW,
486     .video_codec       = CODEC_ID_MPEG4,
487     .write_header      = rtp_write_header,
488     .write_packet      = rtp_write_packet,
489     .write_trailer     = rtp_write_trailer,
490     .priv_class = &rtp_muxer_class,
491 };