Как сгенерировать метки времени из числа 33-битных ПЦР - PullRequest
0 голосов
/ 21 ноября 2018

Итак, я пытался обернуть голову вокруг времени mpeg-ts и PCR (эталонное время программы).Я понимаю, что это используется для синхронизации видео / аудио на декодере.

До сих пор я понимал, что все работает от тактовой частоты 27 МГц (генератора).Эти часы зацикливаются с частотой 27 МГц, считая от 0 до 299, и продолжают повторяться.Каждый раз, когда происходит этот «переход» с 299 на 0, 33-разрядный счетчик ПЦР увеличивается на 1. Таким образом, 33-разрядный счетчик ПЦР сам по себе работает с частотой 90 кГц.Итак, еще один способ сказать, что частота 27 МГц делится на 300, что дает нам частоту 90 кГц.

Эти тактовые частоты 90 кГц затем используются для 33-битного счетчика ПЦР.

Я понимаю, что исторически было выбрано 90 кГц, потому что mpeg-1 использовал 90 кГц.[см. источник здесь]

В любом случае ... Я читал, что 33-битные значения счетчика PCR варьируются от 0x000000000 до 0x1FFFFFFFF.И согласно этому , это показывает, что эти значения означают с точки зрения времени, как мы, люди, понимаем это (часы, минуты, секунды и т. Д.): 00: 00: 00.000 (0x000000000) на 26: 30: 43.717 (0x1FFFFFFFF)

Итак, в конечном счете, мой вопрос касается того, как эти шестнадцатеричные коды переводятся в эти метки времени.Какими были бы уравнения, если бы кто-нибудь дал мне шестнадцатеричный код, и теперь мне нужно воспроизвести отметку времени?

Буду признателен за любую помощь:)

==========

Я сам ближе к ответу.Глядя на диапазон от 0x000000000 до 0x1FFFFFFFF, это в основном от 0 до 8589934591 в двоичном виде.Поскольку частота ПЦР составляет 90 кГц, для получения количества секунд, которое требуется для перехода от 0 до 8589934591, мы можем сделать 8589934591/90000, что дает нам 95443,71768 секунд.

1 Ответ

0 голосов
/ 21 ноября 2018

Если вы не создаете кодировщик со строгим битрейтом для вещания по спутниковому или наземному радио, PCR не имеет большого значения.

Сценарий: вы вещаете на беспроводной приемник без обратного канала, приемникимеет член, работающий со скоростью 90000 тиков в секунду.Ваш кодер также работает со скоростью 90000 билетов в секунду.Как вы можете быть уверены, что приемник и вещатель имеют ТОЧНОЕ определение секунды?Может быть, одна сторона движется немного быстро или медленно.Чтобы синхронизировать часы, кодер время от времени отправляет текущее время. Это значение - PCR.Например, если вы вещаете со скоростью 15 040 000 бит в секунду, получатель получает 188-байтовый пакет каждые 0,0000125 секунд.Время от времени (100 мс) кодер будет вставлять свое текущее время.Приемник может сравнить это время со своими внутренними часами и определить, работает ли он быстрее или медленнее, чем широковещательный кодер.Чтобы сохранить строгие 235 000 пакетов в секунду (15 040 000 / (188 * 8) = 235 000), кодер вставит нулевые пакеты.В интернете нулевые пакеты занимают полосу пропускания и не имеют значения, поэтому они исключаются.Следовательно, PCR больше не имеет значения, потому что его время больше не зависит от скорости приема.

Чтобы ответить на ваш вопрос.Установите значение 27 Гц на ноль, используйте недавнее значение dts минус небольшое статическое значение (например, 100 мс) для значения 90 кГц.

...