Я также пытаюсь изменить -pat_period. Однако я до сих пор не добился успеха. Но хотел бы поделиться своими исследованиями. Я проверил в исходном файле mpegtsenc.c следующий код объясняет, как это работает, как показано ниже: Обратите внимание, что это для справки к коду.
if (ts->mux_rate > 1) {
service->pcr_packet_period = (ts->mux_rate * PCR_RETRANS_TIME)
(TS_PACKET_SIZE * 8 * 1000);
ts->sdt_packet_period = (ts->mux_rate * SDT_RETRANS_TIME)
(TS_PACKET_SIZE * 8 * 1000);
ts->pat_packet_period = (ts->mux_rate * PAT_RETRANS_TIME)
(TS_PACKET_SIZE * 8 * 1000);
Определите значения следующим образом:
#define SDT_RETRANS_TIME 500
#define PAT_RETRANS_TIME 100
#define PCR_RETRANS_TIME 20
#define TS_PACKET_SIZE 188
если вы вычислите значения, вы получите правильное значение pcr в соответствии с выражением. В этом примере я предоставил 7 значений -pat_period, -sdt_period, -pcr_period и muxrate 6500000. Вы получаете значение для ПЦР, но независимо от того, какое значение вы используете для SDT или PAT, оно передается после каждых 2147483647 pkts.
Пример для ПЦР
6500000 * 7/188 * 8 * 1000 = 45500000/1504000 = 30,25265957446809
Как вы можете видеть, строка отладки ffmpeg показывает, что PCR передается через каждые 30 пунктов. Но это не относится к SDT/PAT.
> [mpegts @ 0x22862c0] muxrate 6500000, pcr every 30 pkts, sdt every
> 2147483647, pat/pmt every 2147483647 pkts
Для PAT / SDT у нас должно быть подобное, но фактическое значение отличается от ожидаемого.
Я все еще работаю над этим. Мысль поделиться своими выводами. Я буду признателен, если эксперты могут помочь.
Также хотелось бы узнать, можете ли вы подсказать, как вы достигли 78 баллов по ПАТ? Как вы проверили, что это после каждых 78 пунктов?
Обходные пути:
1) Вы можете определить желаемое значение в исходном коде, скомпилировать и продолжать тестирование, пока не получите результат.
2) Увеличьте мукрат, если вы не получите желаемого результата, но это потребляет много трафика. увеличение приведет к снижению количества пакетов, после которых будет передаваться PAT
Обновление: мой плохой, нет, это не имеет никакого значения для TS, на самом деле оно увеличивается до длительности PAT/PMT до 483 мс, которая достигает пика выше 500 мс и генерирует тревогу на анализаторе.