Как исправить неверные расчеты меток времени? [OpenRtspClient]
Мой RTSP Source
"s RTCP
SR
не являются надежными для некоторых из рассчитанных временных меток H.264
потоки часто приводят к большим отрицательным скачкам.
Вот пример из журнала отладки. Посмотрите, как он прыгает с 101006.6130 до -4193861.6830 и продолжает этот путь.
101619 : 5cd3c38 Sample 63682 bytes time 100605.6130 to 100605.6131 latency 1264447034.4738
101715 : 5cd3c38 Sample 74194 bytes time 100706.6130 to 100706.6131 latency 1264447039.4738
101815 : 5cd3c38 Sample 72484 bytes time 100804.6130 to 100804.6131 latency 1264447038.4738
101923 : 5cd3c38 Sample 95679 bytes time 100906.6130 to 100906.6131 latency 1264447031.4738
102023 : 5cd3c38 Sample 93004 bytes time 101006.6130 to 101006.6131 latency 1264447031.4738
102134 : 5cd3c38 Sample 91388 bytes time -4193861.6830 to -4193861.6829 latency 1260152052.1778
102222 : 5cd3c38 Sample 90912 bytes time -4193738.1730 to -4193738.1729 latency 1260152088.6878
102328 : 5cd3c38 Sample 105902 bytes time -4193636.1730 to -4193636.1729 latency 1260152083.6878
102430 : 5cd3c38 Sample 106334 bytes time -4193537.1730 to -4193537.1729 latency 1260152081.6878
102520 : 5cd3c38 Sample 107120 bytes time -4193437.1730 to -4193437.1729 latency 1260152090.6878
Итак, мой вопрос:
Как я могу решить эту проблему, используя
Live555
медиа-библиотека? Должен ли я игнорироватьRTCP
информация или что является рекомендуемым решением и как я могу подать заявку вLive555
?
2 ответа
Вы используете live555 исключительно на клиенте? С неизмененным исходным кодом? Откуда берется информация о регистрации в вашем вопросе?
Как правило, всегда будет один скачок в отметке времени довольно близко к началу потока: это происходит, когда клиент получает первый SR RTCP, и в этот момент клиент сбрасывает отметку времени. Это необходимо для того, чтобы клиент мог синхронизировать несколько потоков, поскольку временные метки RTP как в аудио, так и в видео начинаются со случайного смещения. RTCP SR содержит отображение из метки времени RTP в NTP, что позволяет клиенту синхронизировать метки времени. Тот факт, что временная метка переходит отрицательно, не имеет значения, так как обе метки времени RTP и NTP не подписаны.
Live555 заботится об этой синхронизации, и поэтому вы можете увидеть скачок в отметке времени довольно близко к началу. У вас есть возможность либо игнорировать все выборки, полученные до синхронизации RTCP, либо вы можете выполнить более сложное отображение смещения на ноль как до синхронизации RTCP, так и после. Вы можете проверить, произошла ли синхронизация, позвонив в live555. RtpSource::hasBeenSynchronizedUsingRTCP()
метод.
Однако, если вы видите несколько прыжков, у вас может быть другая проблема. В этом случае отредактируйте свой вопрос, добавив более подробную информацию, такую как используемый сервер RTSP, клиент RTSP и т. Д.
Я действительно не знаю реализацию RTCP SR; следовательно, я не знаю, какие единицы 100605.xxxx
представляет собой. Однако, если я предполагаю, что обычно, если я считаю, что они получены из значений PTS/DTS тактового значения 90 кГц потока.
Если это так, то хорошо известно, что такие таймеры перезагружаются с частотой 2^33 бит. Это называется WRAPAROUND часов. Если это напечатано как подписанное число - это станет положительным. Такое свертывание произойдет ровно после определенного значения Clock.
Чтобы подтвердить, что действительно самые высокие и самые низкие значения всегда будут в том же или аналогичном диапазоне.
Другая такая возможность называется разрывом, который возникает, когда временная база источника внезапно смещается (возможно, из-за некоторой неисправности).