Как указать частоту кадров с помощью Live555 RTSPServer?

Я пытаюсь поместить необработанный поток H264 в RTSP с помощью Live555, но столкнулся с проблемой частоты кадров.

Я узнал, что необработанные потоки H264 не имеют временных меток.

Я использую Live555 H264VideoFileServerMediaSubsession.

Проблема в том, что мой необработанный поток H264 создается с частотой 20 кадров в секунду, но когда клиент (ffplay) воспроизводит поток RTSP (с инкапсулированным h264), по умолчанию он составляет 25 кадров в секунду.

Должен ли я установить (принудительно) частоту кадров в подсессии Live555, или необработанный поток H264 уже должен содержать ее?


person Daniel    schedule 22.10.2020    source источник
comment
SPS может содержать fps, см., например, stackoverflow.com/a/31342853/3102264   -  person mpromonet    schedule 24.10.2020
comment
Может содержать, да, но в моем случае кодировщик HW не заполняет эту информацию в SPS. Следовательно, я ищу способ сделать это с Live555. Я хочу назначить время в стиле настенных часов.   -  person Daniel    schedule 25.10.2020
comment
@mpromonet: вы случайно не знаете, как мне установить частоту кадров / кадров в секунду / временные метки с помощью live555? Скорость энкодера может изменяться также на лету, от 20 до 10 и обратно. Так что инициализировать частоту кадров какой-то константой здесь, к сожалению, нехорошо.   -  person Daniel    schedule 25.10.2020
comment
При изменении fps меняется и SPS.   -  person mpromonet    schedule 01.11.2020
comment
Но SPS создается кодировщиком в H264, а не в Live555, верно?   -  person Daniel    schedule 01.11.2020
comment
Это зависит от вашего кода, однако SPS и PPS - это кадры NALU, сгенерированные кодировщиком, возможно, live555 просто пересылает их. Если ваш код не пересылает их, это может быть причиной вашей проблемы.   -  person mpromonet    schedule 01.11.2020
comment
Мой кодировщик на самом деле не мой, и это черный ящик (с закрытым исходным кодом), который, похоже, не передает информацию о FPS в SPS. Таким образом, Live555 нечего пересылать, и, поскольку по умолчанию установлено значение 25 кадров в секунду, все игроки пытаются играть с частотой 25 кадров в секунду, что приводит к потере буфера.   -  person Daniel    schedule 01.11.2020
comment
Вы можете вычислить частоту кадров на выходе вашего кодировщика и изменить SPS, добавив информацию о FPS.   -  person mpromonet    schedule 01.11.2020
comment
Вообще-то у меня есть информация о FPS от энкодера (через другой метод), но я пока не мог понять, нормально ли это, если я просто скину его в текущий SPS. Разве для SPS не производится расчет контрольной суммы?   -  person Daniel    schedule 01.11.2020