[Libav-user] Need help for decoding AAC with ffmpeg and separated AVCodecContex
lingshan kong
konglingshan at duoku.com
Wed Oct 31 03:10:29 CET 2012
hi
I need some help with decoding AAC stream of audio. I get audio data via
socket. It is neccessary to create AVCodecContext separately, not from
AVFormatContext->streams[...]->codec;
First i create AVCodec, AVCOdecContext and encode PCM data to AAC packet:
avcodec_init();
avcodec_register_all();
AVCodec *encode = avcodec_find_encoder(CODEC_ID_AAC);
if (!encode)
{
DBLog("codec not found codec\n");
//exit(1);
}
AVCodecContext *encodeContext= avcodec_alloc_context();
/* put sample parameters*/
encodeContext->sample_fmt = AV_SAMPLE_FMT_S16;
encodeContext->bit_rate = 128000;
encodeContext->sample_rate = 44100.00;
encodeContext->channels = 2;
if (avcodec_open(encodeContext, encode) < 0) {
DBLog("could not open codec\n");
//exit(1);
}
char buffer[2048];
int size = 0;
size = avcodec_encode_audio(encodeContext, (uint8_t*)buffer, 2048,
(short*)pcm_buffer);
This step works well, I can encode audio data successfully, then I send
the data in buffer and it's size to remote device via socket, at the other
side, I try to decode audio data to PCM:
avcodec_init();
avcodec_register_all();
AVCodec *decode = avcodec_find_decoder(CODEC_ID_AAC);
AVCodecContext *decodeContext = avcodec_alloc_context();
decodeContext->sample_fmt = AV_SAMPLE_FMT_S16;
decodeContext->bit_rate = 128000;
decodeContext->sample_rate = 44100.00;
decodeContext->channels = 2;
av_init_packet(&avpkt);
……
AudioData* data = [receivedAudioDataArray
objectAtIndex:index];//received AAC data is in receivedAudioDataArray
avpkt.data = (uint8_t*)[data.audioData bytes];//
avpkt.size = data.bytes;
if (avcodec_open(decodeContext, decode) < 0) {
DBLog("could not open decodec\n");
assert(0);
}
int len = avcodec_decode_audio3(decodeContext, (short *)pcm_buffer,
&out_size, &avpkt);
When decode received data to PCM, I always get –1, and get console log:
channel element -1073948900.-1073948920 is not allocated
I have been confused for one week, I want to know if my way is correct or
not? Is something wrong with decodeContext's parameter? How can I decode
audio data correctly? It is very appreciate to have your help, thank you.
----
Best Regards
Kong
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20121031/bd3fe5bd/attachment.html>
More information about the Libav-user
mailing list