QuteCom (前身是WengoPhone) 是一个支持多平台的VoIP客户端程序,图形窗口是基于 Qt 开发的。
PhoneCall是封装了一个电话的状态和行为的模型类。是一个电话的核心 PhoneCall的核心功能有两个,一个是记录电话状态,并提供一个观察者提供状态变化时的信号stateChangedEvent(用此实现观察者模式)。 另一个是通过调用IPhoneLine的接口实现accept(),resume(),hold(),close()四个主动的动作。 一、主动的动作 先看四个动作的实现,为方便起见
两年前曾经编译过 wengophone 开源的softphone项目,在反复的失败与尝试中总算成功。当时是在xp下用的vs2005,boost-1-34, qt-4.1,cmake2.4 。 现如今wengophone已经变换名称为qutecom,boost也到了最新的1.41, qt到了最新版4.6。同时由于公司要上一套系统需要配合softphone一起推广,所以又有了这次的反复尝试编译的经历。
官网: 关于如何编译: http://www.qutecom.org/wiki/HowToBuildFromSource#CMake vs 2008版本 ///推荐博客 lanzheng_1113的专栏 QuteCom手记(21) QuteCom手记:sip简介&SIP:INVITE消息 参考《sip中文参考手册.pdf》已经放在在csdn的资源里 该协议的实现在exosip和osip2两个工
time: 2010-12-11 9:48:31 <-------主题:oRTP文档地址-------> http://www.antisip.com/doc/ortp/ time: 2010-12-11 9:54:27 <-------主题:PortAudio输入输出回调-------> ph_pa_ocallback填充输出缓冲区的回调(SPK) ph_pa_icallback填充输入缓冲区的
一、LOGGER 二、Thread 三、Event 四、Date 五、Time .h的代码 pragma once #include "cowutil/thread/thread.h" #include "cowutil/include/event.h" #include "string" using std::string; //cowutil thread class
time: 2010-12-14 9:43:18 <-------主题:三个声音驱动-------> /wifo/phapi/phmedia-portaudio.c -- ph_pa_driver /wifo/phapi/phmedia-audio-file.c--ph_phadfile_audio_driver /wifo/phapi/phmedia-winmm.c -- ph_win
@1、exosip初始化 qutecom/wifo/phapi/phapi.c fun:owplInit() Line:291 eXosip_set_user_agent(ua);设置SIP包头域User-Agent="qutecom/rev-335d495adbc1-trunk",即SIP客户端名称。 return_code = eXosip_init(0,0,udpPort,tcpPort
@1、电话状态变化和电话事件传递 先看一下phapi的电话状态变化图,该图在phapi-old.h中可以找到 /** * @defgroup phAPI Phone API * @{ * 格式错误无法正常显示,见PHAPI-OLD.H*/ 状态名字都很简单,不在赘述。在PHAPI中,当状态发生变化时都会触发对应的事件。 事件由owplFireCallEvent一系列系列函数发布,函数
参考《sip中文参考手册.pdf》已经放在在csdn的资源里 该协议的实现在exosip和osip2两个工程里。 phapi调用了exosip的接口 SIP:会话控制协议 1.1简介 作用: 1、根据SIP帐号定位用户(IP)。 2、商讨会话(语音通话,视频连接之类)的参数(语音编码之类)。 3、建立、终止回话。 4、其他没有在qutecom中用到的功能不记。 在QuteCom项
Event类的定义在qutecom\libs\owutil\util\event.h /** * Connects a slot to this signal (=event). * * Provides unicity when connecting a slot to a signal. * Two identical slots cannot be connecte
phapi发送和接收音频数据的流程简介。 通过ortp库(完整的源代码在ortp工程中)实现。 oRTP协议将在另外一篇中介绍,这里只要知道它是用来发送和接收媒体流(音频和视频)的协议。 本篇只记录使用ortp发送、接收音频数据的流程。 @1 phapi使用ortp的简单流程: ----------------------------------------------- $1、初始化库
对于拨号INVITE的响应,常用有以下几种 1、OK(RINGING). 2、用户忙。 3、用户不存在。 exosip获取sip事件的函数: qutecom-2-2-ad315899a4d2\wifo\eXosip\src\eXosip2.h eXosip_event_t *eXosip_event_wait(int tv_s, int tv_ms); 所有的事件都在这里接收。 phap
qutecom 一个开源的voip客户端 asterisk 开源的ippbx rc4加密算法简单,快速,据说是比DES算法快10倍。sip 信令本身就属于明文方式传输的,之所以要加密,是为了防止运营商的干扰,使用一个弱的加密算法,是要能防止串改就满足要求了。 rc4 算法可以google原来,用密钥来生成一个256长度的box, 然后box与明文异或操作得到密文,密文再次异或就恢复明文。 下面实现
Thread以组合方式扩展了boost::thread 事件队列的实现和事件传递部分的代码很巧妙。 扩展了以下功能: 1、线程消息队列 2、线程删除自身 3、sleep 1、线程消息队列的实现方式: void Thread::runEvents() { RecursiveMutex::ScopedLock scopedLock(_threadMutex); while (true) { w
我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我最初的想法如下: 我在服务器上制作了一个中央服务器插座,所有应用程序都可以连接到该插座。此ServerSocket跟踪已连接的套接字(客户端),并将新连接的客户端的IP和端口提供给所有其他客户端。每个客户端都会创建一个新的ServerSocket,所有客户端都可以连接到它。 换句话说:每个客户端都有一个Se
URI 方法 URI() string 返回当前客户端使用的服务器地址。 SetURI 方法 SetURI(uri string) 设置当前客户端使用的服务器地址。如果你想要设置多个服务器地址,请使用 SetURIList 方法代替该方法。 URIList 方法 URIList() []string 返回当前客户端可使用的服务器地址列表。 SetURIList 方法 SetURIList(uriL
客户端事件通过 SetEvent 方法进行设置。 客户端事件有两个,它们分别定义为: type onErrorEvent interface { OnError(name string, err error) } type onFailswitchEvent interface { OnFailswitch(Client) } 因为 go 语言不需要显式实现接口的特点,所以这两
创建客户端有两种方式,一种是直接使用特化的构造器函数,另一种是使用工厂构造器函数。 第一种方式返回的是具体的客户端结构体指针对象,第二种方式返回的是客户端接口对象。 使用特化的构造器函数创建客户端 特化的构造器函数有下面几个: func NewHTTPClient(uri ...string) (client *HTTPClient) func NewTCPClient(uri ...string
客户端下载地址: windows 32位安装包 windows 64位安裝包 mac 安装包 Android App iOS App
问题 你想使用网络上提供的服务。 解决方案 创建一个基本的 TCP 客户机。 在 Node.js 中 net = require 'net' domain = 'localhost' port = 9001 connection = net.createConnection port, domain connection.on 'connect', () -> console.log
客户端调用服务端 服务端的proto文件copy到客户端 获取grpc客户端 //sample 为服务名称 var client = await provider.FindGrpcClient<RpcTest.RpcTestClient>("sample"); 调用服务方法 var result = await client.SayHelloAsync(new HelloRequest() {
Disque 在源码中附带了命令行客户端程序 disque , 通过这个程序可以以交互的形式向 Disque 发送命令: $ ./disque 127.0.0.1:7711> PING PONG 另外你也可以使用以下编程语言的客户端来操作 Disque : Ruby 客户端 https://rubygems.org/gems/disque Java 客户端 https://github.com/x