在毕业设计项目中,需要实现一个语音会议功能。尽管在网上搜索了很多关于C#中语音会议的资料,但并没有找到有用的信息。因此,决定修改在CodeProject上找到的一个名为“A Voice Chat Application in C#”的点对点语音聊天代码,将其改造成语音会议。此外,它还包含了文本会议功能,这有助于程序员构建会议软件。
语音会议基于客户端服务器架构。语音会议服务器使用两个服务器,一个用于管理客户端(例如添加和移除客户端),另一个用于处理通信。语音会议客户端也使用两个客户端,一个用于登录和退出,另一个用于通信。文本会议同样使用客户端/服务器架构。文本会议服务器使用一个TCP服务器,而文本会议客户端基于TCP客户端。
这个会议库的主要特点是它提供了会议工作的完整实现。程序员只需要在他们的代码中使用其预定义的方法和事件。
VoiceConferencingServer类处理服务器端的所有语音聊天工作。它的构造函数接受三个参数:
public VoiceConferencingServer(String Name, int HandlingPort, int CommunicationPort)
服务器名称(String),处理端口(这个端口用于处理语音聊天服务器中客户端的登录和退出),通信端口(所有语音通信都通过这个端口进行)。
VoiceConferencingServer类包含两个与用户处理相关的事件和四个与语音会议相关的方法:
interface VoiceConferencingServer {
// 用户处理事件
event VoiceChatServer.UserAddedEventHandler ClientAdded;
event VoiceChatServer.UserRemovedEventHandler ClientRemoved;
// 方法
void InitializeCall(object sender);
void UninitializeCall();
void Mute();
void Unmute();
}
ClientAdded事件在新客户端登录到语音服务器时触发。它使用UserArgs类作为参数。ClientRemoved事件在新客户端退出语音服务器时触发。它使用UserArgs类作为参数。InitializeCall方法接受一个参数“表单控件”。此方法启动用户处理和语音通信服务器。UninitializeCall方法处理服务器并终止客户端和服务器之间的所有通信。Mute方法用于静音服务器声音。Unmute方法用于取消静音服务器声音。
VoiceConferencingClient类处理客户端的所有语音会议工作。它的构造函数接受四个参数:
public VoiceConferencingClient(String _ServerIP, String Name, int HandlingPort, int CommunicationPort)
服务器IP地址(_ServerIP),客户端名称(Name),处理端口(这个端口用于处理登录和退出过程),通信端口(所有语音通信都通过这个端口进行)。
VoiceConferencingClient类包含四个与语音会议相关的方法:
interface VoiceConferencingClient {
void InitializeCall(object sender);
void UninitializeCall();
void Mute();
void Unmute();
}
InitializeCall方法连接到服务器并开始客户端和服务器之间的语音会议。UninitializeCall方法处理客户端并终止客户端和服务器之间的所有通信。Mute方法用于静音客户端声音。Unmute方法用于取消静音客户端声音。
TextConferencingServer类处理服务器端的所有文本会议工作。它的构造函数接受两个参数:
public TextConferencingServer(int Port, String Name)
端口(用于处理会议工作),服务器名称(Name)。
TextConferencingServer类包含三个事件和两个方法:
interface ITextConferencingServer{
// 事件
event TextConferencingServer.ClientAddedEventHandler ClientAdded;
event TextConferencingServer.ClientRemovedEventHandler ClientRemoved;
event TextConferencingServer.MessageEventHandler MessageRecieved;
// 方法
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)
服务器IP地址(ServIP),端口(用于处理会议工作),客户端名称(Name,应该是唯一的)。
TextConferencingClient类包含三个事件和一个方法:
interface ITextConferencingClient{
// 事件
event TextConferencingClient.MessageEventHandler MessageRecieved;
event TextConferencingClient.UserAddedEventHandler UserAdded;
event TextConferencingClient.UserRemovedEventHandler UserRemoved;
// 方法
void sendMessage(string message, string Reciever);
}
ClientAdded事件在新客户端登录到语音服务器时触发。它使用UserArgs类作为参数。ClientRemoved事件在新客户端退出语音服务器时触发。它使用UserArgs类作为参数。MessageRecieved事件在服务器接收到消息时触发。它使用MessageArgs类作为参数。SendMessage方法接受两个参数,一个是想要发送的消息,第二个是想要发送的客户端名称。
需要在电脑上安装DirectX,因为这个库使用DirectX来捕获声音,还需要在项目中添加DirectX的DLL。可以从微软的网站上下载。