Использование FFMPEG для заполнения пробелов в неформатированном аудиопотоке UDP - PullRequest
2 голосов
/ 14 февраля 2020

У меня есть радио с программным обеспечением (SDR), которое принимает аудио от экстренных служб и с помощью программного обеспечения передает потоковое аудио с использованием UDP. Звук PCM подписан 16-битным прямым порядком байтов. Поток UDP также не является постоянным и имеет данные только при обнаружении звука.

Проблема, которую я пытаюсь решить, состоит в том, что я хотел бы, чтобы промежутки в записанном аудио были заполнены тихим или нулевым звуком. Ниже приведена лишь пара моих попыток решить эту проблему:

  1. ffmpeg -f s16le -ar 8000 -i udp: //127.0.0.1: 23456 -af aresample = async = 1 -acode c libmp3lame - rtp rtp: //127.0.0.1: 1234
  2. ffmpeg -re -f lavfi -i anullsr c -f s16le -ar 8000 -i udp: //127.0.0.1: 23456 - filter_complex amix = входы = 2: длительность = первый -акод c libmp3lame -f rtp rtp: //127.0.0.1: 1234

Я думаю, мои вопросы касаются наилучшего способа решения этой проблемы и можно ли использовать ffmpeg для выполнения sh этого?

1 Ответ

2 голосов
/ 14 февраля 2020

Для выявления пробелов ffmpeg должен проверять временные метки, но у необработанного потока их нет. Таким образом, обходной путь для ffmpeg - назначить время настенных часов в качестве метки времени во время приема.

ffmpeg -f s16le -sample_rate 8000 -use_wallclock_as_timestamps true -i udp://127.0.0.1:23456 -af aresample=async=1 -acodec libmp3lame -f rtp rtp://127.0.0.1:1234
...