徐奇+朱煉
摘要:隨著社會的不斷發(fā)展變化,對現(xiàn)代安保行業(yè)的要求也在不斷提高,為適應(yīng)現(xiàn)代安保業(yè)通信需求,提高安保人員的工作效率,開發(fā)設(shè)計一套功能強大、性價比高的ios客戶端是非常必要的,基于通信技術(shù),百度地圖SDK,Speex語音編解碼庫等技術(shù),可以實現(xiàn)點對點、組呼、對講等多種呼叫功能??刂浦行目刹捎谜Z音調(diào)度系統(tǒng),可實現(xiàn)安保人員的及時調(diào)度等功能。軟件設(shè)計以用戶體驗為核心,結(jié)合項目需求和系統(tǒng)特點,采用MVC的框架結(jié)構(gòu)搭建,并借鑒DDMenu側(cè)滑菜單的使用,讓此款軟件體驗更加簡潔,便于用戶操作。
關(guān)鍵詞:ios系統(tǒng);安保調(diào)度項目;軟件開發(fā)
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼: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 緒論
安保行業(yè)近年來發(fā)展迅速,各類信息化技術(shù)不斷在安保行業(yè)中獲得廣泛應(yīng)用。當(dāng)前,隨著智能手機與智能平板的廣泛應(yīng)用,為其開發(fā)專用的安保調(diào)度項目成為關(guān)注的焦點。有針對性的開發(fā)群組對講、語音電話、我的位置、打卡考核和培訓(xùn)學(xué)習(xí)等模塊。
在該項目中,通過群組對講和語音電話及時和其他調(diào)度人員進(jìn)行及時交流交換信息。從我的地圖模塊可以清晰地看見其他調(diào)度人員的位置,可以及時性的安就近原則調(diào)度安保人員,達(dá)到及時性和可靠性,避免不必要的人力資源浪費。通過培訓(xùn)學(xué)習(xí)模塊考核并提高每位安保人員的服務(wù)意識和安全意識,熟練掌握各項安全業(yè)務(wù)技能,加強安保人員的綜合素質(zhì),才能更好地為服務(wù)于安保行業(yè)。打卡考核模塊可以上傳工作日志包括現(xiàn)場圖片,更加拓寬日常考勤的管理。
2 系統(tǒng)模塊設(shè)計
蘋果手機移動端軟件的開發(fā)環(huán)境主要有兩大方面,即硬件環(huán)境和軟件環(huán)境兩大類。硬件環(huán)境:本文使用mac book、iOS設(shè)備若干臺,軟件環(huán)境:本文采用Mac OS 10.09系統(tǒng)、Xcode7.0版本。需要iOS設(shè)備若干臺是為了在測試時,檢查軟件在不同的系統(tǒng)版本和分辨率的客戶端下是否存在兼容性的問題,對于適配,系統(tǒng)的API比較麻煩,一般使用Masonry[1]。項目釆用蘋果的開發(fā)工具Xcode及Objective-C作為主要的開發(fā)語言。
2.1 主界面介紹
在進(jìn)入安保調(diào)度的主界面是給使用者的第一印象,頁面的美化度、是否存在明顯BUG、操作是否流暢不卡頓、用戶是否操作別扭等因素都能直接影響了用戶對這個應(yīng)用的喜歡。
點擊客戶端,打幵的是新手引導(dǎo)頁,新手引導(dǎo)頁的主要作用是介紹本軟件的特點,用圖文并茂的方式介紹本軟件特色。包括實時對講、移動打卡、組織架構(gòu)、學(xué)習(xí)培訓(xùn)。實時對講隨時隨地了解安保團隊信息、單呼組呼、呼叫調(diào)度臺、創(chuàng)建組群。移動打卡保障安保人員出勤到崗,含有考情統(tǒng)計,簽到記錄。組織架構(gòu)提高員工效率,釋放組織潛能,設(shè)有分級管理、角色管理和權(quán)限管理。學(xué)習(xí)培訓(xùn)審核和提高安保人員專業(yè)技能。
登錄頁面設(shè)計簡潔清爽,登陸主要有手機號和驗證碼組成,因此鍵盤設(shè)置默認(rèn)只有數(shù)字鍵盤,避免不必要的錯誤輸入,其次讓客戶端更加簡潔。登陸時會有加載提示,讓用戶更加清晰了解登錄狀態(tài)。
第一次登陸默認(rèn)首界面是安保對講界面,進(jìn)入主界面使用蘋果官方的reachability這個類檢測網(wǎng)絡(luò)狀態(tài),可以區(qū)分移動端是否聯(lián)網(wǎng),并且區(qū)分出是否是手機網(wǎng)絡(luò)還是wifi網(wǎng)絡(luò)。界面主要采用DDMenu抽屜式菜單。點擊導(dǎo)航欄左側(cè)按鈕可查看菜單模塊。菜單模塊主要采用表格形式和圖文并茂的方式展現(xiàn)此款軟件的主要功能。功能列表主要包括:組織架構(gòu)、安保對講、企業(yè)群組、信息資訊、交流中心、學(xué)習(xí)培訓(xùn)、我的位置、考勤管理、系統(tǒng)設(shè)置、我的中心。
2.2 我的位置模塊
位置模塊也是安保調(diào)度的重要模塊,此模塊搭建百度地圖SDK,點擊進(jìn)入可顯示我的當(dāng)前位置和同時在線的其他安保人員,并具有更隨功能,即移動端位置更新,地圖上的大頭針也隨之改變,大頭針采用頭像和姓名組合簡單明了。同時點擊大頭針可動畫彈出表格菜單具有呼叫、發(fā)送信息和查看軌跡功能。
此模塊具有查看軌跡功能,在啟動軟件的同時已開啟分線程和定時器每三秒獲取當(dāng)前地理位置,并和上次地理位置信息的經(jīng)緯度進(jìn)行比較篩選,如果相差不大則篩除不進(jìn)行上傳,避免不必要的流量浪費和大數(shù)據(jù)量的信息存儲。篩選的操作可以簡易的和上次的經(jīng)緯度比較在去除末兩位的情況下的字符串是否相同。依次比較,但是若第一次數(shù)據(jù)就出現(xiàn)偏移那么后面的數(shù)據(jù)比較都會出現(xiàn)錯誤。所以必須確保第一次上傳的經(jīng)緯度的準(zhǔn)確性,一般開始的位置信息不進(jìn)行上傳,而是在比較是否在合理的范圍內(nèi),再上傳后續(xù)的位置信息。
查看軌跡功能也具有查看他人軌跡信息,但是這是由權(quán)限限制。不同的角色具有不同的權(quán)限,但是本人是可以查看自己的所有歷史軌跡,點擊導(dǎo)航欄右側(cè)按鈕,并選擇對應(yīng)日期,就可以查看,但是由于是數(shù)據(jù)量達(dá)到上千甚至上萬時,CPU對于數(shù)據(jù)處理也是有限的,耗用CPU非常大會卡死主線程,此時就需開辟分線程進(jìn)行繪制軌跡。在采用addOverlay進(jìn)行繪制前同樣對數(shù)據(jù)進(jìn)行篩選,采用百度地圖API提供的空間關(guān)系判斷提供相應(yīng)的接口,判斷點與圓的位置關(guān)系。比較一個點是否在內(nèi)一個點的范圍內(nèi),根據(jù)三秒時間內(nèi)這點與另一點的空間距離是否合理來進(jìn)行偏移點篩選。
2.3 安保對講模塊
音頻數(shù)據(jù)的編碼是在原始數(shù)據(jù)基礎(chǔ)上進(jìn)行編碼,編碼后的大小必須是20字節(jié)才能和安卓客戶端大道互通的效果。通過HTTP請求將壓縮后的音頻數(shù)據(jù)發(fā)送到服務(wù)器。同理通過回調(diào)函數(shù)得到服務(wù)器返回的音頻數(shù)據(jù),同樣設(shè)置和錄音相同的參數(shù)設(shè)置并進(jìn)行解碼,通過隊列源源不斷播放直到結(jié)束。在播放前必須設(shè)置好默認(rèn)播放輸出端,是揚聲器或者是聽筒。本文設(shè)置默認(rèn)是揚聲器播放音頻。在p2p語音電話通信狀態(tài)下開啟傳感器功能。為了減輕長期點亮屏幕引起的電量消耗和屏幕誤觸。使用接近傳感器首先要啟用接近傳感設(shè)置,注冊針對傳感器狀態(tài)發(fā)生變化的通知。當(dāng)遮擋傳感器時就可達(dá)到揚聲器和聽筒進(jìn)行切換。
對于不希望啟動接近傳感器功能的使用者,如果需要進(jìn)行揚聲器和聽筒進(jìn)行切換過程中,則必須通過啟用接近傳感器來進(jìn)行聲音輸出模式的切換,與此同時,則必須注意,如果當(dāng)聲音通過聽筒進(jìn)行播放完畢時,此時仍在聽筒模式輸出,如果此時關(guān)閉傳感器功能,則導(dǎo)致在離開聽筒時,由于傳感器功能已經(jīng)關(guān)閉,應(yīng)用無法再次收到注冊的傳感器變更通知,而此時如果未能將底層的聲音輸出模式切換,則導(dǎo)致相關(guān)的聲音輸出仍從聽筒中輸出,即使引起傳感器反映的障礙已經(jīng)離開傳感器作用范圍,但應(yīng)用中獲取的傳感器狀態(tài)仍未接近狀態(tài),使根據(jù)傳感器狀態(tài)進(jìn)行切換聲音輸出模式操作失效。
3 語音模塊技術(shù)開發(fā)
3.1 錄音模塊的數(shù)據(jù)結(jié)構(gòu)
采用音頻隊列錄音需要三個要素:音頻隊列(Audio queues)、隊列緩沖區(qū)(Audio queue buffers)和回調(diào)函數(shù)(callback functions),音頻隊列既可以是錄制音頻也可以是播放音頻的對象。數(shù)據(jù)類型采用AudioQueueRef來描述,它在AudioToolbox.framework框架中的AudioQueue.h 頭文件中聲明。音頻隊列包含以下數(shù)據(jù)結(jié)構(gòu):音頻隊列緩沖區(qū)數(shù)組(audio queue buffers),數(shù)組中的每個緩沖區(qū)都是用來存儲臨時的音頻數(shù)據(jù)。 緩沖區(qū)隊列(buffer queue ),隊列中包含著audio queue buffers并且將它們有序的排列。最后調(diào)用回調(diào)函數(shù)獲取音頻數(shù)據(jù)解碼后放到隊列中按序播放[2]。
3.2 AudioQueue的工作模式
AudioQueue內(nèi)部存在一套緩沖隊列(Buffer Queue)機制。在啟動AudioQueue之后通過AudioQueueAllocateBuffer生成若干個AudioQueueBufferRef緩存結(jié)構(gòu),這些生成的Buffer可以用來存儲回調(diào)的將要播放的音頻數(shù)據(jù),而且這些Buffer受生成它們的AudioQueue實例對象管理,此時內(nèi)存也已經(jīng)被分配成功,當(dāng)AudioQueue被Dispose時這些Buffer緩沖區(qū)也會隨之被銷毀。
當(dāng)有音頻數(shù)據(jù)需要播放時會被memcpy到AudioQueueBufferRef的mAudioData中(mAudioData所指向的內(nèi)存也已經(jīng)被分配好,之前AudioQueueAllocateBuffer所做的工作),并給mAudioDataByteSize賦值傳入的數(shù)據(jù)大小。然后調(diào)用AudioQueueEnqueueBuffer把存儲的音頻數(shù)據(jù)的Buffer放入到AudioQueue內(nèi)置的Buffer隊列之中。當(dāng)隊列中存在buffer的情況下可以調(diào)用AudioQueueStart,此時AudioQueue就會按照Enqueue順序依次使用隊列中的buffer進(jìn)行播放,每當(dāng)前一個Buffer使用完畢之后數(shù)據(jù)就會從Buffer隊列中被移除并且會觸發(fā)一個回調(diào)來通知使用者,某個AudioQueueBufferRef已經(jīng)使用完畢[3],此時可以繼續(xù)重用這個對象來存儲后續(xù)回調(diào)的音頻數(shù)據(jù)。按此循環(huán)操作音頻數(shù)據(jù)就會被逐個播放直到結(jié)束。
3.3 錄音初始化設(shè)置
錄制音頻隊列是以移動端的麥克風(fēng)作為錄音功能音頻隊列的音頻輸入端,按住錄音按鈕或者p2p通信時輸入端就會不斷地將音頻數(shù)據(jù)傳放置到緩沖隊列中,此時再通過回調(diào)函數(shù)將緩沖塊的數(shù)據(jù)傳出再做的處理,而已被讀取數(shù)據(jù)的緩沖區(qū)就會再次被放到隊列的尾端再次循環(huán)使用,因為音頻隊列具有循環(huán)引用的功效。將音頻原始數(shù)據(jù)進(jìn)行編碼發(fā)送,通過回調(diào)函數(shù)獲取編碼音頻數(shù)據(jù)進(jìn)行播放,便可達(dá)到循環(huán)功效。
緩沖區(qū)的個數(shù)設(shè)置也是至關(guān)重要的,并非越多越好,如果數(shù)量過多則會造成播放延遲,反之有些音頻數(shù)據(jù)可能來不及播放,由于iOS設(shè)備的內(nèi)存容量不多,經(jīng)反復(fù)測試最終設(shè)置為3個緩沖區(qū)較為合適。
在錄音初始化前,必須進(jìn)行相關(guān)參數(shù)設(shè)置,創(chuàng)建好緩沖區(qū)。音頻數(shù)據(jù)流的采樣幀數(shù),本文釆用8000Hz,本文采用單聲道,所以值取1,聲道包含的采樣率的值取16bit[4] 。主要有這三個參數(shù)決定音頻流的采樣,其他參數(shù)可由此計算得來。
3.4 集成speex庫
Speex壓縮庫給語音編碼提供了快速有效幫助,它適用于多種平臺,可以在多個平臺達(dá)到互通的效果。它不僅提供了語音的編解碼功能,而且在還提供了聲音降噪和聲學(xué)回聲消除功能,給語音通信提供了更高的技術(shù)支持。Speex支持多種比特率而且。speex在各個平臺上的運行做的非常好,使用和安卓對應(yīng)版本的speex編解碼庫,就可以很好的在兩平臺互用,iOS移動端可以使用Speex庫,可以在speex官網(wǎng)下載或者在github查找相應(yīng)版本的靜態(tài)庫或framework框架[5]。
3.5 音頻流數(shù)據(jù)編解碼實現(xiàn)
3.5.1 編碼流程
在進(jìn)行對音頻數(shù)據(jù)流進(jìn)行編碼需要采用Speex的API函數(shù)進(jìn)行如下步驟:
1)自定義一個SpeexBits類型的變量bits和一個Speex編碼狀態(tài)的變量enc_state。
2)然后調(diào)用speex_bits_init(&bits)函數(shù)初始化bits。
3)接著調(diào)用speex_encoder_init(&speex_nb_mode)函數(shù)來初始化enc_state。其中speex_nb_mode表示的是窄帶模式。speex_wb_mode表示寬帶模式、speex_uwb_mode表示超寬帶模式。
4)調(diào)用函數(shù)int speex_encoder_ ctl來設(shè)置編碼器參數(shù),state參數(shù)表示編碼器的狀態(tài);request參數(shù)表示需要定義的參數(shù)類型。
5)初始化設(shè)置完畢后,再對每一幀聲音作如下處理:調(diào)用函數(shù)speex_bits_reset(&bits)再次設(shè)定SpeexBits,然后調(diào)用函數(shù)speex_encode(enc_state, input_frame, &bits)[6],參數(shù)bits中即存儲著編碼后的數(shù)據(jù)流,在此處便可以獲取并作處理。
6)若編碼結(jié)束,便可進(jìn)行摧毀。
3.5.2 解碼流程
同理,對從服務(wù)器回調(diào)的已經(jīng)編碼過的音頻數(shù)據(jù)進(jìn)行解碼需要經(jīng)過以下步驟:
1)首先自定義一個SpeexBits類型變量bits和一個Speex編碼狀態(tài)變量enc_state。
2)需調(diào)用speex_bits_init(&bits)來初始化bits。
3)調(diào)用speex_decoder_init (&speex_nb_mode)來初始化enc_state對象。
4)調(diào)用speex_decoder_ctl 函數(shù)來設(shè)定編碼參數(shù)。
5)調(diào)用 speex_decode函數(shù)對bits中的音頻數(shù)據(jù)進(jìn)行解編碼,參數(shù)out中便是保存解碼后的數(shù)據(jù)流,然后進(jìn)行放置到音頻隊列中進(jìn)行播放。
6)最后調(diào)用函數(shù)關(guān)閉或銷毀SpeexBits和解碼器。
4 結(jié)束語
本文主要介紹了關(guān)于整個安保調(diào)度項目的相關(guān)模塊和主要技術(shù)要點分析,安保工作對于社會所產(chǎn)生的價值也是無形的,對于每個都是有利也是無法衡量的。所以此款軟件對于服務(wù)于安保人員,更好地確保社會安全,這也是我們共同的理想。
參考文獻(xiàn):
[1] Matt Drance, Paul Wanen. iOS應(yīng)用開發(fā)攻略[M]. 北京: 人民郵電出版社, 2012.
[2] Paul Deitel. iPhone應(yīng)用程序開發(fā)名家解析[M]. 北京: 電子工業(yè)出版社, 2010.
[3] Aaron Hillegass著. 蘋果開發(fā)之Cocoa編程[M]. 北京: 電子工業(yè)出版社, 2009.
[4] 趙淼. 基于Telematics的iPhone手機客戶端系統(tǒng)的研究及應(yīng)用[D].長春: 吉林大學(xué), 2014.
[5] 張立文, 吳迪, 宋占偉. 基于Speex的嵌入式無線數(shù)字音頻交互系統(tǒng)[J]. 吉林大學(xué)學(xué)報:信息科學(xué)版, 2013, 31(4): 353-358.
[6] 李榮榮, 胡昌奎, 余娟. 基于譜熵的語音端點檢測算法改進(jìn)研究[J]. 武漢理工大學(xué)學(xué)報, 2013, 35(7): 134-139.