简体   繁体   English

ffmpeg:如何将AAC音频数据包转换为ADTS格式

[英]ffmpeg: How to convert AAC audio packets to ADTS format

I am trying to write a C program that demuxes audio from an MP4 file and write demuxed AVPacket data to a file. 我正在尝试编写一个C程序,它将来自MP4文件的音频解复用,并将解复用的AVPacket数据写入文件。 But the resulting dump is missing ADTS headers. 但是生成的转储缺少ADTS标头。 Any pointers on what is the best way to add ADTS headers. 有关添加ADTS标头的最佳方法的任何指示。

I see that ffmpeg has 'adtsenc.c' file that seems to implement an ADTS muxer: 我看到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,
};

Best wishes. 最好的祝愿。

Update: I know that command line demuxing achieves putting ADTS headers when you try: 更新:我知道命令行demuxing在您尝试时实现了放置ADTS标头:

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

I checked that this process IS using adts.c ie ADTS muxer to achieve this by calling: 我检查过这个过程是使用adts.c即ADTS muxer通过调用来实现这个目的:

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

I need to figure out how to use it in my program. 我需要弄清楚如何在我的程序中使用它。 I will post an update when if I figure it out. 如果我搞清楚的话,我会发布更新。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM