diff --git a/src/muxer_pass.c b/src/muxer_pass.c index f6658ad5..933be24b 100644 --- a/src/muxer_pass.c +++ b/src/muxer_pass.c @@ -51,6 +51,7 @@ typedef struct pass_muxer { /* TS muxing */ uint8_t *pm_pat; uint8_t *pm_pmt; + uint16_t pm_pmt_version; uint32_t pm_ic; // Injection counter uint32_t pm_pc; // Packet counter } pass_muxer_t; @@ -128,11 +129,13 @@ pass_muxer_reconfigure(muxer_t* m, const struct streaming_start *ss) pm->pm_pmt[2] = 0x00 | (ss->ss_pmt_pid >> 0); pm->pm_pmt[3] = 0x10; pm->pm_pmt[4] = 0x00; - if(psi_build_pmt(ss, pm->pm_pmt+5, 183, ss->ss_pcr_pid) < 0) { + if(psi_build_pmt(ss, pm->pm_pmt+5, 183, pm->pm_pmt_version, + ss->ss_pcr_pid) < 0) { pm->m_errors++; tvhlog(LOG_ERR, "pass", "%s: Unable to build pmt", pm->pm_filename); return -1; } + pm->pm_pmt_version++; } return 0; diff --git a/src/psi.c b/src/psi.c index ff298fad..4d49ca71 100644 --- a/src/psi.c +++ b/src/psi.c @@ -710,7 +710,8 @@ psi_parse_pmt(service_t *t, const uint8_t *ptr, int len, int chksvcid, * PMT generator */ int -psi_build_pmt(const streaming_start_t *ss, uint8_t *buf0, int maxlen, int pcrpid) +psi_build_pmt(const streaming_start_t *ss, uint8_t *buf0, int maxlen, + int version, int pcrpid) { int c, tlen, dlen, l, i; uint8_t *buf, *buf1; @@ -726,8 +727,10 @@ psi_build_pmt(const streaming_start_t *ss, uint8_t *buf0, int maxlen, int pcrpid buf[4] = 0x01; buf[5] = 0xc1; /* current_next_indicator + version */ - buf[6] = 0; - buf[7] = 0; + buf[5] |= (version & 0x1F) << 1; + + buf[6] = 0; /* section number */ + buf[7] = 0; /* last section number */ buf[8] = 0xe0 | (pcrpid >> 8); buf[9] = pcrpid; diff --git a/src/psi.h b/src/psi.h index 270c4335..a3b099cf 100644 --- a/src/psi.h +++ b/src/psi.h @@ -45,7 +45,8 @@ int psi_parse_pmt(struct service *t, const uint8_t *ptr, int len, int chksvcid, int psi_build_pat(struct service *t, uint8_t *buf, int maxlen, int pmtpid); -int psi_build_pmt(const streaming_start_t *ss, uint8_t *buf, int maxlen, int pcrpid); +int psi_build_pmt(const streaming_start_t *ss, uint8_t *buf, int maxlen, + int version, int pcrpid); const char *psi_caid2name(uint16_t caid);