65.9K
CodeProject 正在变化。 阅读更多。
Home

语音和文本会议库

starIconstarIconstarIconstarIconstarIcon

5.00/5 (11投票s)

2010年2月15日

CPOL

4分钟阅读

viewsIcon

65775

downloadIcon

14930

用于创建语音和文本会议应用程序的库。

ConferenceServer

ConferenceClient

引言

这个库是我大四项目的一部分。我在网上搜索了大量关于C#语音会议的内容,但找不到任何有用的东西,于是我决定修改我在CodeProject上找到的名为“A Voice Chat Application in C#”的点对点语音聊天代码,使其成为语音会议。它还包含文本会议功能,可以帮助程序员构建会议软件。

语音会议基于客户端-服务器架构。语音会议服务器使用两个服务器:一个用于管理客户端(例如,添加和移除客户端),另一个用于处理通信。语音会议客户端也使用两个客户端:一个用于进入和退出,另一个用于通信。文本会议也使用客户端/服务器架构。文本会议服务器利用一个TCP服务器,文本会议客户端基于一个TCP客户端。

这个会议库的主要特点是它提供了会议工作的完整实现。程序员只需在代码中使用其预定义的函数和事件。

Using the Code

语音会议

VoiceConferencingServer 类在服务器端处理所有与语音聊天相关的工作。它的构造函数接受三个参数:

public VoiceConferencingServer(String Name,int HandlingPort,int CommunicationPort)
  1. 服务器名称 (String)
  2. 处理端口(此端口用于处理语音聊天服务器中客户端的进入和退出)
  3. 通信端口(所有语音通信都通过此端口进行)

VoiceConferencingServer 类包含两个与用户处理相关的事件和四个与语音会议相关的函数。

interface VoiceConferencingServer {                  
       //User Handling Events             
       event VoiceChatServer.UserAddedEventHandler ClientAdded;                 
       event VoiceChatServer.UserRemovedEventHandler ClientRemoved;
       //Methods    
       void InitializeCall(object sender);   
       void UninitializeCall(); void Mute(); 
       void Unmute(); 
       }

ClientAdded 事件 当新客户端登录语音服务器时引发。它使用 UserArgs 类作为参数。

ClientRemoved 事件 当新客户端登出语音服务器时引发。它使用 UserArgs 类作为参数。

InitializeCall 函数 接受一个参数“Form control”。此函数启动用户处理和语音通信服务器。

UninitializeCall 函数 释放服务器并终止客户端和服务器之间的所有通信。

Mute 函数 用于静音服务器语音。

Unmute 函数 用于取消静音服务器语音。

VoiceConferencingClient 类在客户端处理所有与语音会议相关的工作。它的构造函数接受四个参数:

public VoiceConferencingClient
	(String _ServerIP,String Name,int HandlingPort,int CommuncationPort)
  1. _ServerIP (服务器IP地址)
  2. Name (客户端名称)
  3. 处理端口(此端口用于在 VoiceConferencingClient 中处理登录和登出过程)
  4. 通信端口(所有语音通信都通过此端口进行)

VoiceConferencingClient 类包含四个与语音会议相关的函数。

interface VoiceConferencingClient { 
          void InitializeCall(object sender);     
          void UninitializeCall(); 
          void Mute(); 
          void Unmute(); 
          }

InitializeCall 函数 连接到服务器并启动客户端和服务器之间的语音会议。

UninitializeCall 函数 释放客户端并终止客户端和服务器之间的所有通信。

Mute 函数 用于静音客户端语音。

Unmute 函数 用于取消静音客户端语音。

文本会议

TextConferencingServer 类在服务器端处理所有与文本会议相关的工作。它的构造函数接受两个参数:

public TextConferencingServer(int Port,String Name)
  1. Port (用于处理会议工作)
  2. Name (服务器名称)

TextConferencingServer 类包含三个事件和两个函数。

interface ITextConferencingServer{  
       //Events                  
       event TextConferencingServer.ClientAddedEventHandler ClientAdded;           
       event TextConferencingServer.ClientRemovedEventHandler ClientRemoved;
       event TextConferencingServer.MessageEventHandler MessageRecieved;
       //Methods      
       void SendMessage(string mess, string reciever);
       void BroadcastMessage(byte[] message);
       }

ClientAdded 事件 当新客户端登录语音服务器时引发。它使用 UserArgs 类作为参数。

ClientRemoved 事件 当新客户端登出语音服务器时引发。它使用 UserArgs 类作为参数。

MessageRecieved 事件 当服务器收到消息时引发。它使用 MessageArgs 类作为参数。

SendMessage 函数 接受两个参数:您要发送的消息,以及您要发送到的客户端名称。

BroadcastMessage 函数 接受一个参数:您要广播给所有连接用户消息。

TextConferencingClient 类处理客户端所有与文本会议相关的工作。它的构造函数接受两个参数:

public TextConferencingClient(String ServIP,int Port, String Name)
  1. ServIP (服务器IP地址)
  2. Port (用于处理会议工作)
  3. Name (客户端名称,应唯一)

TextConferencingClient 类包含三个事件和一个函数。

interface ITextConferencingClient{ 
          //Events 
          event TextConferencingClient.MessageEventHandler MessageRecieved; 
          event TextConferencingClient.UserAddedEventHandler UserAdded;
          event TextConferencingClient.UserRemovedEventHandler UserRemoved;
          //Methods
          void sendMessage(string message, string Reciever);
          }

ClientAdded 事件 当新客户端登录语音服务器时引发。它使用 UserArgs 类作为参数。

ClientRemoved 事件 当新客户端登出语音服务器时引发。它使用 UserArgs 类作为参数。

MessageRecieved 事件 当服务器收到消息时引发。它使用 MessageArgs 类作为参数。

SendMessage 函数 接受两个参数:您要发送的消息,以及您要发送到的客户端名称。

先决条件

您需要在PC上安装DirectX,因为此库使用DirectX捕获声音,并且您还需要将DirectX的DLL添加到您的项目中。您可以从Microsoft网站下载。

参考文献

  1. C# 中的语音聊天应用程序
  2. 使用异步UDP套接字的聊天应用程序

未来工作

我正在从事网络摄像头会议和远程桌面工作,希望很快就能在CodeProject上发布。

历史

  • 2010年2月15日:初次发布
© . All rights reserved.