2016-07-07 25 views
0

Ich habe 16 Bit PCM-Daten mit Stereo-Setup, die ich von einem Mikrofon ergreife.Audio MP2 Kodierung und Dekodierung zur Erzeugung von Halbdaten C++ und FFMPEG

Sobald ich die Daten bekommen kodieren ich es die folgenden Encoder-Einstellungen mit

AVCodec* audio_codec = avcodec_find_encoder(AV_CODEC_ID_MP2); 

AVCodecContext* audio_codec_ctx = avcodec_alloc_context3(audio_codec); 
audio_codec_ctx->bit_rate = 64000; 
audio_codec_ctx->channels = 2; 
audio_codec_ctx->channel_layout = AV_CH_LAYOUT_STEREO; 
audio_codec_ctx->sample_rate = 44100; 
audio_codec_ctx->sample_fmt = AV_SAMPLE_FMT_S16; 

Wenn ich übergeben Sie die Audiodaten in den Codierer ich sehe, dass es 4608 Bytes von Daten jeder Zeit in Anspruch nimmt und codiert es richtig MP2 Daten. PCM-Daten, die von dem Mikrofon erfasst werden, sind 88320 Bytes und der Codierer nimmt jedes Mal 4608 Bytes und komprimiert sie.

Wenn ich jeden 4608-Byte-Abschnitt, der codiert wurde, nehme und es durch einen Decoder mit den gleichen Einstellungen wie oben, aber mit einem Decoder übergeben.

Die Decodierung funktioniert und ist erfolgreich, aber wenn ich auf die Datengröße schaue, ist es genau die Hälfte 2034 von dem, was codiert wurde. Ich verstehe nicht, warum das sein würde. Ich hätte gedacht, ich würde 4608 bekommen, wenn man bedenkt, dass der Encoder und der Decoder gleich sind.

Kann jemand etwas Licht in warum dies geschehen geben. Alles was ich einstellen sollte?

Antwort

1

Das angeforderte Decoder-Abtastformat sollte mit audio_decodecContext->request_sample_fmt eingestellt werden. sample_fmt wird vom Decoder selbst festgelegt und kann sich unterscheiden. In diesem Fall sollten Sie libswresample verwenden, um zwischen Beispielformaten zu konvertieren.