static const AVOption options[] = {
FF_RTP_FLAG_OPTS(RTPMuxContext, flags)
{ "payload_type", "Specify RTP payload type", offsetof(RTPMuxContext, payload_type), AV_OPT_TYPE_INT, {.dbl = -1 }, -1, 127, AV_OPT_FLAG_ENCODING_PARAM },
- { "max_packet_size", "Max packet size", offsetof(RTPMuxContext, max_packet_size), AV_OPT_TYPE_INT, {.dbl = 0 }, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM },
{ NULL },
};
s->first_rtcp_ntp_time = (s1->start_time_realtime / 1000) * 1000 +
NTP_OFFSET_US;
- if (s->max_packet_size) {
+ if (s1->packet_size) {
if (s1->pb->max_packet_size)
- s->max_packet_size = FFMIN(s->max_packet_size,
- s1->pb->max_packet_size);
+ s1->packet_size = FFMIN(s1->packet_size,
+ s1->pb->max_packet_size);
} else
- s->max_packet_size = s1->pb->max_packet_size;
- if (s->max_packet_size <= 12) {
- av_log(s1, AV_LOG_ERROR, "Max packet size %d too low\n", s->max_packet_size);
+ s1->packet_size = s1->pb->max_packet_size;
+ if (s1->packet_size <= 12) {
+ av_log(s1, AV_LOG_ERROR, "Max packet size %d too low\n", s1->packet_size);
return AVERROR(EIO);
}
- s->buf = av_malloc(s->max_packet_size);
+ s->buf = av_malloc(s1->packet_size);
if (s->buf == NULL) {
return AVERROR(ENOMEM);
}
- s->max_payload_size = s->max_packet_size - 12;
+ s->max_payload_size = s1->packet_size - 12;
s->max_frames_per_packet = 0;
- if (s1->max_delay) {
+ if (s1->max_delay > 0) {
if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
- if (st->codec->frame_size == 0) {
+ int frame_size = av_get_audio_frame_duration(st->codec, 0);
+ if (!frame_size)
+ frame_size = st->codec->frame_size;
+ if (frame_size == 0) {
av_log(s1, AV_LOG_ERROR, "Cannot respect max delay: frame size = 0\n");
} else {
- 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);
+ s->max_frames_per_packet =
+ av_rescale_q_rnd(s1->max_delay,
+ AV_TIME_BASE_Q,
+ (AVRational){ frame_size, st->codec->sample_rate },
+ AV_ROUND_DOWN);
}
}
if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
.write_header = rtp_write_header,
.write_packet = rtp_write_packet,
.write_trailer = rtp_write_trailer,
- .priv_class = &rtp_muxer_class,
+ .priv_class = &rtp_muxer_class,
};