dialer internet 電話 TAPI 3.0
電話撥號程式”概述電話撥號程式允許從個人計算機上進行語音電話、視訊電話及會議視訊電話。
要打電話,只需有對方的電話號碼、IP 地址或域名系統 (DNS) 名稱。電話撥號程式使您可以用連線計算機的電話進行呼叫,呼叫可以從調變解調器經過網路,再經過電話交換機連線到區域網 (LAN) 或 Internet 地址。
微軟自帶一個 H323 TSP,可是不知道這玩意怎麼用
(3) Telephony Service Providers Telephony Service Providers(TSPs)負責獨立於低層協議的呼叫模型並解釋為特定協議的呼叫控制機制。TAPI3.0對TAPI 2.1 TSPs提供可靠的後向相容性,兩個
Windows Server 2003包括許多網路功能的加強,適用於新的企業網路應用.本文介紹了網路服務部分新的特性和增強功能.討論了Windows Server 2003實現的網路服務支援的改進,並簡要地介紹了部分新特性的應用場合.
TAPI3.1 和TAPI 服務提供(TSP)
先前的Windows作業系統內建了早版本的電話API,例如Windows 2000內建TAPI3.0.TAPI可以為使用者建立各種型別的電話服務應用.TAPI 3.1支援Microsoft COM併為程式設計師提供了一組COM物件
TAPI3.1同時提供了:檔案終端;可插入終端;USB電話TSP;TAPI服務的自動發現.
此外,對於H.323 還實現了豐富的呼叫控制服務:CALL Hold服務,Call Transfer服務, Call Diversion服務, Call Park 和Pickup
TAPI3.0包含有4個主要的程式碼單元:TAPI3.0 COM物件、TAPI伺服器、電話服務提供單元(TSPs)和媒體服務提供單元(MSPs)。TAPI3.0的COM物件主要有以下5個:TAPI、地址、終端、電話和電話集線器,
如何使用tapi物件 用tapi能夠比較方便地執行一個呼叫和作一個呼叫應答,它對電話的操作方便快捷,給程式設計者帶來了很大的方便。下面是執行一個呼叫和呼叫應答的大體過程。執行一個呼叫
1.建立和初始化一個tapi物件
2.用tapi物件解析在一個計算機上的可用地址
3.解析每一個地址物件所支援的地址型別
4.選擇一個地址物件
5.用address物件中的createcall方法建立一個call物件
6.選擇call物件的適當終端
7.用call物件的connect方法執行一次呼叫呼叫應答
1.建立和初始化一個tapi物件
2.用tapi物件解析在一個計算機上的可用地址
3.解析每一個地址物件所支援的地址型別
4.選擇一個地址物件
5.根據不同的媒體型別用適當的address物件來登記
6.用一個address物件登記呼叫事件控制代碼
7. tapi通過itcallnotification通知一個呼叫,並建立一個call物件
8.選擇call物件的適當終端
9.用call物件的connect方法執行呼叫
10.用call物件的answer方法執行應答
電話服務 API (TAPI) 允許您配置所有電話程式的撥號規則。如果在配置撥號之前執行支援 TAPI 的程式(例如電話撥號程式),程式通常提示要求撥號所需的最簡資訊。要完整地配置某計算機上的撥號規則,請使用“控制面板”中的“電話和調變解調器選項
概述:TAPI3.0是微軟提供的COM元件,集成了傳統電話的媒體流控制功能,是電話應用程式設計普遍採用的程式設計介面.文中介紹了TAPI3.0的基本功能和體系結構,然後從初始化、建立呼叫連線、呼叫應答以及訊息響應這幾方面詳細闡述了通過TAPI3.0實現IP電話連線和控制的原理與方法.利用微軟提供的TAPI3.0程式設計介面,開發了一個實現IP呼叫連線和控制的應用程式,在實際應用中執行穩定,取得了較好的效果.
我用C# 通過TAPI3寫了一段撥號程式,可以正常撥號,對方也可以接聽,但是卻聽不到我的聲音,我可以聽到他的。和用超級終端一樣,我覺得不應該是程式的問題,應該是我的硬體設定的問題。請教有過這種應用的朋友,你們是怎麼做的。
C#程式碼如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using TAPI3Lib;
namespace MyTAPI_CS_1
{
public partial class Form1 : Form
{
public delegate void eventHandler(TAPI3Lib.CALL_STATE cs, string str);
private TAPIClass tapiclass;
private ITAddress[] itaddress=new ITAddress[10];
private IEnumAddress ienumaddress;
private ITBasicCallControl itbasiccallctrl;
private int currentline=0;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
uint reg=0;
tapiclass = new TAPIClass();
tapiclass.Initialize();
//新增TAPI事件處理
tapiclass.ITTAPIEventNotification_Event_Event += new ITTAPIEventNotification_EventEventHandler(this.Event);
tapiclass.EventFilter = (int)(TAPI_EVENT.TE_CALLNOTIFICATION |
TAPI_EVENT.TE_DIGITEVENT |
TAPI_EVENT.TE_PHONEEVENT |
TAPI_EVENT.TE_CALLSTATE |
TAPI_EVENT.TE_GENERATEEVENT |
TAPI_EVENT.TE_GATHERDIGITS |
TAPI_EVENT.TE_REQUEST);
groupBox1.Enabled = false;
ienumaddress = tapiclass.EnumerateAddresses();
for (int i = 0; i < 10; i++)
{
ienumaddress.Next(1, out itaddress[i], ref reg);
if (itaddress[i] != null)
{
comboBox1.Items.Add(itaddress[i].AddressName);
}
else
break;
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
int reg;
currentline = comboBox1.SelectedIndex;
reg=tapiclass.RegisterCallNotifications(itaddress[currentline], true, true, TapiConstants.TAPIMEDIATYPE_AUDIO, 2);
MessageBox.Show("註冊線路的事件處理,返回值:"+reg.ToString());
groupBox1.Enabled = true;
}
//撥號
private void button1_Click(object sender, EventArgs e)
{
itbasiccallctrl = itaddress[currentline].CreateCall(textBox1.Text, TapiConstants.LINEADDRESSTYPE_PHONENUMBER, TapiConstants.TAPIMEDIATYPE_AUDIO);
itbasiccallctrl.Connect(false);
}
//掛機
private void button2_Click(object sender, EventArgs e)
{
itbasiccallctrl.Disconnect(DISCONNECT_CODE.DC_NORMAL);
}
public void eventdispose(TAPI3Lib.CALL_STATE cs, string str)
{
listBox1.Items.Add(str);
}
public void Event(TAPI3Lib.TAPI_EVENT te, object eobj)
{
string str = "";
switch (te)
{
case TAPI3Lib.TAPI_EVENT.TE_CALLSTATE:
TAPI3Lib.ITCallStateEvent itcallstateevent = (TAPI3Lib.ITCallStateEvent)eobj;
TAPI3Lib.ITCallInfo itcallinfo = itcallstateevent.Call;
switch (itcallinfo.CallState)
{
case TAPI3Lib.CALL_STATE.CS_OFFERING:
str = "ring";
Invoke(new eventHandler(eventdispose), TAPI3Lib.TAPI_EVENT.TE_CALLSTATE, str);
break;
}
break;
}
}
}
}