2016-07-07 14 views
0

マイクから取得するステレオ設定の16ビットPCMデータがあります。ハーフデータC++とFFMPEGを生成するオーディオMP2エンコードとデコード

私はエンコードデータを取得したら、それは私がエンコーダにオーディオデータを渡すとき、私はそれをするたびにデータの4608のバイトを取り、MP2にそれを正しくエンコードしていることがわかり

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; 

次のエンコーダの設定を使用してデータ。マイクロホンで捕捉されたPCMデータは88320バイトで、エンコーダは毎回4608バイトを取り込んで圧縮します。私は符号化された各4608バイトのセクションを取得し、上記しかしデコーダと同じ設定で、デコーダを介してそれを渡す場合

AVCodecID audio_codec_id = AV_CODEC_ID_MP2; 
AVCodec * audio_decodec = avcodec_find_decoder(audio_codec_id); 

audio_decodecContext = avcodec_alloc_context3(audio_decodec); 
audio_decodecContext->bit_rate = 64000; 
audio_decodecContext->channels = 2; 
audio_decodecContext->channel_layout = AV_CH_LAYOUT_STEREO; 
audio_decodecContext->sample_rate = 44100; 
audio_decodecContext->sample_fmt = AV_SAMPLE_FMT_S16; 

デコード機能し、成功しているが、私は、データのサイズを見たとき、それがコード化されたもののちょうど半分2034年です。なぜそうなるのか分かりません。私は、エンコーダとデコーダが同じであると考えると4608になると思います。

誰もがなぜこのようなことが起きているのかを明らかにすることはできますか?私は何を設定する必要がありますか?

答えて

1

要求されたデコーダのサンプル形式はaudio_decodecContext->request_sample_fmtを使用して設定されるべきです。 sample_fmtはデコーダ自体によって設定され、異なる場合があります。その場合は、サンプルフォーマット間の変換にlibswresampleを使用する必要があります。

関連する問題