免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2764 | 回复: 4
打印 上一主题 下一主题

问一个Linux传输实时语音数据的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-09 11:03 |只看该作者 |倒序浏览
程序基本就是这样一个流程

while (1) {
每20ms从网络接收一个RTP包
解包后将数据写入DSP芯片
}

在没有任何其他干扰的情况下,运行良好
但是一旦有其他程序运行, 尤其是其他程序或线程建立或断开socket连接,
这个本应该20ms一个周期的循环很容易被延时到80ms以上
这么长的延时就很容易导致DSP输出一小段静音,虽然人耳听不出,但测量时的波形非常明显。

求解决办法。
另外,用的内核是2.4的。

论坛徽章:
0
2 [报告]
发表于 2007-07-09 12:21 |只看该作者
你的定时需要很精确吗?如果是,看看能不能修改为用alarm实现定时。

论坛徽章:
0
3 [报告]
发表于 2007-07-10 16:02 |只看该作者
alarm和setitimer同样都不能保证不产生延迟。

论坛徽章:
0
4 [报告]
发表于 2007-07-10 17:15 |只看该作者
试试这个:
int better_sleep (double sleep_time)
{
struct timespec tv;
/* Construct the timespec from the number of whole seconds... */
tv.tv_sec = (time_t) sleep_time;
/* ... and the remainder in nanoseconds. */
tv.tv_nsec = (long) ((sleep_time - tv.tv_sec) * 1e+9);

while (1)
{
  /* Sleep for the time specified in tv. If interrupted by a
    signal, place the remaining time left to sleep back into tv. */
  int rval = nanosleep (&tv, &tv);
  if (rval == 0)
   /* Completed the entire sleep time; all done. */
   return 0;
  else if (errno == EINTR)
   /* Interrupted by a signal. Try again. */
   continue;
  else
   /* Some other error; bail out. */
   return rval;
}
return 0;
}

论坛徽章:
0
5 [报告]
发表于 2007-07-11 08:41 |只看该作者
楼主兄弟,你语音采集和播放是用什么做的,oss还是alsa?
兄弟我也在做这个用oss的,录音时的麦克风的声音反馈总是禁止不了,请问这种情况该如何处理?
谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP