Commit a9c1545a authored by Michael Niedermayer's avatar Michael Niedermayer

avformat/mpegtsenc: support storing PAT/PMT per frame

Signed-off-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
parent e3e4f175
...@@ -810,6 +810,8 @@ Option mpegts_flags may take a set of such flags: ...@@ -810,6 +810,8 @@ Option mpegts_flags may take a set of such flags:
Reemit PAT/PMT before writing the next packet. Reemit PAT/PMT before writing the next packet.
@item latm @item latm
Use LATM packetization for AAC. Use LATM packetization for AAC.
@item pat_pmt_at_frames
Reemit PAT and PMT at each video frame.
@end table @end table
@subsection Example @subsection Example
......
...@@ -98,6 +98,7 @@ typedef struct MpegTSWrite { ...@@ -98,6 +98,7 @@ typedef struct MpegTSWrite {
int pcr_period; int pcr_period;
#define MPEGTS_FLAG_REEMIT_PAT_PMT 0x01 #define MPEGTS_FLAG_REEMIT_PAT_PMT 0x01
#define MPEGTS_FLAG_AAC_LATM 0x02 #define MPEGTS_FLAG_AAC_LATM 0x02
#define MPEGTS_FLAG_PAT_PMT_AT_FRAMES 0x04
int flags; int flags;
int copyts; int copyts;
int tables_version; int tables_version;
...@@ -971,6 +972,11 @@ static void mpegts_write_pes(AVFormatContext *s, AVStream *st, ...@@ -971,6 +972,11 @@ static void mpegts_write_pes(AVFormatContext *s, AVStream *st,
int64_t delay = av_rescale(s->max_delay, 90000, AV_TIME_BASE); int64_t delay = av_rescale(s->max_delay, 90000, AV_TIME_BASE);
int force_pat = st->codec->codec_type == AVMEDIA_TYPE_VIDEO && key && !ts_st->prev_payload_key; int force_pat = st->codec->codec_type == AVMEDIA_TYPE_VIDEO && key && !ts_st->prev_payload_key;
av_assert0(ts_st->payload != buf || st->codec->codec_type != AVMEDIA_TYPE_VIDEO);
if (ts->flags & MPEGTS_FLAG_PAT_PMT_AT_FRAMES && st->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
force_pat = 1;
}
is_start = 1; is_start = 1;
while (payload_size > 0) { while (payload_size > 0) {
retransmit_si_info(s, force_pat); retransmit_si_info(s, force_pat);
...@@ -1505,6 +1511,9 @@ static const AVOption options[] = { ...@@ -1505,6 +1511,9 @@ static const AVOption options[] = {
{ "latm", "Use LATM packetization for AAC", { "latm", "Use LATM packetization for AAC",
0, AV_OPT_TYPE_CONST, { .i64 = MPEGTS_FLAG_AAC_LATM }, 0, INT_MAX, 0, AV_OPT_TYPE_CONST, { .i64 = MPEGTS_FLAG_AAC_LATM }, 0, INT_MAX,
AV_OPT_FLAG_ENCODING_PARAM, "mpegts_flags" }, AV_OPT_FLAG_ENCODING_PARAM, "mpegts_flags" },
{ "pat_pmt_at_frames", "Reemit PAT and PMT at each video frame",
0, AV_OPT_TYPE_CONST, { .i64 = MPEGTS_FLAG_PAT_PMT_AT_FRAMES}, 0, INT_MAX,
AV_OPT_FLAG_ENCODING_PARAM, "mpegts_flags" },
// backward compatibility // backward compatibility
{ "resend_headers", "Reemit PAT/PMT before writing the next packet", { "resend_headers", "Reemit PAT/PMT before writing the next packet",
offsetof(MpegTSWrite, reemit_pat_pmt), AV_OPT_TYPE_INT, offsetof(MpegTSWrite, reemit_pat_pmt), AV_OPT_TYPE_INT,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment