老大不伤悲

 

最近研究libjingle的经验总结

最近有一个语言项目方面的调研,需要评估一下libjingle,所以研究了半个月的libjingle,现在把经验总结如下(如有不对,请不吝赐教):
1、libjingle库所带例子只支持rtpdump文件传递语音,不支持实时语音通话;
2、最新的几个版本的libjingle库去掉了GIPS voiceEngine的相关部分(可能是因为google收购了GIPS);
3、那么在windows下要支持实时语音通话,可以用linphone media engine,不过这个库是linux下的,所以迁移过来会费不少精力(不知有没有更好的方法):
要想在windows下用linphone media engine, 首先,按照README的说明添加如下代码:
Add the following lines into the libjingle.scons file.
    In the "talk.Library(env, name = "libjingle",..." section, you need to add:
      "HAVE_LINPHONE",
      "HAVE_SPEEX",
      "HAVE_ILBC",
    to the "cppdefines = [".
    add:
     "session/phone/linphonemediaengine.cc",
    to the "srcs = [ ..."

    add:     
      "third_party/mediastreamer/include",
      "third_party/ortp/include"
    to the "includedirs = [ ..."

    In the "talk.App(env, name = "call",..." section, you need to add:
      "ortp"
      "mediastreamer",
    to the "libs = [".
 
然后,
访问http://download.savannah.gnu.org/releases-noredirect/linphone/ortp/sources/下载ortp代码,
访问http://download.savannah.gnu.org/releases-noredirect/linphone/mediastreamer/下载mediastreamer,
并复制到libjingle库的third_party中,文件夹名需与上一步添加的路径名一致。

在windows下需要dll,所以还得编译两个库的dll,方法转自:
http://www.cnblogs.com/joiner/archive/2010/06/18/1759941.html Mingw&msys的手动安装;
http://www.cnblogs.com/joiner/archive/2010/06/18/1759943.html Mingw&msys环境中编译mediastreamer2和ortp。
接着,
copy .lib文件到talk\build\dbg\lib目录,
copy .dll到talk\build\dbg\staging目录。

然后,修改libjingle库的socketaddress.cc里的一个bug,参考http://mysuperbaby.iteye.com/blog/910830
增加红色,解决域名转IP的问题:
bool SocketAddress::StringToIP(const std::string& hostname, uint32* ip) {
  in_addr addr;
  struct hostent *host;
  if (isalpha(hostname.c_str()[0]))
  {
            host = gethostbyname(hostname.c_str());
            if (host == NULL)
            {
                printf("gethostbyname error\n");
                return false;
            }
            memcpy(&addr.s_addr,   host->h_addr_list[0],host->h_length);
  }
  else if (inet_aton(hostname.c_str(), &addr) == 0)
  {  
      return false;
  }
  *ip = NetworkToHost32(addr.s_addr);
  return true;
}

按照README的方法,编译。

通过后运行call.exe,与Gtalk通话。

如果音质不好,断断续续,可以在mingw&msys下,
移除 winsnd2.c 添加winsnd3.c 重新编译ortp库。

还有就是关于receiving RTCP packet: Connection reset by peer. 参考http://mysuperbaby.iteye.com/blog/911159
这篇文章,也没有解决,不过不影响音质。

posted on 2011-08-04 11:59 长风 阅读(7200) 评论(10)  编辑 收藏 引用

评论

# re: 最近研究libjingle的经验总结[未登录] 2011-10-08 21:55 思琦

您好,想请教您关于libjingle的问题,qq号398899714,希望可以联系您  回复  更多评论   

# re: 最近研究libjingle的经验总结 2011-10-09 15:45 长风

@思琦
什么问题??  回复  更多评论   

# re: 最近研究libjingle的经验总结 2011-10-09 21:16 思琦

@长风
就是编译出来的不能用,出现无法定位程序输入点PropVariantClear于动态链接库libortp-8.dll,然后查找了libortp-8.dll,并没有PropVariantClear,不知道该怎么办,还有,能不能将您编译好的libjingle,windows下用linphone media engine的代码发给我  回复  更多评论   

# re: 最近研究libjingle的经验总结 2011-10-17 14:11 长风

@思琦
你用的是哪个版本?
我用的是0.5.7,我改的就是上面写的这些啊  回复  更多评论   

# re: 最近研究libjingle的经验总结[未登录] 2011-10-18 08:39 思琦

哦,我用的是0.5.8  回复  更多评论   

# re: 最近研究libjingle的经验总结[未登录] 2011-11-03 09:35 思琦

@思琦
那你能把你改的0.5.8的代码发给我么  回复  更多评论   

# re: 最近研究libjingle的经验总结[未登录] 2011-11-04 15:39 思琦

发错了,是0.5.7版本的代码  回复  更多评论   

# re: 最近研究libjingle的经验总结 2011-12-25 16:09 MengQiang

您好!我编译成功了libjingle + linphone,现在call端说话,gTalk端可以听到,但是gTalk端说话,call端听不到。如果是两个call端互相说话,两方都听不到,请问,这可能是什么原因?非常感谢!!  回复  更多评论   

# re: 最近研究libjingle的经验总结[未登录] 2013-05-14 12:20 zzz

您好,windows下可用GIPS VioceEngine Lite~官网说的,我现在编译出现MediaEngineFactory的Create出错,这个方法是要自己实现吗?麻烦加下我的QQ:173613191.因为我没有注册这个网站~看不到您的回复~  回复  更多评论   

# re: 最近研究libjingle的经验总结 2013-09-16 18:16 jin

您好,我调试了好久,还是报各种错误,你发一个可运行的工程给我吗?谢谢!
邮箱:jinhailang2008@gmail.com  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿(2)

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜