@@ -1583,11 +1583,13 @@ Advanced Codec Digital HDTV service.
@item mpegts_pmt_start_pid @var{integer}
Set the first PID for PMTs. Default is @code{0x1000}, minimum is @code{0x0020},
-maximum is @code{0x1ffa}.
+maximum is @code{0x1ffa}. This option has no effect in m2ts mode where the PMT
+PID is fixed @code{0x0100}.
@item mpegts_start_pid @var{integer}
Set the first PID for elementary streams. Default is @code{0x0100}, minimum is
-@code{0x0020}, maximum is @code{0x1ffa}.
+@code{0x0020}, maximum is @code{0x1ffa}. This option has no effect in m2ts mode
+where the elementary stream PIDs are fixed.
@item mpegts_m2ts_mode @var{boolean}
Enable m2ts mode if set to @code{1}. Default value is @code{-1} which
@@ -94,6 +94,10 @@ typedef struct MpegTSWrite {
int pmt_start_pid;
int start_pid;
int m2ts_mode;
+ int m2ts_video_pid;
+ int m2ts_audio_pid;
+ int m2ts_subtitle_pid;
+ int m2ts_other_pid;
int pcr_period_ms;
#define MPEGTS_FLAG_REEMIT_PAT_PMT 0x01
@@ -858,6 +862,14 @@ static int mpegts_init(AVFormatContext *s)
}
}
+ ts->m2ts_video_pid = 0x1011;
+ ts->m2ts_audio_pid = 0x1100;
+ ts->m2ts_subtitle_pid = 0x1200;
+ ts->m2ts_other_pid = 0x1300; // should not be needed
+
+ if (ts->m2ts_mode)
+ ts->pmt_start_pid = 0x0100;
+
if (s->max_delay < 0) /* Not set by the caller */
s->max_delay = 0;
@@ -921,7 +933,24 @@ static int mpegts_init(AVFormatContext *s)
/* MPEG pid values < 16 are reserved. Applications which set st->id in
* this range are assigned a calculated pid. */
if (st->id < 16) {
- ts_st->pid = ts->start_pid + i;
+ if (ts->m2ts_mode) {
+ switch (st->codecpar->codec_type) {
+ case AVMEDIA_TYPE_VIDEO:
+ ts_st->pid = ts->m2ts_video_pid++;
+ break;
+ case AVMEDIA_TYPE_AUDIO:
+ ts_st->pid = ts->m2ts_audio_pid++;
+ break;
+ case AVMEDIA_TYPE_SUBTITLE:
+ ts_st->pid = ts->m2ts_subtitle_pid++;
+ break;
+ default:
+ ts_st->pid = ts->m2ts_other_pid++;
+ break;
+ }
+ } else {
+ ts_st->pid = ts->start_pid + i;
+ }
} else {
ts_st->pid = st->id;
}
Signed-off-by: Marton Balint <cus@passwd.hu> --- doc/muxers.texi | 6 ++++-- libavformat/mpegtsenc.c | 31 ++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 3 deletions(-)