Я занимаюсь разработкой приложения, которое отправляет поток mpeg2ts с использованием FFMPEG API. (Avio_open, avformat_new_stream и т. Д.)
Проблема в том, что в приложении уже есть звук AAC-LC, поэтому нет необходимости кодировать аудиокадр, потому что мое приложение просто игнорирует данные, полученные из буфера сокета.
Насколько я знаю, чтобы открывать и отправлять mpegts с помощью FFMPEG, я должен иметь данные AVFormattContext, которые создаются из API FFMPEG для кодировщика.
Могу ли я создать AVFormatContext вручную с закодированными данными AAC-LC? или я должен декодировать и кодировать данные? Информация, которую я знаю, это частота дискретизации, кодек, битрейт.
Любая помощь будет оценена. Заранее спасибо.
Да, вы можете использовать закодированные данные как есть, если ваш контейнер их поддерживает. Здесь есть два этапа — кодирование и мультиплексирование. Кодирование сжимает данные, мультиплексирование смешивает их вместе в выходном файле, поэтому пакеты правильно чередуются. Пример смешивания в дистрибутиве FFMpeg помог мне в этом.
Вы также можете взглянуть на следующий класс: https://sourceforge.net/p/karlyriceditor/code/HEAD/tree/src/ffmpegvideoencoder.cpp — Этот файл из одного из моих проектов и содержит видеокодер. Начиная со строки 402 вы увидите настройки для неконвертированного звука — это довольно хакерский способ, но он сработал. К сожалению, я до сих пор в конечном итоге перекодирую аудио, потому что для моих форматов не было возможности добиться идеальной синхронизации кадров, в которой я нуждался
Других решений пока нет …