dialer internet 電話 TAPI 3.0

 

電話撥號程序概述電話撥號程序允許從個人計算機上進行語音電話、視頻電話及會議視頻電話。

要打電話,只需有對方的電話號碼、IP 地址或域名系統 (DNS) 名稱。電話撥號程序使您可以用連接計算機的電話進行呼叫,呼叫可以從調制解調器經過網絡,再經過電話交換機連接到局域網 (LAN) Internet 地址。

微軟自帶一個 H323 TSP,可是不知道這玩意怎麼用

3 Telephony Service Providers Telephony Service Providers(TSPs)負責獨立於低層協議的呼叫模型並解釋爲特定協議的呼叫控制機制。TAPI3.0TAPI 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.323IP電話和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.0COM對象主要有以下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;
            }
        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章