forked from FFmpeg/FFmpeg
avformat/mpegtsenc: support storing PAT/PMT per frame
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
e3e4f1752c
commit
a9c1545a33
2 changed files with 11 additions and 0 deletions
|
@ -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 {
|
||||||
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,
|
||||||
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[] = {
|
||||||
{ "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,
|
||||||
|
|
Loading…
Add table
Reference in a new issue