dialer internet 电话 TAPI 3.0

来源:互联网 发布:防范xss攻击的js 编辑:程序博客网 时间:2024/05/18 03:24
 

电话拨号程序概述电话拨号程序允许从个人计算机上进行语音电话、视频电话及会议视频电话。

要打电话,只需有对方的电话号码、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;
            }
        }
    }
}

原创粉丝点击