两个手机同时打开Lte-Voip,通话,由于之前做了一个加密功能,
在3G,2G通话都没有问题,正常,其中一个手机是4G,也正常;如果
同时是4G Voip,会出现提示“网络信号错误,丢失,无法通话”;
查看了初步的代码,得出基本的结论,修改的代码不会影响网络,只
可能是Modem直接死掉;然后根据这个原则,判断是内存分配或使用上的问题;
经过log打印,发现果真如此。
原来2G,3G,4G在数据的up,dn时,所采用的编码格式不一样,4G Voip
实际上走的数据业务,可通讯的语音数据量大了一倍640,另外4G语音PCM采样率也大一倍16K,
所以问题....
解决方案,使用动态获取返回大小。
Android侧代码:
retval = mSpeechMessenger->readMdDataFromShareMemory(
mP4WSDBuf,
&data_type,
&data_size,
p_sph_msg->length,
p_sph_msg->rw_index);
// share memory
retval = mSpeechMessenger->writeApDataToShareMemory(mMicData,
SHARE_BUFF_DATA_TYPE_PCM_FillSE,
320, / 首要怀疑点,
&payload_length,
&write_idx);
Modem侧代码:
void spc_pcmNWay_writeSEDataDone(kal_uint16 offset, {
ASSERT(info.syncWord == 0xA2A2);
ASSERT(info.type == AUD_CCCI_STRMBUF_TYPE_PCM_FillSE);
ASSERT(info.length == (length - sizeof(spcBufInfo)));
if(info.length >0){
ASSERT(info.length == gSpc_Pcm4way.seBufSize);
3G移动语音编码
AMR家族则包含了:AMR、AMR-WB、AMR-WB+
AMR-WB(wideband extension)是AMR的升级版;由于AMR-WB的语音带宽很宽(50 Hz~7 kHz),
所以它的语音品质很高。它具有9种采样速率(都是非立体声),分别是:23.85 kbps、23.05 kbps、
19.85 kbps、18.25 kbps、15.85 kbps、14.25 kbps、12.65 kbps、8.85 kbps、6.6 kbps。其中,
能够保持高的语音品质,并且速率最低者是12.65 kbps。