電話撥號程序”概述電話撥號程序允許從個人計算機上進行語音電話、視頻電話及會議視頻電話。
要打電話,只需有對方的電話號碼、IP 地址或域名系統 (DNS) 名稱。電話撥號程序使您可以用連接計算機的電話進行呼叫,呼叫可以從調制解調器經過網絡,再經過電話交換機連接到局域網 (LAN) 或 Internet 地址。
微軟自帶一個 H323 TSP,可是不知道這玩意怎麼用
(3) Telephony Service Providers Telephony Service Providers(TSPs)負責獨立於低層協議的呼叫模型並解釋爲特定協議的呼叫控制機制。TAPI3.0對TAPI 2.1 TSPs提供可靠的後向兼容性,兩個IP TSPs缺省地與微軟的TAPI3.0相匹配:一個是H.323 TSPs,另一個是IP廣播會議的TSP。
Windows Server 2003包括許多網絡功能的加強,適用於新的企業網絡應用.本文介紹了網絡服務部分新的特性和增強功能.討論了Windows Server 2003實現的網絡服務支持的改進,並簡要地介紹了部分新特性的應用場合.
TAPI3.1 和TAPI 服務提供(TSP)
先前的Windows操作系統內置了早版本的電話API,例如Windows 2000內置TAPI3.0.TAPI可以爲用戶創建各種類型的電話服務應用.TAPI 3.1支持Microsoft COM併爲程序員提供了一組COM對象.這使得使用任何COM兼容編程應用和腳本語言都可以寫出電話應用.同樣包含在Windows Server 2003中的TAPI服務提供基於H.323的IP電話和TCP/IP網絡上的IP組播的音頻和視頻會議.這在早版本的Windows TSPs 提供的功能中是沒有的.H.323 TSP和媒體服務提供(MSP)提供對H.323 版本2功能的支持.
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;
}
}
}
}