声音抖动问题,哥哥们快来帮帮我啊,搞了一个礼拜了!

heeb123 2006-06-21 10:59:09
我目前做一个g.729的语音传输程序,利用一个rtp库的发送和接收代码,不过我用Ethereal收集发送前的payload(只是本地打成包还没有发送),利用我自己做的一个播放g.729的软件(软件是好的能用,我验证过了)播放怎么就有问题啊,声音很不好。下面我把部分代码贴出来,请高手们、哥哥姐姐弟弟妹妹们帮帮我吧,谢谢了,有消息可以加我msn:heeb_123@hotmail.com
case MM_WIM_DATA:
WAVEHDR* pWH=(WAVEHDR*)msg.lParam;
waveInUnprepareHeader((HWAVEIN)msg.wParam,pWH,sizeo(WAVEHDR));
if(pWH->dwBytesRecorded!=SIZE_AUDIO_FRAME)
break;
memcpy(buffer,pWH->lpData,pWH->dwBytesRecorded);
buffer[pWH->dwBytesRecorded]='\0';
pWaveIn->GetData (buffer ,pWH->dwBytesRecorded );
(对收集到的声音进行处理)
waveInPrepareHeader((HWAVEIN)msg.wParam,pWH,sizeof(WAVEHDR));
waveInAddBuffer((HWAVEIN)msg.wParam,pWH,sizeof(WAVEHDR));
...全文
331 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dodont 2006-06-23
  • 打赏
  • 举报
回复
..........还以为是要做量化时的抖动.........
heeb123 2006-06-21
  • 打赏
  • 举报
回复
不要光顶啊,哥哥呵呵要想办法帮帮我啊
heeb123 2006-06-21
  • 打赏
  • 举报
回复
发送流程我就这么走的:
收集->调用appRtpSend进行发送,大牛们帮帮我吧-_-!
heeb123 2006-06-21
  • 打赏
  • 举报
回复
void appRtpSend(UINT8 * rtpBuffer, UINT32 bufLength, UINT32 rtpTimeStamp)
{
HRTPSESSION rtp_handle = artpParam.rtpHandle;
// HRTCPSESSION rtcp_handle = artpParam.rtcpHandle;
rtpParam rtp_param;
UINT8 rtp_buffer[RTP_BUFF_SIZE]="";
UINT32 buf_length;

memset(rtp_buffer, '\0', RTP_BUFF_SIZE);
rtp_param.timestamp = rtpTimeStamp;
rtp_param.marker = FALSE;
// rtp_param.marker = TRUE;
rtp_param.payload = artpParam.rtpPayload;
rtp_param.sByte = rtpG729GetHeaderLength();

memcpy((rtp_buffer+rtp_param.sByte), rtpBuffer, bufLength);
buf_length = rtp_param.sByte + bufLength;
rtp_buffer[buf_length]='\0';
switch(rtp_param.payload)
{
case 18:
rtpG729Pack(rtp_buffer, buf_length, &rtp_param, 0);
break;
default:
break;
}
rtpWrite(rtp_handle, rtp_buffer, buf_length, &rtp_param);//rtp库函数
//在这里面进行添加rtp包头

//rtcpRTPPacketSent(rtcp_handle, rtp_param.len, rtp_param.timestamp);
}
Eddie005 2006-06-21
  • 打赏
  • 举报
回复
顶~~
heeb123 2006-06-21
  • 打赏
  • 举报
回复
void CWaveIn::GetData(char *pBuffer,int iLen)
{


char pBuffOut[1024] = "";
int iLenOut;
CAudioCode cAudioCode;

memset(pBuffOut, '\0', 1024);

rtpTimeSendStamp=rtpTimeSendStamp+160;


switch(getRtpPayload())
{
case 18 :
if(!cAudioCode.EncodeAudioData(pBuffer, iLen, pBuffOut, &iLenOut))//(进行g729编码)
{

printf("G729 encode error!\n");
return;
}
pBuffOut[iLenOut]='\0';
break;
default :
memcpy(pBuffOut, pBuffer, iLen);
iLenOut = iLen;
break;
}
appRtpSend((UINT8 *)pBuffOut, iLenOut, rtpTimeSendStamp);//调用rtp发送程序

}
happydgm 2006-06-21
  • 打赏
  • 举报
回复
程序没看出什么问题。抖动一般由于发包间隔不均匀造成的,不知道你的发包间隔是如何计算的,这个是比较关键的问题。

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧