是否可以在现有音频流的末尾添加音频?

时间:2013-01-31 21:14:18

标签: c ffmpeg audio-recording libavcodec libavformat

我设法使用libavformat实现我的解码和编码音频类。 我可以创建和阅读mp3,ogg,......

现在,我想添加一个“在现有音频文件末尾录制”的功能。 即:在现有流的末尾添加一些新的音频数据帧(音频数据)。 (我的文件只是带有1和唯一流的音频文件)。

总结一下,我对此没有成功:

av_register_all(); 
avformat_open_input(&AVFormatContext , filename, NULL, NULL) 
avformat_find_stream_info(AVFormatContext , NULL) 
audio_stream_idx = av_find_best_stream(AVFormatContext , AVMEDIA_TYPE_AUDIO, -1, -1, NULL, 0); 
AVStream = AVFormatContext ->streams[audio_stream_idx_]; 
AVCodec = avcodec_find_encoder(AVStream->codec->codec_id); 
avcodec_open2(AVStream->codec, AVCodec, NULL); 
AVFrame = avcodec_alloc_frame(); 

... 

loop 
{    avcodec_encode_audio2(AVStream->codec, &AVPacket, AVFrame, &got_packet_); 
     av_write_frame(AVFormatContext, &AVPacket); 
} 

... 

它在第一个av_write_frame上崩溃了。

我看到了3个可能的原因,但我不知道该怎么做:

  • 输入和输出文件相同。我应该如何初始化AVFormatContext和AVOutputFormat?

    avformat_alloc_output_context2(& AVFormatContext,NULL,NULL,filename);    AVOutputFormat = AVFormatContext - > oformat;    avformat_open_input(& AVFormatContext,filename,NULL,NULL)

  • 当我获得AVStream时,我是否必须寻求结束?怎么样 ?

  • 我是否必须使用avio_open(& AVFormatContext-> pb,filename,AVIO_FLAG_WRITE); ?

提前致谢。 我在样本中没有发现任何相关内容,但如果你有一些样本或想法...... :)

0 个答案:

没有答案