Как создать AVPacket вручную с закодированными данными AAC для отправки mpegts?

Я занимаюсь разработкой приложения, которое отправляет поток mpeg2ts с использованием FFMPEG API. (Avio_open, avformat_new_stream и т. Д.)

Проблема в том, что в приложении уже есть звук AAC-LC, поэтому нет необходимости кодировать аудиокадр, потому что мое приложение просто игнорирует данные, полученные из буфера сокета.

Насколько я знаю, чтобы открывать и отправлять mpegts с помощью FFMPEG, я должен иметь данные AVFormattContext, которые создаются из API FFMPEG для кодировщика.

Могу ли я создать AVFormatContext вручную с закодированными данными AAC-LC? или я должен декодировать и кодировать данные? Информация, которую я знаю, это частота дискретизации, кодек, битрейт.

Любая помощь будет оценена. Заранее спасибо.

0

Решение

Да, вы можете использовать закодированные данные как есть, если ваш контейнер их поддерживает. Здесь есть два этапа — кодирование и мультиплексирование. Кодирование сжимает данные, мультиплексирование смешивает их вместе в выходном файле, поэтому пакеты правильно чередуются. Пример смешивания в дистрибутиве FFMpeg помог мне в этом.

Вы также можете взглянуть на следующий класс: https://sourceforge.net/p/karlyriceditor/code/HEAD/tree/src/ffmpegvideoencoder.cpp — Этот файл из одного из моих проектов и содержит видеокодер. Начиная со строки 402 вы увидите настройки для неконвертированного звука — это довольно хакерский способ, но он сработал. К сожалению, я до сих пор в конечном итоге перекодирую аудио, потому что для моих форматов не было возможности добиться идеальной синхронизации кадров, в которой я нуждался

0

Другие решения

Других решений пока нет …