#include "avio_internal.h"
typedef struct MuxChain {
+ const AVClass *class;
AVFormatContext *mpegts_ctx;
AVFormatContext *rtp_ctx;
AVPacket *pkt;
AVDictionary* mpegts_muxer_options;
+ AVDictionary* rtp_muxer_options;
} MuxChain;
static int rtp_mpegts_write_close(AVFormatContext *s)
{
MuxChain *chain = s->priv_data;
AVFormatContext *mpegts_ctx = NULL, *rtp_ctx = NULL;
- ff_const59 AVOutputFormat *mpegts_format = av_guess_format("mpegts", NULL, NULL);
- ff_const59 AVOutputFormat *rtp_format = av_guess_format("rtp", NULL, NULL);
+ const AVOutputFormat *mpegts_format = av_guess_format("mpegts", NULL, NULL);
+ const AVOutputFormat *rtp_format = av_guess_format("rtp", NULL, NULL);
int i, ret = AVERROR(ENOMEM);
AVStream *st;
AVDictionary *mpegts_muxer_options = NULL;
+ AVDictionary *rtp_muxer_options = NULL;
if (!mpegts_format || !rtp_format)
return AVERROR(ENOSYS);
av_dict_copy(&mpegts_muxer_options, chain->mpegts_muxer_options, 0);
- if ((ret = avformat_write_header(mpegts_ctx, &mpegts_muxer_options)) < 0)
+ ret = avformat_write_header(mpegts_ctx, &mpegts_muxer_options);
+ av_dict_free(&mpegts_muxer_options);
+ if (ret < 0)
goto fail;
+
for (i = 0; i < s->nb_streams; i++)
s->streams[i]->time_base = mpegts_ctx->streams[i]->time_base;
st->time_base.den = 90000;
st->codecpar->codec_id = AV_CODEC_ID_MPEG2TS;
rtp_ctx->pb = s->pb;
- if ((ret = avformat_write_header(rtp_ctx, NULL)) < 0)
+ av_dict_copy(&rtp_muxer_options, chain->rtp_muxer_options, 0);
+ ret = avformat_write_header(rtp_ctx, &rtp_muxer_options);
+ av_dict_free(&rtp_muxer_options);
+ if (ret < 0)
goto fail;
+
chain->rtp_ctx = rtp_ctx;
return 0;
if (mpegts_ctx) {
ffio_free_dyn_buf(&mpegts_ctx->pb);
av_dict_free(&mpegts_ctx->metadata);
- av_dict_free(&mpegts_muxer_options);
avformat_free_context(mpegts_ctx);
}
avformat_free_context(rtp_ctx);
#define E AV_OPT_FLAG_ENCODING_PARAM
static const AVOption options[] = {
{ "mpegts_muxer_options", "set list of options for the MPEG-TS muxer", OFFSET(mpegts_muxer_options), AV_OPT_TYPE_DICT, {.str = NULL}, 0, 0, E },
+ { "rtp_muxer_options", "set list of options for the RTP muxer", OFFSET(rtp_muxer_options), AV_OPT_TYPE_DICT, {.str = NULL}, 0, 0, E },
{ NULL },
};
.version = LIBAVUTIL_VERSION_INT,
};
-AVOutputFormat ff_rtp_mpegts_muxer = {
+const AVOutputFormat ff_rtp_mpegts_muxer = {
.name = "rtp_mpegts",
.long_name = NULL_IF_CONFIG_SMALL("RTP/mpegts output format"),
.priv_data_size = sizeof(MuxChain),