Реализовать простой мультиплексор 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, вам необходимо:
- Расшифруйте аудио / прочитайте кадры
- Закодируйте его как что-то подходящее для отправки в транспортном потоке, например, mp3 или AAC. Я считаю, что это список параметров: https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/mpegts.h#L45-L64
- Упакуйте его в TS, соответствующий вашим условиям сети, например, размер пакета и т. Д.
- Отправить его через UDP
Вот разумный пример всего этого: https://github.com/rvs/ffmpeg/blob/master/libavformat/output-example.c
Как уже упоминалось в предыдущем ответе от szatmary, вы также можете просто передать это в ffmpeg, что может быть самым простым
Вы можете использовать TS Muxer напрямую через libavformat. Однако вы также можете передать аудио в ffmpeg, используя -i -