法律状态公告日
法律状态信息
法律状态
2019-01-08
未缴年费专利权终止 IPC(主分类):H04L29/06 授权公告日:20121010 终止日期:20180121 申请日:20100121
专利权的终止
2012-10-10
授权
授权
2010-10-13
实质审查的生效 IPC(主分类):H04L29/06 申请日:20100121
实质审查的生效
2010-08-25
公开
公开
技术领域:
属于多媒体实时通信领域
背景技术:
远程医疗是一种新的医学模式,它是现代医学技术、计算机网络技术和现代通讯技术相结合的产物。所谓远程医疗,一般是指通过网络技术在相隔很远的求医者和医生之间进行双向信息传送,完成求医者的信息搜索、诊断以及医疗方案的实施等过程。
远程医疗最大的优点是资源共享的高效性、对紧急情况能紧急处理的时效性、节省医院和患者开支的经济性。如果能够通过宽带网络或者电话线路等提供远程医疗,不仅能够为病人的治疗提供了时间保障、减少病人费用开支,还能提高医生和医院的知名度。
网络多媒体技术是实现远程医疗、网络会议、交互式教学、在线游戏等大规模网络应用的核心技术,而高速互联网是实现这些应用的基础平台。多媒体数据传输与播放技术是计算机技术、网络通信技术、多媒体技术等多学科、多领域融合交叉所产生的网络应用技术,广泛用于多媒体新闻发布、在线直播、网络广告、电子商务、远程教育和远程医疗等领域。
远程医疗中的网络通信技术是发展比较快,也比较复杂的技术。早期的远程医疗,就是因为通信技术没有能够得到快速的发展而影响了远程医疗技术的发展。如今,互联网技术得到了飞速的发展,特别是IPv6网络的不断普及,为远程医疗提供了发展的平台。
在远程医疗的实时信息交互中,主要涉及的技术有:会话信令的传输,音视频实时通信,即时短消息发送,病历文件传输和实时医疗数据(电子白板和医疗曲线)传输。其中,会话信令使用SIP协议实现,音视频通信使用RTP/RTCP协议传输,即时短消息携带于SIP信令的MESSAGE消息中进行发送,病历文件传输和实时医疗数据是用自己设计的数据格式进行打包发送。
用于会话信令传输的SIP协议是其中重要的技术。SIP(Session InitiationProtocol)协议是2001年推出的IETF标准(RFC3261),用于IP数据网络上建立、改变和结束多媒体会话。随着SIP的标准的扩展,可以实现多种业务,如IP电话、多媒体会议、远程白板、即时消息等,并可以简化对IP Sec VPN的连接。而且,SIP还可以方便地将多媒体服务与其他类型的服务组合在一起,如目录信息、Web浏览、定位和列席服务、寻找和跟踪等。由于SIP是应用层协议,它是相对独立的,IP网络上任何类型的参与者都可以被SIP连接起来。例如,SIP可以提供固定和移动网络之间的无缝服务功能,这是实现固定与移动业务融合的关键要素,而且,这种功能随着3G移动网络在世界各地的部署而变得越来越重要。
SIP已被公认是下一代网络的核心控制协议,其功能在得到不断扩展,在SIP基本标准文档RFC3261的基础上,IETF推出了许多SIP扩展标准,例如RFC3262(规定临时响应的可靠性)、RFC3263(确定了PROXY的定位规则)、RFC3264(提出了提议和应答模型)、RFC3265(提出事件通知规则)以及RFC3248(提出即时消息规则)等。
因为SIP协议具有实现简单、兼容性好和扩展性强等特点,所以,利用SIP协议进行远程医疗系统开发具有很大的优势,即可以与其他用SIP开发的软件系统相兼容,又可以保证系统以后的升级和功能扩展的便利。
基于上述考虑,本发明提出了一种新型远程医疗实时信息交换产品,该产品是一种基于IPv6网络和SIP协议开发的医疗软件终端,为了满足目前广泛流行的IPv4网络应用,该产品同时实现了IPv4网络下的功能应用。该产品的设计思想是通过SIP协议进行会话的协商、建立、修改和终止,利用RTP/RTCP等技术进行多媒体实时信息的交互。
发明内容:
本发明是为了给相距很远的异地医护人员或者医生和医生之间提供一个实时就诊的医疗数据交互平台,不仅给处于偏远的地区提供高质量的医疗护理,更是为生命垂危的患者节省了医治时间,提高了医治效率。本发明可以在IPv6高速互联网中提供实时的远程医疗数据的交互,其中的医疗数据包括实时音视频数据、医疗参数数据(体温、心跳、脉搏、血压等)、实时短消息和文件数据。
本发明能满足IPv4以及IPv6网络中的远程医疗实时通信,具有实现简单、兼容性好以及易扩展的优点。
所述方法是在各客户端和代理服务器之间依次按以下步骤实现的:步骤(1)客户端初始化
在客户端设立以下模块:会话初始化协议SIP信令处理模块、音视频传输模块、即时短消息传输模块、文件传输模块、电子白板传输模块和医疗曲线传输模块,其中:
会话初始化协议SIP信令处理模块,设有下列SIP消息:注册成功消息、注册失败消息、200OK应答消息、ACK确认消息、INVITE音频呼入消息、RE_INVITE视频呼入消息、EXOSIP_MESSAGE_NEW消息,其中它包括即时短消息、文件发送消息、电子白板消息和医疗曲线消息,为了区别文件发送消息、电子白板消息和医疗曲线消息,将MESSAGE消息体中的文本内容格式定义为“消息类型/消息实体”形式,“/”前面的消息类型用来标识消息类型,其中即时短消息用“MESSAGE”标识,文件发送请求消息用“FILESEND”标识,文件发送同意接收回复用“FLSD_BACK”标识,电子白板请求消息用“WHITEBOARD”,电子白板同意接收回复用“WHBD_BACK”标识,医疗曲线用“MEDICALCURVE”标识,医疗曲线同意接收回复用“MEDCUR_BACK”标识,在标识为“MESSAGE”消息时,“/”后面的消息实体为短消息内容,在标识为“FILESEND”、“WHITEBOARD”、或“MEDICALCURVE”时“/”后面的消息实体填写本机IP地址,还有会话结束消息EXOSIP_CALL_CLOSED,所有的信令传输使用端口5070,
音视频传输模块,分为编码发送部分和接收解码部分,其中:
编码发送部分,把通过麦克风或摄像头采集到的原始音视频数据发往接收方,其中,原始音频数据经过G.711、G.723或G.729协议编码以后打包成RTP包发送,原始视频数据经过H.263或者H.264协议以后打包成RTP包发送,
接收解码部分,把接收的RTP包解码后,送往音频播放器,音视频通信所使用端口依次为15004和15005端口,
即时短消息传输模块,分为即时短消息发送部分和即时短消息接收部分,其中:
即时短消息发送部分,把输入设备输入的文字封装到所述MESSAGE消息中发送,
即时短消息接收部分,从接收到的所述MESSAGE消息中解析消息体得到即时短消息,该即时短消息使用所述SIP信令的端口5070,
文件传输模块,分为文件发送部分和文件接收部分,其中:
文件发送部分,在确定了所要发送文件的文件路径后,把文件数据分为文件头信息和文件内容信息,分两次发送,
文件接收部分,通过文件传输信道分别接收文件头信息和文件内容信息,使用端口8023,
电子白板传输模块,分为电子白板信息发送部分和电子白板信息接收部分,其中:
电子白板信息发送部分,输入为鼠标位置或按键信号输出为该电子白板上的图像或文字,然后把所述图像或者文字打包成自定义的数据结构后发送,此结构体用来c++语言中的struct结构体类型来描述,内容包括曲线类型和点位置坐标信息,
电子白板信息接收部分,把接收到的数据包解压后,再在电子白板上以图标或文字数据形式显示,电子白板通信使用端口为5557,
医疗曲线传输模块,分为医疗曲线发送部分和医疗曲线接收部分,其中:
医疗曲线发送部分,把采集到的医疗数据按自定义的数据结构打包后,用曲线形式在本地显示,同时把所述医疗数据发送出去,此结构体用来c++语言中的struct结构体类型来描述,内容包括画笔属性和点位置坐标信息,
医疗曲线接收部分,把接收到的医疗数据解包后,在医疗曲线窗口显示,传输使用的端口为5559,
客户端还设立了下述SIP信令控制线程、音频采集线程、音频编码发送线程、视频采集线程、视频编码发送线程、音频接收解码线程、音频播放线程、视频接收解码线程、视频播放线程、医疗曲线发送线程、医疗曲线接收线程、电子白板发送线程、电子白板接收线程、文件发送线程以及文件接收线程,步骤(2)客户端依次按以下步骤实现远程医疗实时信息的交互传输:
步骤(2.1)客户端向所述代理服务器注册:
步骤(2.1.1)客户端向所述代理服务器发送请求注册消息REGESTER,
步骤(2.1.2)客户端收到所述代理服务器发出的成功应答消息200OK,
步骤(2.2)当客户端通过所述代理服务器实现音视频模块进行通信时,要从下述主动发起模式或被动接收模式中任选一种通信模式,
在音频条件下的主动发起通信模式按以下步骤进行:
首先,输入对方客户端的SIP地址标识,按下拨号按钮,发起通话请求,发出INVITE请求消息,
其次,当先后依次收到对方的180临时应答消息和200OK最终应答消息时,发送确认消息ACK,同时启动所述音频接收解码线程、音频编码发送线程、音频播放线程和音频采集线程,
在音频条件下的被动接收通信模式按以下步骤进行:
第一步,创建一个监听线程,监听外来的SIP通信请求指令,
第二步,当监听到对方客户端发出的所述INVITE请求时,本地振铃提示客户端有呼叫进入,同时,回复180临时应答消息,
第三步,当客户端接受请求时,向所述对方客户端发送200OK应答消息,直到对方发出确认消息ACK为止,
第四步,当收到对方客户端确认消息ACK后,同时启动所述音频接收解码线程、音频编码发送线程、音频播放线程和音频采集线程,
在视频条件下,主动发起通信模式按以下步骤进行:
首先,输入对方SIP地址标识,再按下拨号按钮,发出RE_INVITE请求消息,
其次,当先后依次收到对方的180临时应答消息和200OK最终应答消息时,发送确认消息ACK,同时启动视频接收解码线程、编码发送线程、视频播放线程以及视频采集线程,
在视频条件下,被动接收模式按以下步骤进行:
第一步,创建一个监听线程,监听外来的SIP通信请求指令,
第二步,当监听到对方客户端发起的请求消息RE_INVITE时,本地振铃提示客户端有呼叫进入,同时回复180临时应答消息,
第三步,当客户端接受通信请求,按下接听按钮时,向所述对方客户端发送200OK应答消息,直到收到对方确认请求ACK为止,
第四步,当收到对方客户端确认消息ACK时,同时启动所述视频接收解码线程、视频编码发送线程、视频播放线程和视频采集线程,
步骤(2.3)当客户端通过所述代理服务器实现即时短消息通信时,按以下步骤进行:
利用所述SIP信令处理模块对需要传输的即时文本消息使用XML语言格式化,再通过所述MESSAGE消息发送到对方客户端,即时短消息的消息格式修改为“MESSAGE/消息实体”,“消息实体”为所述即时短消息内容,
对方客户端收到SIP消息MESSAGE消息后,解析消息体内含的XML文本,得到所述即时短消息,
步骤(2.4)当客户端通过所述代理服务器实现文件发送通信时,按以下步骤进行:
客户端使用TCP模式的套接字Socket,通过所述文件发送线程发送文件,对方客户端使用文件接收线程接收所述文件,
客户端将使用文件发送请求消息FILESEND发送文件,客户端使用文件发送应答消息FLSD_BACK进行同意接收应答,文件发送请求消息格式定义为“FILESEND/消息实体”,“消息实体”代表本机IP地址,同意接收应答消息格式定义为“FLSD_BACK/消息实体”,“消息实体”代表应答客户端机IP地址,
步骤(2.5)当客户端通过所述代理服务器实现电子白板消息通信时,按以下步骤进行:
客户端使用电子白板请求消息WHITEBOARD发起电子白板通信请求,对方客户端使用电子白板通信同意应答消息WHBD_BACK,电子白板请求消息格式定义为“WHITEBOARD/消息实体”,“消息实体”代表本机IP地址,同意接收应答消息格式定义为“WHBD_BACK/消息实体”,“消息实体”代表应答客户端机IP地址,
步骤(2.6)当客户端通过所述代理服务器实现医疗曲线通信时,按以下步骤进行:
客户端使用医疗曲线通信请求消息“MEDICALCURVE”发起医疗曲线通信请求,对方客户端同意接收应答消息为“MEDCUR_BACK”,医疗曲线请求消息格式定义为“MEDICALCURVE/消息实体”,“消息实体”代表本机IP地址,同意接收应答消息格式定义为“MEDCUR_BACK/消息实体”,“消息实体”代表应答客户端机IP地址。
附图说明:
图1.系统平台图。
图2.终端总体流程框图。
图3.客户终端设计图。
图4.客户终端各线程通信图。
图5.音视频子线程通信图。
图6.音频通信过程图。
图7.电子白板实现基本框架。
图8.电子白板线程关系图。
图9.各子线程模块数据流图。
图10.主线程运作流程图。
图11.实时曲线绘制模块工作机制。
图12.实时曲线绘制过程示意图。
具体实施方式:
远程医疗系统采用传统的C/S架构设计。系统的设计主要包括服务器的配置和软件客户终端的开发。服务器主要负责SIP信令的交互,当会话建立,也即SIP信令呼叫完成启动医疗数据传输系统时,数据的交互不再需要服务器的支持,而是使用peer-to-peer的端到端传输,系统整体结构如图1所示。
1.终端整体框架
远程医疗终端软件实现的功能主要包括有音视频通信、即时消息发送、文件发送、电子白板和医疗曲线。进行远程医疗,就是要给人“近在眼前”的感觉,其中音视频通信必不可少;当网络环境不是很好时,我们希望能够提供最低的通信保障,即时消息发送因为占用的数据量较少,但又能明确的传达个人意思,因而需要包含即时消息功能;病人和医生之间的问诊或者医生与医生之间的交流都免不了要交换病人的电子病历等重要文件,此时能够进行文件发送是很重要的一个功能;如果双方需要共同查看某一张图片,比如病人的X光图片,这时用电子白板进行显示并进行双方的交流是很有必要的;医疗曲线能够实时的显示病人的一些生理参数比如脑电图曲线、心电图曲线等,整个软件终端的运行过程如图2所示。
实现以上功能,远程医疗软件终端设计采用分层设计思想,将软件分为用户界面层、接口层、功能层和传输层。其中,软件的功能实现是在功能层,主要包括两个模块:SIP信令处理模块和医疗数据处理模块。
如图3所示,用户界面层是位于整个应用程序的最上层,提供图形界面,确定软件的框架。接口层,它调用一些接口函数,屏蔽了下层模块的细节,提供一些简单的接口,便于用户界面层中控件的回调函数调用,实现用户界面跟功能层的对接。功能层,实现SIP信令的解析和生成,负责完成医疗数据的处理,是整个软件的主体部分,是各个功能实现的关键模块。TCP/UDP传输层,负责实现医疗数据的底层socket传输。
2.各功能模块实现
本设计各功能之间相对独立,分别使用子线程实现。在程序启动时,首先运行SIP信令控制线程监听SIP请求消息。其他模块所用线程只有当相应的模块建立服务时,子线程才会建立,各个模块中除了即时短消息发送是跟SIP信令控制模块使用同一个子线程外,其他模块都需要建立自己独立的线程。各个子线程之间的通信如图4所示:
(1)SIP消息处理模块
SIP消息模块在整个远程医疗会话过程当中主要负责会话的建立、保持和释放。在远程医疗会话建立之前,客户端首先向注册服务器发起注册(Register),发送REGESTER消息,服务器将检查用户数据库,并把用户IP地址和用户名交给位置服务器保存。
注册完成就可以进行呼叫和对话。SIP消息处理模块具有两个重要功能,一是当发起呼叫时进行SIP信令的交互;二是时刻监听是否有SIP请求消息到来,SIP请求消息的监听是通过建立一个单独的SIP信令控制线程来实现的。
服务器主要是由SER服务器来提供服务,客户端的设计开发是重点。该产品中客户终端的SIP信令交互包括:标准协议中的信令使用和自己设计信令使用两部分。客户端向服务器注册时使用REGESTER消息进行注册,客户端与客户端之间的会话处理信令如下表1所示:
表1:客户端之间交互信令
其中,音视频会话和即时消息中使用的信令是SIP协议标准中规定的标准消息,文件发送、电子白板和医疗曲线中信令是自己设计的信令。
■向服务器注册
客户端 服务器
|--------------------REGESTER------------------------>|
|<-------------------200OK------------------------------|
■客户端之间的音视频通话
服务器1...服务器2
proxy proxy
UC1........................................UC2
| | | |
|INVITE F1 | | |
|--------------->|INVITE F2 | |
| |--------------->|INVITE F4|
| | |----------------->|
| | |200O K F9|
| |200OK F10 |<----------------|
|200OK F11 |<----------------| |
|<---------------| | |
| ACK F12 |
|--------------------------------------------------------------->|
| Audio Media Session |
|<========================================>|
| | | |
|RE_INVITE F13 | | |
|---------------------->|RE_INVITE F14| |
| |---------------------->|RE_INVITE F15|
| | |---------------------->
| | |200OK F16|
| |200OK F17 |<---------------------|
|200OK F18|<----------------------| |
|<----------------------| | |
| ACK F19 |
|----------------------------------------------------------------------->|
| Video Media Session |
|<=========================================>|
| BYEF20 |
|<-----------------------------------------------------------------------|
| 200OK F21 |
|----------------------------------------------------------------------->|
■客户端之间的短消息通信
UC 1(Sender) UC 2(Receiver)
|-------------------MESSAGE---------------------------->|
|<------------------200OK----------------------------------|
注:为了扩展文件发送、电子白板、医疗曲线的消息发送,将MESSAGE消息体中的XML文本内容表示为“消息类型/消息实体”形式,“/”之前的消息类型用来标识不同的消息,“/”后的消息实体在不同的消息中表示不同的内容,MESSAGE消息格式为“MESSAGE/消息实体”,其中“消息实体”为要发送的具体即时短消息。
■客户端之间的文件发送
UC 1(Sender) UC 2(Receiver)
|-------------------FILESEND---------------------------->|
|<------------------FLSD_BACK--------------------------|
注:FILESEND消息具体形式为“FILESEND/消息实体”,其中“消息实体”为文件发送方客户端IP地址;
FLSD_BACK消息具体形式为“FLSD_BACK/消息实体”,其中“消息实体”为文件接收方客户端IP地址;
■客户端之间的电子白板会话
UC 1 UC 2
|-------------------WHITEBOARD---------------------->|
|<------------------WHBD_BACK------------------------|
注:WHITEBOARD消息具体形式为“WHITEBOARD/消息实体”,其中“消息实体”为电子白板会话发起方客户端IP地址;
WHBD_BACK消息具体形式为“WHBD_BACK/消息实体”,其中“消息实体”为电子白板会话接收方客户端IP地址;
■客户端之间的医疗曲线会话
UC 1(Sender) UC 2(Receiver)
|-------------------MEDICALCURVE------------------->|
|<------------------MEDCUR_BACK---------------------|
注:MEDICALCURVE消息具体形式为“MEDICALCURVE/消息实体”,其中“消息实体”为医疗曲线会话发起方客户端IP地址;
MEDCUR_BACK消息具体形式为“MEDCUR_BACK/消息实体”,其中“消息实体”为医疗曲线会话接收方客户端IP地址;
(2)音视频处理模块
采用多线程设计思路,音视频传输模块总共分配9个线程,如图5,各线程功能如下:
SIP信令监听线程:负责监听外来的SIP消息。
音频接收解码线程:负责接收RTP音频数据包并进行解码。
音频编码发送线程:负责对采集到的音频数据编码后进行RTP打包发送。
音频播放线程:对解码后的RTP音频数据包进行本地播放。
音频采集线程:利用麦克风采集音频数据,并把采集到的数据放入消息队列中。
视频接收解码线程:负责接收RTP视频数据包并进行解码。
视频编码发送线程:负责对采集到的视频数据编码后进行RTP打包发送。
视频播放线程:对解码后的RTP视频数据包进行本地播放
视频采集线程:利用摄像头采集视频数据,并进行本地显示然后放入消息队列
主线程启动,在初始化时实现一些参数的设置,如获取本地IP,设置程序通信端口Port等。音视频的传输分为主动发起通信和被动接受通信两种模式。音频通信的整个过程的流程图演示如图6。
实现被动接受通信模式(音频为例):
第一步,要时刻监听外来的SIP通信请求信令(本程序为eXosip协议栈信令),因此需要创建一个专用子线程(线程1)进行外来eXosip信令的监听,线程入口函数设为sip_event_listen。
第二步,监听到EXOSIP_CALL_INVITE消息,即对方发起INVITE请求时,本地振铃提示用户有呼叫进入,在振铃同时恢复180临时应答消息。
第三步,当用户接受请求,即用户按下接听按钮时,便开始向对方发送200OK最终应答消息直到收到对方ACK确认消息为止。
第四步,当收到对方ACK确认消息后,便启动音频接收解码线程(线程2),线程入口函数设为os_sound_start_thread;启动音频编码发送线程(线程3),线程入口函数设为os_sound_start_out_thread;启动音频播放线程(线程4);启动音频采集线程(线程5)。
视频通信的建立过程跟音频通信过程类似,只不过在第二步接收到的为EXOSIP_CALL_REINVITE消息,即RE_INVITE消息。接收到ACK确认消息以后也要启动4个子线程,分别为视频接收解码线程(线程6),入口函数os_video_start_thread,视频编码发送线程(线程7)os_video_start_out_thread,视频播放线程(线程8)和视频采集线程(线程9)。
实现主动发起通信模式(音频为例):
第一步,用户输入对方SIP地址标识,并按下拨号按钮发起通话请求,即发出INVITE请求消息。
第二步,当收到对方180临时应答消息时在本地提示对方正在振铃,再次收到对方200OK最终应答消息时,发送ACK确认消息,同时启动音频接收解码、音频编码发送线程和音频播放、音频采集线程4个线程,具体过程类似被动接受模式中第四步。
视频通信的发起过程跟音频类似,只是INVITE改为RE_INVITE消息,同样要建立4个线程。
(3)即时消息模块
SIP协议实现即时通信的文本传输不是SIP的核心内容,而是通过SIP协议的扩展[9]来实现即时消息的传输。即时消息扩展的SIP消息为MESSAGE,此消息的消息格式按照SIP协议的标准实现,需要传输的即时文本消息使用XML语言格式化,通过MESSAGE捎发送到被叫方,被叫方收到MESSAGE消息后,解析消息体中的XML格式化文本,得到呼叫方发来的即时消息。因此,即时消息模块的实现可以看作是在SIP信令处理模块中实现的。
(4)文件发送模块
文件发送的SIP会话建立以后,开始正式发送文件。文件的发送过程分为文件信息头的发送和文件内容的发送两部分,传输时发送方新建一个发送子线程,接收方新建一个接收子线程,传输完成,子线程关闭,直接使用TCP模式的socket传输。
本产品是在windows环境下进行的开发,因此,文件信息的获取使用windowsAPI函数。关于文件的全部属性信息,总计有以下9种:文件的标题名、文件的属性(只读、存档,隐藏等)、文件的创建时间、文件的最后访问时间、文件的最后修改时间、文件大小的高位双字、文件大小的低位双字、保留、保留。在这里只有文件标题名和文件的长度可以通过CFile类比较方便的获得,而对于其他几种属性的获取和设置就无能为力了。
在用FindFirst()和FindNext()函数去查找磁盘文件时经常使用的一个数据结构WIN32_FIND_DATA的成员变量里包含了以上所有的文件属性,因此可以通过这个结构作为获取和更改文件属性的手段。该结构的内容如下:
typedef struct_WIN32_FIND_DATA{
DWORD dwFileAttributes;//文件属性
FILETIME ftCreationTime;//文件创建时间
FILETIME ftLastAccessTime;//文件最后一次访问时间
FILETIME ftLastWriteTime;//文件最后一次修改时间
DWORD nFileSizeHigh;//文件长度高32位
DWORD nFileSizeLow;//文件长度低32位
DWORD dwReserved0;//系统保留
DWORD dwReserved1;//系统保留
TCHAR cFileName[MAX_PATH];//长文件名
TCHAR cAltemateFileName[14];//8.3格式文件名
}WIN32_FIND_DATA,*PWIN32_FIND_DATA;
可以通过FindFirstFile()函数根据当前的文件存放路径查找该文件来把待操作文件的相关属性读取到WIN32_FIND_DATA结构中去:
WIN32_FIND_DATA ffd;
HANDLE hFind=FindFirstFile(″c:\test.dat″,&fid);
在使用这个结构时不能手工修改这个结构中的任何数据,结构只能作为一个只读数据,其所有的成员变量都会由系统完成填写。
为了更好的保存获取到的文件属性信息,对应于文件属性构造一个自定义的SOCKET_STREAM_FILE_INFO数据结构,获取的属性信息可暂存于此数据结构当中,SOCKET_STREAM_FILE_INFO的内容如下:
typedef struct_SOCKET_STREAM_FILE_INFO{
TCHAR szFileTitle[128];//文件的标题名
DWORD dwFileAttributes;//文件的属性
FILETIME ftCreationTime;//文件的创建时间
FILETIME ftLastAccessTime;//文件的最后访问时间
FILETIME ftLastWriteTime;//文件的最后修改时间
DWORD nFileSizeHigh;//文件大小的高位双字
DWORD nFileSizeLow;//文件大小的低位双字
DWORD dwReserved0;//保留,为0
DWORD dwReserved1;//保留,为0
}SOCKET_STREAM_FILE_INFO,*PSOCKET_STREAM_FILE_INFO;
首先用FindFirstFile()函数将文件属性获取到WIN32_FIND_DATA结构中去,之后可以用FindClose()将其关闭,并把WIN32_FIND_DATA结构中的有关文件属性信息的内容复制到自定义结构SOCKET_STREAM_FILE_INFO的结构对象中备用。
(5)电子白板模块
电子白板软件需要提供一种特殊的软件界面,其功能有:进行远程诊断中的双方可以同时共享一块白板,二者均可浏览到白板信息,并在该白板上绘制线段、矩形、椭圆等标准形状,还可绘制不规则曲线,并可自由选择这些形状的画笔颜色、画笔粗细等属性;使用者还可在白板中粘贴病人的医疗图片,如x光片、CT片等,参加诊断的双方可在该图上进行标注,包括画线和输入文字,以表达自己的意思;只要诊断过程中有一方打开白板,另外一方也弹出其自己的白板界面,在该界面上不仅可以看到对方在白板上的操作,还可自己在上面绘画、粘贴、编辑图像。
该模块的核心部分是一种消息共享机制模型。本软件设计的消息共享机制要制定一系列的应用层协议,以区分数据包内数据的意义,如包内数据是字符值或坐标点。这种工作方式下的共享模型结构框图如图7所示:
该模块的实现思路如下:
采用多线程方式开发,将电子白板功能在3个子线程中实现,主线程负责软件终端整体的维护,主线程用于产生软件界面,以及协调各子线程的动作,用消息通知机制同子线程通信;主线程还可处理用户操作,显示给用户相关信息;最后还需要利用主线程进行垃圾回收。各子线程与主线程的关系如图8所示:
各子线程之间相互协作,分别完成不同的功能,其数据流图如图9所示:
绘图线程运行绘图模块,绘图模块负责把缓存中的坐标数据绘制到画布中,缓存中的坐标数据可以是用户鼠标操作产生的,也可以是接收到的远程主机的绘图坐标数据。
发送数据线程运行数据打包、发送模块,该模块将绘图模块产生的缓存中的坐标数据打包,并发送到远程主机;该模块还负责发送请求信息。在电子白板中使用的数据结构为自定义的数据结构,其结构如下所示:
typedef struct MSG_BUFFER_WHITE{
LPSTR operations;
Int Pentype; //选择画笔类型
Int xPoint; //画点的x坐标
Int yPoint; //画点的y坐标
}MSG_BUFFER_WHITE,*PMSG_BUFFER_WHITE;
接收数据线程运行数据接收、解包模块,该模块收到远程主机传来的绘图坐标数据,将该数据解包、并保存到缓存中供绘图模块调用;该模块还负责接收请求信息。
主线程模块在电子白板启动时产生,启动该线程后再由该线程启动其他三个子线程。主线程的主要功能是用户界面显示、启动子线程、向子线程发送通知消息、接收子线程的通知消息、垃圾回收和资源清理。该模块是本系统的核心模块。其实现过程如图10所示。
该线程模块由主线程产生,主要功能是将用户的鼠标动作以坐标数组的方式记录下来,并根据不同的选择(矩形、原型、自由线)将其绘制在画板上。如果远程主机同意建立连接,则将坐标数组存储到发送缓存中。如果本地主机同意接收数据,则将接收缓存中的数据存储到坐标数组中,并绘制在画板上。
绘图子线程被创建后即可绘图,绘图步骤分两步,先将鼠标动作记录到坐标数组中,再根据坐标数组和所选的绘图方式(矩形、圆、线等)在画板上绘图。
该线程模块由主线程产生,主要功能是利用TCP/IP协议,以套接字的方式将本地主机产生的请求数据和绘图数据打包,并发送给远程主机,其中请求数据和绘图数据的数据包遵循一定的格式。
发送子线程被创建后根据主线程的通知进行相应动作。发送子线程被创建时同时也创建了发送套接字。
该线程模块由主线程产生,主要功能是利用TCP/IP协议,以套接字的方式接收远程主机发来的数据,并在本地将收到的请求数据和绘图数据解包,其中请求数据和绘图数据的数据包遵循一定的格式。
接收子线程被创建后根据接收的远程主机的信息进行相应动作。接收子线程被创建时同时也创建了接收套接字。
(6)医疗曲线模块
实时曲线绘制模块的工作机制如图11。该模块主要利用高速网络对数据进行传输,接收端接收数据并进行实时处理,在软件界面中利用实时数据进行曲线绘制并实时更新曲线,最终达到所要求的目的。
如图11所示,在整个实时曲线的绘制过程中,主要涉及三个工作过程:首先是在数据采集端对病人实时数据的采集,通过网络发送给本地系统,系统再利用实时曲线绘制模块将曲线显示在界面中;与此同时,本地系统分析这些数据并将这些数据进行打包,利用高速网络发送给异地的系统;在相隔千里的异地,系统接收数据,用同样的绘制实时曲线的原理,将这些实时曲线在自己的系统软件界面中绘制出来,从而达到双方近似同步观察病人的实时生理曲线的目的,为共同治疗病人提供有力的辅助手段。
医疗曲线绘制打包传输中使用的数据格式为自定义数据结构,其具体结构如下:
typedef struct MSG_BUFFER_CURVE{
LPSTR operations;
Int Curvetype; //曲线类型
Int xPoint; //画点的x坐标
Int yPoint; //画点的y坐标
}MSG_BUFFER_CURVE,*PMSG_BUFFER_CURVE;
实时曲线绘制模块是通过主界面中查看实时曲线的菜单功能调用实现的,因此其内部接口设计主要是通过调用函数实现模块调用,从而实现曲线的绘制和显示。
模块的用户接口即为一个曲线显示区域,该区域根据所显示的数据类型自动匹配坐标轴类型。在显示区域内,通过曲线的不间断重绘向观察者展示曲线的动态变化,由于时间间隔很短,在观察者看来,曲线是实时更新没有间隔的,因此,对医生的判断没有实质性的影响。
实时曲线的绘制过程示意图如图12所示。
步骤1:实时曲线绘制模块首先从网络接收数据包,调用处理函数解包并画出对应的第一个数据点;
步骤2:模块继续接收数据,用同样的方法画出第二个数据点;
步骤3:前两个数据点间存在一定的时间和空间间隔,由于该间隔足够小,采用画直线连接两点的方法可以非常近似地表现两个数据点间的前后联系。
循环重复以上步骤,直至数据量超过曲线显示区域的显示量程,此后再接收数据信息,可以从显示区域中擦去最早显示的数据点,其它数据点依次前移,即重绘曲线,并在显示区域的最后位置画出最新接收的数据,用此种方法直至最后,在宏观上该过程就表现为实时曲线的绘制。
机译: 面部动画控制方法和基于3D游戏引擎的实时交互式远程授课系统,特别是用于游戏引擎技术与基于交互式3D的交互式远程授课系统的有效结合
机译: 基于sip协议的与多媒体服务器的交互方法及系统
机译: 基于sip协议与媒体服务器交互的方法和系统