李 玉
(兰州大学信息科学与工程学院,兰州 730107)
在智能移动终端和互联网还未普及之前,人们如果身体不适想咨询医生相关问题时,只能去医院排队挂号,而一些医疗水平较高的医院或专家号经常出现排号已满的现象,这不仅会浪费患者大量的时间,还可能会延误病情,造成较严重的后果。随着智能手机及互联网的快速发展和普及,市面上出现了许多基于智能手机终端和互联网的远程医疗问诊产品,患者可以通过智能手机和互联网与医生进行远程医疗问诊,在一定程度上节省了患者排队、挂号、问诊的时间成本,使患者的问诊不再拘泥于医院这一有限空间内,同时也缓解了医院接诊的压力,提高了医疗资源的利用率。
目前,市面上的远程医疗问诊产品基本分为两大类,一类是基于PC端的远程医疗问诊产品,这类产品的移动性及便携性较差[1];另一类是基于智能手机等移动终端的远程医疗问诊产品,但市面上现有的移动端远程医疗问诊产品大都是咨询相关药品或仅有简单的预约挂号功能,对患者远程问诊功能的设计还停留在简单的文字交流层面,用户体验较差。因此,本文设计并实现了基于会话初始协议(session initiation protocol,SIP)的Android视频问诊客户端。
由于我国目前医疗资源总量不足、分布不均衡等问题仍然比较突出,为缓解医疗供需矛盾,切实让老百姓病有所医,让大多数患者能享受到比较优质的医疗资源,国家提出了“互联网+”战略,鼓励在线远程医疗。本文提出的基于SIP的Android视频问诊客户端就是远程医疗的一个具体应用,其主要利用互联网和多媒体技术,实现患者和医生之间的双向实时视频问诊。
基于SIP的Android视频问诊客户端采用Java语言实现用户呼叫、视频通话及挂断等逻辑;采用XML语言实现用户界面(user interface,UI)的设计。同时客户端的开发采用比较流行的MVP(Model-View-Presenter)架构。在该架构中,模型层(Model)由网络数据访问组件及本地缓存访问组件构成;视图层(View)由 Activity、Sdapter和 Fragment组件构成,主要用来对应用的页面布局进行设置;展示器层(Presenter)使用定制的Presenter作为基础组件[2]。采用MVP架构可以使程序保持模块化,使得模型与视图完全分离,为后期客户端的升级、优化打好基础。该视频问诊客户端整体由SIP信令控制和音视频通信两大模块构成,其中SIP信令控制部分主要负责会话的建立、修改以及取消等功能,音视频通信部分主要负责音视频问诊过程的开启、持续及取消等,整体架构如图1所示。
图1 基于SIP的Android视频问诊客户端整体架构图
基于SIP的Android视频问诊客户端设计应用的主要技术有Android开发、SIP信令控制、多媒体传输技术及音视频编解码等。
Android系统以其开放性、开源性、可定制等特性受到广大开发者及用户的欢迎[3]。Android系统的框架结构自上至下分别为应用程序层、应用程序框架结构层、中间件层以及Linux内核层[4]。
本设计中视频问诊客户端是基于Android操作平台、采用Java及XML语言进行开发的。若要保证视频问诊客户端良好的用户体验,还需要应用UI布局设计、XML文件的建立、常用组件(EditText、Button等)、对话框、网络通信、SurfaceView以及多线程等技术。
SIP是应用层控制协议,主要用来创建、更改及释放多媒体会话[5]。一个简单的、基于SIP来实现音视频通话的流程需要4步:
(1)呼叫发起方A向被呼叫方B发送一个请求建立会话的“INVITE”(邀请)指令,在请求指令中本次呼叫的唯一标识(Call ID)用于调用会话描述协议(session description protocol,SDP)指令[6]。
(2)被呼叫方B收到请求指令后,向呼叫发起方A回复“RINGING”(振铃)指令,向呼叫发起方A反馈已收到会话请求;当被呼叫方B同意呼叫发起方A的视频通话请求时,会向呼叫发起方A发送“200OK”指令。
(3)呼叫发起方A收到被呼叫方B发送的“200 OK”指令后,会向被呼叫方B发送“ACK”确认指令。通过上述的“INVITE”“200OK”“ACK”3 次握手后,会话发起双方才可以进行视频通话。
(4)当会话双方视频通话结束后,其中任意一方发送“BYE”指令来告知对方结束会话,另一方收到该指令后,会向对方回复“200OK”指令表示其收到会话结束的通知,从而结束双方视频会话。
SIP基本通信网络模型如图2所示。
图2 SIP基本通信网络模型
多媒体传输在视频通话过程中起着至关重要的作用,在很大程度上影响着视频通话的质量。目前,在多媒体传输过程中常用到的一些流媒体协议有资源预留协议(resource reservation protocol,RSVP)、SDP以及实时传输协议(real-time transport protocol,RTP)[7]等。
在视频问诊客户端的开发过程中,为了保证良好的视频通话质量和用户体验,采用RTP作为通信协议。该协议是一个数据封装协议,具有传输效率高、灵活性强、可扩展性强和自适应性强等诸多优点[8]。通过RTP可以在点对点的网络环境中实现流媒体数据的实时传输。
视频问诊客户端中音视频编解码主要采用G.726算法[9]和H.264数字视频编解码技术来实现。G.726算法简单,语音质量高,且多次转换后仍能保证语音质量,同时还能在低比特率上达到网络等级的话音质量。H.264是一种高性能视频编解码技术[10],该技术不仅精简了不必要的功能模块,还对编码选项进行了合理的减少,使得其压缩性能有了很大的提升,在保证其对数据压缩比率较高的同时,还保证了图像的高质量和流畅性,满足用户视频通话中对图像质量的要求。
视频问诊客户端主要基于SIP信令会话的发起及取消、音视频数据的采集、RTP传输模块的解析、H.264及G.726等模块的解码以及音视频数据的播放等技术来实现,主要功能是通过SIP信令控制来实现2个用户之间的呼叫及挂断,进而实现患者和医生之间的实时视频问诊功能。
视频问诊客户端中SIP信令控制的实现主要通过对开源SIP协议栈进行二次开发,即对SIP进行底层解析和再开发,将开发后的程序进行封装,封装好的程序编译成.so动态链接库文件,并将其移植到Android项目下的Libs文件夹中,使其作为程序的一个依赖库,可以在Android程序中通过“System.loadLibrary(‘xxxx’)”指令加载并调用,以实现用户之间多媒体会话的发起、取消等功能。实现SIP信令控制的部分核心代码如图3所示。
图3 实现SIP信令控制的部分核心代码
视频问诊客户端中音视频通信模块结构如图4所示,音视频通信的实现依赖于客户端硬件采集的音频信号和视频信号,将采集到的音频和视频信号分别采用G.726算法和H.264数字视频编解码技术进行编、解码处理后,通过RTP在用户之间进行音视频数据流的传输[11],以保证会话双方音频和视频的同步,音视频通信流程如图5所示,实现该功能的部分核心代码如图6所示。
图4 音视频通信模块结构图
图5 音视频通信流程
图6 实现音视频通信功能的部分核心代码
将视频问诊客户端分别安装在通信双方Android操作系统的手机终端上,用户A通过输入用户B的IP,并按下呼叫按钮开始呼叫用户B,用户B接通后便可以实现视频通话的功能,进而实现视频问诊功能,如图7所示。通过真机测试及修改,在网络良好的情况下,基本可以满足用户的视频问诊需求。
图7 视频通话展示
本研究在分析传统的文字留言问诊模式弊端的基础上,提出了远程视频问诊模式,该模式相较于文字留言问诊模式的优势在于保证了医生和患者之间问诊的即时性和真实性。另外,患者在用文字描述某些症状时,存在表述不清楚的情况,这会影响医生对病症的判断,甚至造成较严重的医疗事故,而视频问诊中双方采用语言实时通信可以较好地解决上述问题。同时视频问诊过程中,医生还可以把对患者的观察作为辅助判断依据,从而大大提高问诊的准确性。
本文提出的基于SIP的Android视频问诊客户端利用SIP信令控制,实现多媒体会话的创建及修改,利用G.726算法和H.264视频压缩技术实现音视频的编、解码,通过RTP传输音视频数据流,并在Android操作系统上实现了用户视频通话。本文所设计的视频问诊客户端虽然在网络良好的情况下可以满足用户视频问诊的基本需求,但是目前存在功能单一,用户视频交互界面不够友好,视频通话过程中偶尔会出现界面卡顿、噪声等问题。下一步将在现有视频问诊客户端的基础上增加图片传输、文字交流等功能,并对用户界面及视频通话的质量进行优化,以提升用户体验。