array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 linphone - 爱码网

官方网站

源码下载:

linphone, including:

  • oRTP
  • mediastreamer2
  • liblinphone
  • linphonec
  • linphone (gtk)

git clone git://git.linphone.org/linphone.git --recursive

架构设计概略

Linphone is an open source SIP Phone, available on mobile and desktop environments (iOS, Android, Windows Phone, GNU/Linux, MAC OSX, Windows Desktop, Windows 10) and on web browsers.

Linphone has inside a separation between the user interfaces and the core engine, allowing to create various kinds of user interface on top of the same functionalities.

    • The user interface frontends:
      • Gtk+ interface for windows, mac and GNU/Linux
      • The console interface (linphonec, linphonecsh)
      • The iPhone application built in objective C
      • The Android application running in java
      • The Windows Phone application written in C#
    • Liblinphone, the core engine: this is the library that implements all the functionalities of Linphone.
      Liblinphone is a powerful SIP VoIP video SDK that anyone can use to add audio or video call capabilities to an application. It provides a high level api to initiate, receive, terminate audio & video calls.
    • Liblinphone relies on the following software components:
      • Mediastreamer2, a powerful multimedia SDK to make audio/video streaming and processing.
      • oRTP, a simple RTP library.
      • belle-sip the SIP library.
      Liblinphone and all its dependencies are written in pure C.

 

 

 ubuntu12.04 x86下编译过程中碰到的问题linphone-3.4.0:

 

1、
linphonecore.c: In function 'video_config_read':
linphonecore.c:749:24: error: variable 'self_view' set but not used [-Werror=unused-but-set-variable]
linphonecore.c:749:15: error: variable 'display' set but not used [-Werror=unused-but-set-variable]
linphonecore.c:749:6: error: variable 'capture' set but not used [-Werror=unused-but-set-variable]
linphonecore.c: In function 'linphone_core_invite_address_with_params':
linphonecore.c:2065:6: error: variable 'err' set but not used [-Werror=unused-but-set-variable]

解决方法:
进入到源码路径下,再次编译即可:
yingc@yingc:~/work/voip/linphone/linphone-3.4.0$ sed -i "s/-Werror//g" `find . -type f`


2、
  CC     pulseaudio.lo
  CC     msv4l.lo
msv4l.c: In function 'v4l_configure':
msv4l.c:619:19: error: 'BASE_VIDIOCPRIVATE' undeclared (first use in this function)
msv4l.c:619:19: note: each undeclared identifier is reported only once for each function it appears in
make[3]: *** [msv4l.lo] 错误 1
make[3]:正在离开目录 `/home/yingc/work/voip/linphone/linphone-3.4.0/mediastreamer2/src'
make[2]: *** [all] 错误 2
make[2]:正在离开目录 `/home/yingc/work/voip/linphone/linphone-3.4.0/mediastreamer2/src'
make[1]: *** [all-recursive] 错误 1
make[1]:正在离开目录 `/home/yingc/work/voip/linphone/linphone-3.4.0/mediastreamer2'
make: *** [all] 错误 2

解决方法:
修改msv4l.c源码,加入#define BASE_VIDIOCPRIVATE 192定义

3、
checking for LIBV4L2... no
No libv4l2 found.
checking for LIBV4L1... no
No libv4l1 found.
configure: error: 
Missing libv4l2. It is highly recommended to build with
libv4l2 headers and library. Many camera will won't work or will crash
your application if libv4l2 is not installed.
If you know what you are doing, you can use --disable-libv4l to disable
this check.
解决方法:

yingc@yingc:~/work/voip/linphone/linphone-3.4.0$ sudo apt-get install -y libv4l-dev

4、 CC msv4l.lo msv4l.c:
33:28: fatal error: linux/videodev.h: No such file or directory compilation terminated. make[3]: *** [msv4l.lo] 错误 1 make[3]:正在离开目录 `/home/yingc/work/voip/linphone/linphone-3.4.0/mediastreamer2/src' make[2]: *** [all] 错误 2 make[2]:正在离开目录 `/home/yingc/work/voip/linphone/linphone-3.4.0/mediastreamer2/src' make[1]: *** [all-recursive] 错误 1 make[1]:正在离开目录 `/home/yingc/work/voip/linphone/linphone-3.4.0/mediastreamer2' make: *** [all] 错误 2 解决方法:
修改源码,将linux/videodev.h替换为<libv4l1-videodev.h>
5/home/yingc/work/voip/linphone/linphone-3.4.0 make all-recursive make[1]: 正在进入目录 `/home/yingc/work/voip/linphone/linphone-3.4.0' Making all in m4 make[2]: 正在进入目录 `/home/yingc/work/voip/linphone/linphone-3.4.0/m4' make[2]: 没有什么可以做的为 `all' make[2]:正在离开目录 `/home/yingc/work/voip/linphone/linphone-3.4.0/m4' Making all in pixmaps make[2]: 正在进入目录 `/home/yingc/work/voip/linphone/linphone-3.4.0/pixmaps' make[2]: 没有什么可以做的为 `all' make[2]:正在离开目录 `/home/yingc/work/voip/linphone/linphone-3.4.0/pixmaps' Making all in po make[2]: 正在进入目录 `/home/yingc/work/voip/linphone/linphone-3.4.0/po' make[2]: 没有什么可以做的为 `all' make[2]:正在离开目录 `/home/yingc/work/voip/linphone/linphone-3.4.0/po' Making all in oRTP make[2]: 正在进入目录 `/home/yingc/work/voip/linphone/linphone-3.4.0/oRTP' make[2]: *** 没有规则可以创建目标“all”。 停止。 make[2]:正在离开目录 `/home/yingc/work/voip/linphone/linphone-3.4.0/oRTP' make[1]: *** [all-recursive] 错误 1 make[1]:正在离开目录 `/home/yingc/work/voip/linphone/linphone-3.4.0' make: *** [all] 错误 2 解决方法:
下载对应版本的源码包拷贝到该目录即可
6make[1]:正在离开目录 `/home/yingc/work/voip/linphone/linphone-3.4.0/po' Making install in oRTP make[1]: 正在进入目录 `/home/yingc/work/voip/linphone/linphone-3.4.0/oRTP' Making install in src make[2]: 正在进入目录 `/home/yingc/work/voip/linphone/linphone-3.4.0/oRTP/src' Making install in . make[3]: 正在进入目录 `/home/yingc/work/voip/linphone/linphone-3.4.0/oRTP/src' CC stun.lo stun.c: In function 'stunSendTest': stun.c:1996:11: error: variable 'discard' set but not used [-Werror=unused-but-set-variable] stun.c: In function 'stunNatType': stun.c:2165:17: error: variable 'testIchangedAddr' set but not used [-Werror=unused-but-set-variable] cc1: all warnings being treated as errors make[3]: *** [stun.lo] 错误 1 make[3]:正在离开目录 `/home/yingc/work/voip/linphone/linphone-3.4.0/oRTP/src' make[2]: *** [install-recursive] 错误 1 make[2]:正在离开目录 `/home/yingc/work/voip/linphone/linphone-3.4.0/oRTP/src' make[1]: *** [install-recursive] 错误 1 make[1]:正在离开目录 `/home/yingc/work/voip/linphone/linphone-3.4.0/oRTP' make: *** [install-recursive] 错误 1

解决方法:
进入到对应目录,执行命令 :sed -i "s/-Werror//g" `find . -type f`

 

 参考网址:

 Linphone在Linux X86下的编译安装 

依赖库相关下载地址:

mediastreamer2

oRtp

 

aa

相关文章: