av_interleaved_write_frame 如何写aac音频到文件
时间: 2023-08-24 10:08:29 浏览: 167
要使用 `av_interleaved_write_frame` 来将 AAC 音频写入文件,需要执行以下步骤:
1. 打开输出文件并为其分配 AVFormatContext。
```c++
AVFormatContext *outFormatCtx = nullptr;
avformat_alloc_output_context2(&outFormatCtx, nullptr, nullptr, outputFileName);
```
2. 添加音频流并为其分配 AVCodecContext。
```c++
AVStream *audioStream = avformat_new_stream(outFormatCtx, nullptr);
AVCodecContext *audioCodecCtx = audioStream->codec;
```
3. 设置音频编码参数。
```c++
audioCodecCtx->codec_id = AV_CODEC_ID_AAC;
audioCodecCtx->codec_type = AVMEDIA_TYPE_AUDIO;
audioCodecCtx->sample_fmt = AV_SAMPLE_FMT_FLTP;
audioCodecCtx->sample_rate = 44100;
audioCodecCtx->channel_layout = AV_CH_LAYOUT_STEREO;
audioCodecCtx->channels = av_get_channel_layout_nb_channels(audioCodecCtx->channel_layout);
audioCodecCtx->bit_rate = 128000;
```
4. 打开音频编码器并将其参数传递给编码器。
```c++
AVCodec *audioCodec = avcodec_find_encoder(audioCodecCtx->codec_id);
avcodec_open2(audioCodecCtx, audioCodec, nullptr);
```
5. 写入文件头。
```c++
avformat_write_header(outFormatCtx, nullptr);
```
6. 准备音频帧和输出包,然后将音频帧编码为输出包。
```c++
AVFrame *audioFrame = av_frame_alloc();
AVPacket *audioPacket = av_packet_alloc();
// 将音频数据写入音频帧
// ...
// 编码音频帧
avcodec_send_frame(audioCodecCtx, audioFrame);
while (avcodec_receive_packet(audioCodecCtx, audioPacket) == 0) {
// 将输出包写入文件
av_interleaved_write_frame(outFormatCtx, audioPacket);
}
```
7. 写入文件尾。
```c++
av_write_trailer(outFormatCtx);
```
完整的代码示例可以参考 FFmpeg 官方文档:https://ffmpeg.org/doxygen/trunk/doc/examples/encode_audio.c.html
阅读全文