0
私はボイスチャットを作成しており、送信されているデータを圧縮するためにspeexを使用しました。 しかし、受信したデータをデコードしようとするとクラッシュしました。 私はこのコードを使用してデータ圧縮:Speexボイスチャット:デコードしようとするとEXC_BAD_ACCESSがクラッシュする
Initメソッド(一度だけ実行):
/*Create a new encoder state in narrowband mode*/
state = speex_encoder_init(&speex_nb_mode);
/*Set the quality to 8 (15 kbps)*/
int tmp=8;
speex_encoder_ctl(state, SPEEX_SET_QUALITY, &tmp);
speex_bits_init(&bits);
圧縮方法:
AudioBuffer sourceBuffer = bufferList->mBuffers[0];
speex_bits_reset(&bits);
/*Encode the frame*/
speex_encode(state, sourceBuffer.mData, &bits);
char cbits[200];
int nbBytes = speex_bits_write(&bits, cbits, 200);
NSData *result = [[NSData alloc] initWithBytes:cbits length:200];
解凍方法:
NSLog(@"Lenght %d", [data length]);
speex_bits_reset(&bits);
/*Copy the data into the bit-stream struct*/
speex_bits_read_from(&bits, (void*)[data bytes], [data length]);
/*Decode the data*/
speex_decode(state, &bits, tempBuffer.mData);
同じ前と同じように初期化する
speex_decodeでエラーなしでクラッシュします。私は、入力NSDataと出力1の長さをチェックし、それらは同じです。内部のバイトは同じです。
これが問題でした – edo42