### 求VOIP开发的技术资料、例子代码,高分相酬 !!! RT!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 3、方案分析 在H.245协议中,每个规程被分为协议用户(Protocol User)和协议实体(Protocol Entity)两部分,协议用户是对规程的流转控制,协议实体是规程的具体功能实现。要实现H.245也就是要实现各规程的协议用户和协议实体。在H.245中,每个具体的规程被叫做信令实体(Signalling Entity),如主从决定的全称为Master Slave Determination Signlling Entity,所以建议中给出了它们的简称,如主从决定的简称为MSDSE,能力交换为CESE … …,维护环回为MLSE。下面的内容中涉及到具体规程时我们都使用其简称。分析H.245协议后认为,要实现H.245协议重点应考虑以下问题:● H.245框架的设计● H.245与系统用户的通信● H.245与多路复用层的通信● H.245协议用户的设计● H.245协议实体的设计。 在H.245中协议用户和协议实体间交换的信息称为原语(Primitives),协议实体和远端协议实体间交换的信息(端对端信令交换)称为消息(Messages)。 在H.245中,协议用户负责从系统用户处接收命令,启动相应的规程;同时,接收来自协议实体的原语,并进行后续处理。所以协议用户应实现的功能有:规程的启动、原语处理、原语发送以及与系统用户的通信。也就是说H.245与系统用户的通信在协议用户模块来实现。 协议实体是对各规程的具体功能实现,它接收来自协议用户的原语并按照该规程进行处理;接收来自复用层的对端发送的消息,也作相应的处理;在处理消息的过程中,启动定时器,对没有按指定时间返回的消息进行超时处理。所以协议实体应实现的功能有原语处理、消息处理、原语发送、消息发送、定时器超时处理以及各规程内部的其它功能。H.245与多路复用层的通信也就是这里所说的消息处理和消息发送。由于消息处理、原语处理、定时器超时处理是并行的,所以协议实体模块应采用多线程来实现。 在消息和原语处理中,为了防止丢包,并能保证所有处理异步进行,采用队列来缓存消息和原语,当前处理的消息或原语可从队列中逐条提取。 总上所述,实现H.245也就是开发协议用户模块和协议实体模块。其中协议用户模块负责与系统用户通信,来接收系统命令;协议实体模块负责与多路复用层通信,完成端对端的信令交换。 4、协议的实现 在方案分析中,我们把H.245的实现归纳为开发协议用户模块和协议实体模块。因此,我们把设计的重点也放在这里,整个设计中未考虑H.245与多路复用层间通信的简单重发协议(SRP),而是用TCP/IP来模拟代替。下面我们分别叙述采用C++语言来设计协议用户模块和协议实体模块。4.1 协议用户的实现: 协议用户模块从功能上可分为两大部分:启动规程和处理原语。启动规程指H.245接收到系统用户的命令开始启动某个规程;处理原语指协议用户处理从协议实体传来的原语。因为每个规程的功能是相对独立的,在设计时为每个规程创建一个用户模块类,H.245整体上有一个用户模块的调度类,该类采用多继承方式继承各规程的用户模块类。调度类中启动两个线程,分别用来接收系统用户的命令和来自协议实体的原语,并调用所涉及的规程类的相应函数进行处理。实现如下://以主从决定规程为例,说明用户模块中各规程类的设计class H245MSDSE_User{ … …public:void P_MSD_Process(p_info * buffer,LPVOID lParam);//原语处理void H245_MSD_Start();//主从决定规程的启动… …}//用户模块调度类的设计class H245Process_User : virtual public H245MSDSE_User,public H245RMESE_User,… …public H245MLSE_User,{ private://命令收发队列H245_Queue Q_Command_Recv; //命令接收队列,存储系统用户发送来的命令H245_Queue Q_Command_Send; //命令发送队列,存储向系统用户发送的命令//原语收发队列在协议实体中实现private:void Command_Process();//处理系统用户发送的命令void Primitive_Process();//处理协议实体发送的消息//为系统用户预留的接口,用于系统向H245收发命令public:bool H245_Command_Retrieve();//查询H245中有无需处理的命令unsigned short H245_Get_Command(char * buf);//获取一条命令bool H245_Send_Command(unsigned short current_command,char *buf);//向H245发送命令,带参数… … }以上工作完成后可将协议用户封装成动态链接库(DLL),并留有下面的接口供系统用户层使用:bool H245_Command_Retrieve();//查询H245中有无需处理的命令unsigned short H245_Get_Command(char * buf);//获取一条命令bool H245_Send_Command(unsigned short current_command,char *buf);注:H245_Queue、p_info的实现在后面介绍。 要更详细的资料写下你的EMAI 我发给你(呵呵,以前做过一点点) http://search.csdn.net/Expert/topic/824/824048.xml?temp=2.444094E-02 VOIP专题角教程:http://www.cci.he.cninfo.net/hbtxw/hbtx/itjishu/xxtd/VOIP.htmVOIP专题http://www.star86.com/other.htmlhttp://www.chinaitlab.com/www/special/voip.asp gdy119(中国制造), 我的 MAIL 是: [email protected]谢谢!!! TO:ALong_Yue() 我只有更详细的开发文档,具体的代码真的不方便给你,开发文档要吗? 开发文档也好,真是太感谢了。主要是现在公司要做一些技术准备,我只是找一些参考资料;因为原来没有做过VOIP开发,所以觉得无从下手。 谢谢:) TO:ALong_Yue() 发了一些很浅显的东东,具体的开发很复杂,不过希望对你有帮助 gdy119(中国制造) 收到你的邮件,谢谢:) 如何遍历桌面上打开ie的窗口 单文档 自动调整客户区大小 try catch(...),为什么抓不到异常啊?? 那里有性能比较好的服务器端程序可以拜读的? 【急救】写注册表问题,字符串参数以0开头时…… 哪位高手用过Gdiplus 的Bitmap::Bitmap(IDirectDrawSurface7) ?为什么我的语句会实现不了? 有关数据表显示速度慢的问题? 如何得到一个窗口的句柄? win7 64位拖动文件到窗口 怎样在屏幕上显示文本?请大虾指点 一个关于交换网络下的sniffer的问题 请教高手,在CListCtrl上创建自画位图...
在H.245协议中,每个规程被分为协议用户(Protocol User)和协议实体(Protocol Entity)两部分,协议用户是对规程的流转控制,协议实体是规程的具体功能实现。要实现H.245也就是要实现各规程的协议用户和协议实体。在H.245中,每个具体的规程被叫做信令实体(Signalling Entity),如主从决定的全称为Master Slave Determination Signlling Entity,所以建议中给出了它们的简称,如主从决定的简称为MSDSE,能力交换为CESE … …,维护环回为MLSE。下面的内容中涉及到具体规程时我们都使用其简称。
分析H.245协议后认为,要实现H.245协议重点应考虑以下问题:
● H.245框架的设计
● H.245与系统用户的通信
● H.245与多路复用层的通信
● H.245协议用户的设计
● H.245协议实体的设计。
在H.245中协议用户和协议实体间交换的信息称为原语(Primitives),协议实体和远端协议实体间交换的信息(端对端信令交换)称为消息(Messages)。
在H.245中,协议用户负责从系统用户处接收命令,启动相应的规程;同时,接收来自协议实体的原语,并进行后续处理。所以协议用户应实现的功能有:规程的启动、原语处理、原语发送以及与系统用户的通信。也就是说H.245与系统用户的通信在协议用户模块来实现。
协议实体是对各规程的具体功能实现,它接收来自协议用户的原语并按照该规程进行处理;接收来自复用层的对端发送的消息,也作相应的处理;在处理消息的过程中,启动定时器,对没有按指定时间返回的消息进行超时处理。所以协议实体应实现的功能有原语处理、消息处理、原语发送、消息发送、定时器超时处理以及各规程内部的其它功能。H.245与多路复用层的通信也就是这里所说的消息处理和消息发送。由于消息处理、原语处理、定时器超时处理是并行的,所以协议实体模块应采用多线程来实现。
在消息和原语处理中,为了防止丢包,并能保证所有处理异步进行,采用队列来缓存消息和原语,当前处理的消息或原语可从队列中逐条提取。
总上所述,实现H.245也就是开发协议用户模块和协议实体模块。其中协议用户模块负责与系统用户通信,来接收系统命令;协议实体模块负责与多路复用层通信,完成端对端的信令交换。
在方案分析中,我们把H.245的实现归纳为开发协议用户模块和协议实体模块。因此,我们把设计的重点也放在这里,整个设计中未考虑H.245与多路复用层间通信的简单重发协议(SRP),而是用TCP/IP来模拟代替。下面我们分别叙述采用C++语言来设计协议用户模块和协议实体模块。
4.1 协议用户的实现:
协议用户模块从功能上可分为两大部分:启动规程和处理原语。启动规程指H.245接收到系统用户的命令开始启动某个规程;处理原语指协议用户处理从协议实体传来的原语。因为每个规程的功能是相对独立的,在设计时为每个规程创建一个用户模块类,H.245整体上有一个用户模块的调度类,该类采用多继承方式继承各规程的用户模块类。调度类中启动两个线程,分别用来接收系统用户的命令和来自协议实体的原语,并调用所涉及的规程类的相应函数进行处理。实现如下:
//以主从决定规程为例,说明用户模块中各规程类的设计
class H245MSDSE_User
{ … …
public:
void P_MSD_Process(p_info * buffer,LPVOID lParam);//原语处理
void H245_MSD_Start();//主从决定规程的启动
… …
}//用户模块调度类的设计
class H245Process_User : virtual public H245MSDSE_User,
public H245RMESE_User,
… …
public H245MLSE_User,
{
private:
//命令收发队列
H245_Queue Q_Command_Recv; //命令接收队列,存储系统用户发送来的命令
H245_Queue Q_Command_Send; //命令发送队列,存储向系统用户发送的命令
//原语收发队列在协议实体中实现
private:
void Command_Process();//处理系统用户发送的命令
void Primitive_Process();//处理协议实体发送的消息//为系统用户预留的接口,用于系统向H245收发命令
public:
bool H245_Command_Retrieve();//查询H245中有无需处理的命令
unsigned short H245_Get_Command(char * buf);//获取一条命令
bool H245_Send_Command(unsigned short current_command,char *buf);//向
H245发送命令,带参数
… …
}以上工作完成后可将协议用户封装成动态链接库(DLL),并留有下面的接口供
系统用户层使用:
bool H245_Command_Retrieve();//查询H245中有无需处理的命令
unsigned short H245_Get_Command(char * buf);//获取一条命令
bool H245_Send_Command(unsigned short current_command,char *buf);注:H245_Queue、p_info的实现在后面介绍。
http://www.cci.he.cninfo.net/hbtxw/hbtx/itjishu/xxtd/VOIP.htmVOIP专题
http://www.star86.com/other.htmlhttp://www.chinaitlab.com/www/special/voip.asp
谢谢!!!
ALong_Yue()
我只有更详细的开发文档,具体的代码真的不方便给你,开发文档要吗?
主要是现在公司要做一些技术准备,我只是找一些参考资料;因为原来没有做过VOIP开发,所以觉得无从下手。 谢谢:)
ALong_Yue()
发了一些很浅显的东东,具体的开发很复杂,不过希望对你有帮助
收到你的邮件,谢谢:)