ffmpeg: Как преобразовать аудиопакеты AAC в формат ADTS

Я пытаюсь написать программу на C, которая демультиплексирует аудио из файла MP4 и записывает демультиплексированные данные AVPacket в файл. Но в полученном дампе отсутствуют заголовки ADTS. Любые указатели на то, что является лучшим способом добавить заголовки ADTS.

Я вижу, что ffmpeg имеет файл 'adtsenc.c', который, кажется, реализует мультиплексор ADTS:

AVOutputFormat ff_adts_muxer = {
    .name              = "adts",
    .long_name         = NULL_IF_CONFIG_SMALL("ADTS AAC (Advanced Audio Coding)"),
    .mime_type         = "audio/aac",
    .extensions        = "aac,adts",
    .priv_data_size    = sizeof(ADTSContext),
    .audio_codec       = AV_CODEC_ID_AAC,
    .video_codec       = AV_CODEC_ID_NONE,
    .write_header      = adts_write_header,
    .write_packet      = adts_write_packet,
    .write_trailer     = adts_write_trailer,
    .priv_class        = &adts_muxer_class,
    .flags             = AVFMT_NOTIMESTAMPS,
};

С наилучшими пожеланиями.

1 ответ

Обновление: я знаю, что демультиплексирование командной строки позволяет помещать заголовки ADTS при попытке:

ffmpeg -i input.mp4 -acodec copy -vn output.aac

Я проверил, что этот процесс использует adts.c, то есть ADTS muxer, чтобы достичь этого, вызвав:

adts_write_header()
adts_write_packet()
adts_write_packet()
.....
adts_write_trailer()

Мне нужно выяснить, как использовать его в моей программе. Я опубликую обновление, когда я это выясню.

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