基于ios系统的安保调度项目的开发与实现

2017-02-27 14:44徐奇朱炼
电脑知识与技术 2016年31期
关键词:软件开发

徐奇+朱炼

摘要:随着社会的不断发展变化,对现代安保行业的要求也在不断提高,为适应现代安保业通信需求,提高安保人员的工作效率,开发设计一套功能强大、性价比高的ios客户端是非常必要的,基于通信技术,百度地图SDK,Speex语音编解码库等技术,可以实现点对点、组呼、对讲等多种呼叫功能。控制中心可采用语音调度系统,可实现安保人员的及时调度等功能。软件设计以用户体验为核心,结合项目需求和系统特点,采用MVC的框架结构搭建,并借鉴DDMenu侧滑菜单的使用,让此款软件体验更加简洁,便于用户操作。

关键词:ios系统;安保调度项目;软件开发

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)31-0071-03

Abstract: With the continuous development of social changes, the requirements of modern security industry has been improved, in order to adapt to modern communication needs security industry, improve the working efficiency of the security guards, development and design a set of powerful, cost-effective ios client is very necessary. In this paper, based on the communication technology, baidu map SDK, Speex audio codec library such as technology, can realize the point-to-point, group, intercom and other call function. Control center can use voice dispatching system, and can realize security personnel timely scheduling, etc. Software design of the user experience as the core, combined with the project requirements and the characteristics of the system, using the MVC frame structure building, and draw lessons from DDMenu lateral spreads the use of the menu, make the software experience more concise, easy to user operation.

Key words:Ios system; security scheduling project; development

1 緒论

安保行业近年来发展迅速,各类信息化技术不断在安保行业中获得广泛应用。当前,随着智能手机与智能平板的广泛应用,为其开发专用的安保调度项目成为关注的焦点。有针对性的开发群组对讲、语音电话、我的位置、打卡考核和培训学习等模块。

在该项目中,通过群组对讲和语音电话及时和其他调度人员进行及时交流交换信息。从我的地图模块可以清晰地看见其他调度人员的位置,可以及时性的安就近原则调度安保人员,达到及时性和可靠性,避免不必要的人力资源浪费。通过培训学习模块考核并提高每位安保人员的服务意识和安全意识,熟练掌握各项安全业务技能,加强安保人员的综合素质,才能更好地为服务于安保行业。打卡考核模块可以上传工作日志包括现场图片,更加拓宽日常考勤的管理。

2 系统模块设计

苹果手机移动端软件的开发环境主要有两大方面,即硬件环境和软件环境两大类。硬件环境:本文使用mac book、iOS设备若干台,软件环境:本文采用Mac OS 10.09系统、Xcode7.0版本。需要iOS设备若干台是为了在测试时,检查软件在不同的系统版本和分辨率的客户端下是否存在兼容性的问题,对于适配,系统的API比较麻烦,一般使用Masonry[1]。项目釆用苹果的开发工具Xcode及Objective-C作为主要的开发语言。

2.1 主界面介绍

在进入安保调度的主界面是给使用者的第一印象,页面的美化度、是否存在明显BUG、操作是否流畅不卡顿、用户是否操作别扭等因素都能直接影响了用户对这个应用的喜欢。

点击客户端,打幵的是新手引导页,新手引导页的主要作用是介绍本软件的特点,用图文并茂的方式介绍本软件特色。包括实时对讲、移动打卡、组织架构、学习培训。实时对讲随时随地了解安保团队信息、单呼组呼、呼叫调度台、创建组群。移动打卡保障安保人员出勤到岗,含有考情统计,签到记录。组织架构提高员工效率,释放组织潜能,设有分级管理、角色管理和权限管理。学习培训审核和提高安保人员专业技能。

登录页面设计简洁清爽,登陆主要有手机号和验证码组成,因此键盘设置默认只有数字键盘,避免不必要的错误输入,其次让客户端更加简洁。登陆时会有加载提示,让用户更加清晰了解登录状态。

第一次登陆默认首界面是安保对讲界面,进入主界面使用苹果官方的reachability这个类检测网络状态,可以区分移动端是否联网,并且区分出是否是手机网络还是wifi网络。界面主要采用DDMenu抽屉式菜单。点击导航栏左侧按钮可查看菜单模块。菜单模块主要采用表格形式和图文并茂的方式展现此款软件的主要功能。功能列表主要包括:组织架构、安保对讲、企业群组、信息资讯、交流中心、学习培训、我的位置、考勤管理、系统设置、我的中心。

2.2 我的位置模块

位置模块也是安保调度的重要模块,此模块搭建百度地图SDK,点击进入可显示我的当前位置和同时在线的其他安保人员,并具有更随功能,即移动端位置更新,地图上的大头针也随之改变,大头针采用头像和姓名组合简单明了。同时点击大头针可动画弹出表格菜单具有呼叫、发送信息和查看轨迹功能。

此模块具有查看轨迹功能,在启动软件的同时已开启分线程和定时器每三秒获取当前地理位置,并和上次地理位置信息的经纬度进行比较筛选,如果相差不大则筛除不进行上传,避免不必要的流量浪费和大数据量的信息存储。筛选的操作可以简易的和上次的经纬度比较在去除末两位的情况下的字符串是否相同。依次比较,但是若第一次数据就出现偏移那么后面的数据比较都会出现错误。所以必须确保第一次上传的经纬度的准确性,一般开始的位置信息不进行上传,而是在比较是否在合理的范围内,再上传后续的位置信息。

查看轨迹功能也具有查看他人轨迹信息,但是这是由权限限制。不同的角色具有不同的权限,但是本人是可以查看自己的所有历史轨迹,点击导航栏右侧按钮,并选择对应日期,就可以查看,但是由于是数据量达到上千甚至上万时,CPU对于数据处理也是有限的,耗用CPU非常大会卡死主线程,此时就需开辟分线程进行绘制轨迹。在采用addOverlay进行绘制前同样对数据进行筛选,采用百度地图API提供的空间关系判断提供相应的接口,判断点与圆的位置关系。比较一个点是否在内一个点的范围内,根据三秒时间内这点与另一点的空间距离是否合理来进行偏移点筛选。

2.3 安保对讲模块

音频数据的编码是在原始数据基础上进行编码,编码后的大小必须是20字节才能和安卓客户端大道互通的效果。通过HTTP请求将压缩后的音频数据发送到服务器。同理通过回调函数得到服务器返回的音频数据,同样设置和录音相同的参数设置并进行解码,通过队列源源不断播放直到结束。在播放前必须设置好默认播放输出端,是扬声器或者是听筒。本文设置默认是扬声器播放音频。在p2p语音电话通信状态下开启传感器功能。为了减轻长期点亮屏幕引起的电量消耗和屏幕误触。使用接近传感器首先要启用接近传感设置,注册针对传感器状态发生变化的通知。当遮挡传感器时就可达到扬声器和听筒进行切换。

对于不希望启动接近传感器功能的使用者,如果需要进行扬声器和听筒进行切换过程中,则必须通过启用接近传感器来进行声音输出模式的切换,与此同时,则必须注意,如果当声音通过听筒进行播放完毕时,此时仍在听筒模式输出,如果此时关闭传感器功能,则导致在离开听筒时,由于传感器功能已经关闭,应用无法再次收到注册的传感器变更通知,而此时如果未能将底层的声音输出模式切换,则导致相关的声音输出仍从听筒中输出,即使引起传感器反映的障碍已经离开传感器作用范围,但应用中获取的传感器状态仍未接近状态,使根据传感器状态进行切换声音输出模式操作失效。

3 语音模块技术开发

3.1 录音模块的数据结构

采用音频队列录音需要三个要素:音频队列(Audio queues)、队列缓冲区(Audio queue buffers)和回调函数(callback functions),音频队列既可以是录制音频也可以是播放音频的对象。数据类型采用AudioQueueRef来描述,它在AudioToolbox.framework框架中的AudioQueue.h 頭文件中声明。音频队列包含以下数据结构:音频队列缓冲区数组(audio queue buffers),数组中的每个缓冲区都是用来存储临时的音频数据。 缓冲区队列(buffer queue ),队列中包含着audio queue buffers并且将它们有序的排列。最后调用回调函数获取音频数据解码后放到队列中按序播放[2]。

3.2 AudioQueue的工作模式

AudioQueue内部存在一套缓冲队列(Buffer Queue)机制。在启动AudioQueue之后通过AudioQueueAllocateBuffer生成若干个AudioQueueBufferRef缓存结构,这些生成的Buffer可以用来存储回调的将要播放的音频数据,而且这些Buffer受生成它们的AudioQueue实例对象管理,此时内存也已经被分配成功,当AudioQueue被Dispose时这些Buffer缓冲区也会随之被销毁。

当有音频数据需要播放时会被memcpy到AudioQueueBufferRef的mAudioData中(mAudioData所指向的内存也已经被分配好,之前AudioQueueAllocateBuffer所做的工作),并给mAudioDataByteSize赋值传入的数据大小。然后调用AudioQueueEnqueueBuffer把存储的音频数据的Buffer放入到AudioQueue内置的Buffer队列之中。当队列中存在buffer的情况下可以调用AudioQueueStart,此时AudioQueue就会按照Enqueue顺序依次使用队列中的buffer进行播放,每当前一个Buffer使用完毕之后数据就会从Buffer队列中被移除并且会触发一个回调来通知使用者,某个AudioQueueBufferRef已经使用完毕[3],此时可以继续重用这个对象来存储后续回调的音频数据。按此循环操作音频数据就会被逐个播放直到结束。

3.3 录音初始化设置

录制音频队列是以移动端的麦克风作为录音功能音频队列的音频输入端,按住录音按钮或者p2p通信时输入端就会不断地将音频数据传放置到缓冲队列中,此时再通过回调函数将缓冲块的数据传出再做的处理,而已被读取数据的缓冲区就会再次被放到队列的尾端再次循环使用,因为音频队列具有循环引用的功效。将音频原始数据进行编码发送,通过回调函数获取编码音频数据进行播放,便可达到循环功效。

缓冲区的个数设置也是至关重要的,并非越多越好,如果数量过多则会造成播放延迟,反之有些音频数据可能来不及播放,由于iOS设备的内存容量不多,经反复测试最终设置为3个缓冲区较为合适。

在录音初始化前,必须进行相关参数设置,创建好缓冲区。音频数据流的采样帧数,本文釆用8000Hz,本文采用单声道,所以值取1,声道包含的采样率的值取16bit[4] 。主要有这三个参数决定音频流的采样,其他参数可由此计算得来。

3.4 集成speex库

Speex压缩库给语音编码提供了快速有效帮助,它适用于多种平台,可以在多个平台达到互通的效果。它不仅提供了语音的编解码功能,而且在还提供了声音降噪和声学回声消除功能,给语音通信提供了更高的技术支持。Speex支持多种比特率而且。speex在各个平台上的运行做的非常好,使用和安卓对应版本的speex编解码库,就可以很好的在两平台互用,iOS移动端可以使用Speex库,可以在speex官网下载或者在github查找相应版本的静态库或framework框架[5]。

3.5 音频流数据编解码实现

3.5.1 编码流程

在进行对音频数据流进行编码需要采用Speex的API函数进行如下步骤:

1)自定义一个SpeexBits类型的变量bits和一个Speex编码状态的变量enc_state。

2)然后调用speex_bits_init(&bits)函数初始化bits。

3)接着调用speex_encoder_init(&speex_nb_mode)函数来初始化enc_state。其中speex_nb_mode表示的是窄带模式。speex_wb_mode表示宽带模式、speex_uwb_mode表示超宽带模式。

4)调用函数int speex_encoder_ ctl来设置编码器参数,state参数表示编码器的状态;request参数表示需要定义的参数类型。

5)初始化设置完毕后,再对每一帧声音作如下处理:调用函数speex_bits_reset(&bits)再次设定SpeexBits,然后调用函数speex_encode(enc_state, input_frame, &bits)[6],参数bits中即存储着编码后的数据流,在此处便可以获取并作处理。

6)若编码结束,便可进行摧毁。

3.5.2 解码流程

同理,对从服务器回调的已经编码过的音频数据进行解码需要经过以下步骤:

1)首先自定义一个SpeexBits类型变量bits和一个Speex编码状态变量enc_state。

2)需調用speex_bits_init(&bits)来初始化bits。

3)调用speex_decoder_init (&speex_nb_mode)来初始化enc_state对象。

4)调用speex_decoder_ctl 函数来设定编码参数。

5)调用 speex_decode函数对bits中的音频数据进行解编码,参数out中便是保存解码后的数据流,然后进行放置到音频队列中进行播放。

6)最后调用函数关闭或销毁SpeexBits和解码器。

4 结束语

本文主要介绍了关于整个安保调度项目的相关模块和主要技术要点分析,安保工作对于社会所产生的价值也是无形的,对于每个都是有利也是无法衡量的。所以此款软件对于服务于安保人员,更好地确保社会安全,这也是我们共同的理想。

参考文献:

[1] Matt Drance, Paul Wanen. iOS应用开发攻略[M]. 北京: 人民邮电出版社, 2012.

[2] Paul Deitel. iPhone应用程序开发名家解析[M]. 北京: 电子工业出版社, 2010.

[3] Aaron Hillegass著. 苹果开发之Cocoa编程[M]. 北京: 电子工业出版社, 2009.

[4] 赵淼. 基于Telematics的iPhone手机客户端系统的研究及应用[D].长春: 吉林大学, 2014.

[5] 张立文, 吴迪, 宋占伟. 基于Speex的嵌入式无线数字音频交互系统[J]. 吉林大学学报:信息科学版, 2013, 31(4): 353-358.

[6] 李荣荣, 胡昌奎, 余娟. 基于谱熵的语音端点检测算法改进研究[J]. 武汉理工大学学报, 2013, 35(7): 134-139.

猜你喜欢
软件开发
基于安卓平台的移动式教学模式研究
软件开发中JAVA编程语言的应用