2011-08-14 16 views
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の長さをチェックし、それらは同じです。内部のバイトは同じです。

答えて

0

Euhだから実際にエンコーダの状態をspeex_decode()に渡していますか?

+0

これが問題でした – edo42

関連する問題