Реализовать простой мультиплексор MPEG-TS

У меня есть приложение, которое записывает необработанные аудиоданные в LPCM, хранящиеся в буфере. Я хотел бы инкапсулировать данные в транспортном потоке и отправить этот транспортный поток через UDP в потоковый сегментатор (в соответствии со спецификациями HTTP Live Streaming) на другом хосте.

FFmpeg предоставляет утилиту командной строки для этого, но с файлом в качестве ввода ffmpeg -re -i output.aac -acodec copy -f mpegts udp://127.0.0.1:5555,

Моей первой мыслью было использовать API FFmpeg, особенно библиотеку libavformat. Предоставляет ли libavformat мультиплексор, который я мог бы использовать для инкапсуляции звука в LPCM в транспортный поток, или мне нужно реализовать его с нуля?

Я нашел этот исходный код https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/mpegts.c но я не уверен, действительно ли он выполняет то, что я ищу.

Спасибо за вашу помощь,

2 ответа

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

  1. Расшифруйте аудио / прочитайте кадры
  2. Закодируйте его как что-то подходящее для отправки в транспортном потоке, например, mp3 или AAC. Я считаю, что это список параметров: https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/mpegts.h#L45-L64
  3. Упакуйте его в TS, соответствующий вашим условиям сети, например, размер пакета и т. Д.
  4. Отправить его через UDP

Вот разумный пример всего этого: https://github.com/rvs/ffmpeg/blob/master/libavformat/output-example.c

Как уже упоминалось в предыдущем ответе от szatmary, вы также можете просто передать это в ffmpeg, что может быть самым простым

Вы можете использовать TS Muxer напрямую через libavformat. Однако вы также можете передать аудио в ffmpeg, используя -i -

Другие вопросы по тегам