黃廣發(fā)+吳先球
摘 要: 為了讓實(shí)驗(yàn)者在移動(dòng)終端上完成遠(yuǎn)程實(shí)驗(yàn)的異地操作,設(shè)計(jì)一種基于Android平臺(tái)的遠(yuǎn)程實(shí)驗(yàn)客戶端。通過對(duì)開源播放器VLC進(jìn)行二次開發(fā),使用Socket通信傳輸跨平臺(tái)控制指令,利用HTML5中的canvas標(biāo)簽繪畫波形圖,實(shí)現(xiàn)客戶端進(jìn)行遠(yuǎn)程實(shí)驗(yàn)的視頻監(jiān)控、遠(yuǎn)程控制實(shí)驗(yàn)儀器和數(shù)據(jù)處理等功能。以單擺法測(cè)重力加速度實(shí)驗(yàn)進(jìn)行效果驗(yàn)證,實(shí)測(cè)結(jié)果表明,客戶端具有穩(wěn)定可靠、實(shí)驗(yàn)數(shù)據(jù)處理精度高、人機(jī)交互性好等優(yōu)點(diǎn)。
關(guān)鍵詞: 遠(yuǎn)程實(shí)驗(yàn); Android; 客戶端; HTML5
中圖分類號(hào): TN911.2?34; TP311.52 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2015)14?0089?03
0 引 言
在當(dāng)今信息技術(shù)高速發(fā)展的時(shí)代,學(xué)習(xí)的自主化、智能化和終身化使得遠(yuǎn)程教育必須要與時(shí)俱進(jìn),就是要運(yùn)用信息技術(shù)改善遠(yuǎn)程教學(xué)系統(tǒng)以滿足人們的迫切需求。遠(yuǎn)程實(shí)驗(yàn)[1]是通過互聯(lián)網(wǎng)遠(yuǎn)程操作實(shí)驗(yàn)儀器,在異地完成真實(shí)的實(shí)驗(yàn)過程。遠(yuǎn)程實(shí)驗(yàn)不受時(shí)空限制,特別是隨著平板電腦、智能手機(jī)等移動(dòng)終端的普及,Android系統(tǒng)占據(jù)了主流,只要連接了Internet,就可以根據(jù)實(shí)驗(yàn)者的水平和需要,隨時(shí)隨地使用客戶端去選做各種實(shí)驗(yàn),這種移動(dòng)學(xué)習(xí)環(huán)境下的實(shí)驗(yàn)教學(xué)模式增加了教學(xué)的靈活性,具有廣泛的應(yīng)用前景。
為了滿足移動(dòng)學(xué)習(xí)的需求,本文結(jié)合遠(yuǎn)程控制實(shí)驗(yàn)的系統(tǒng)特點(diǎn),設(shè)計(jì)了一種基于Android的客戶端,實(shí)現(xiàn)了遠(yuǎn)程控制實(shí)驗(yàn)的移動(dòng)性操作。
1 系統(tǒng)硬件及其工作原理
遠(yuǎn)程實(shí)驗(yàn)系統(tǒng)的硬件結(jié)構(gòu)如圖1所示,服務(wù)器通過串口連接控制模塊,控制模塊連接實(shí)驗(yàn)儀器,通過執(zhí)行服務(wù)器傳送過來的指令控制實(shí)驗(yàn)儀器,并采集實(shí)驗(yàn)數(shù)據(jù)。攝像機(jī)捕獲現(xiàn)場(chǎng)儀器的運(yùn)行情況通過USB接口反饋給服務(wù)器,服務(wù)器再通過網(wǎng)絡(luò)及時(shí)反饋給遠(yuǎn)程的操作者。
控制模塊主要由主控單片機(jī)和相關(guān)外設(shè)組成,服務(wù)器上使用LabVIEW軟件與控制模塊進(jìn)行通信,使用VLC media player進(jìn)行流媒體數(shù)據(jù)的編碼和傳輸,使用Tomcat進(jìn)行搭建Web應(yīng)用服務(wù)器,響應(yīng)HTML頁面的請(qǐng)求訪問,提供了實(shí)驗(yàn)數(shù)據(jù)處理功能。
2 客戶端設(shè)計(jì)
客戶端是遠(yuǎn)程實(shí)驗(yàn)系統(tǒng)的一部分,實(shí)驗(yàn)者直接在客戶端上進(jìn)行遠(yuǎn)程實(shí)驗(yàn)的操作,具有實(shí)時(shí)觀察實(shí)驗(yàn)現(xiàn)象、實(shí)時(shí)遠(yuǎn)程控制實(shí)驗(yàn)儀器、實(shí)驗(yàn)數(shù)據(jù)接收與處理等功能。
圖1 系統(tǒng)硬件結(jié)構(gòu)圖
2.1 Android應(yīng)用程序開發(fā)環(huán)境
開發(fā)環(huán)境[2]由JDK(Java開發(fā)工具包)、Eclipse(開發(fā)Java程序的軟件工具)、Android SDK(Android專屬的軟件開發(fā)工具包)、ADT(開發(fā)Android應(yīng)用程序的插件)、NDK(原生開發(fā)工具包)5部分組成,通過安裝和進(jìn)行相應(yīng)的配置即可完成開發(fā)環(huán)境的搭建。
2.2 功能流程
遠(yuǎn)程實(shí)驗(yàn)的實(shí)驗(yàn)儀器是實(shí)際設(shè)備,遠(yuǎn)程用戶使用客戶端通過網(wǎng)絡(luò)對(duì)其進(jìn)行操作,控制實(shí)驗(yàn)設(shè)備的運(yùn)行??蛻舳说恼w功能如圖2所示,其中觀察實(shí)驗(yàn)現(xiàn)象部分是先要接入流媒體服務(wù)器,再把通過HTTP協(xié)議傳輸過來的H.264視頻流進(jìn)行解碼[3],最后通過控件SurfaceView播放出來;控制實(shí)驗(yàn)儀器部分主要是Socket通信,在主線程下申請(qǐng)子線程進(jìn)行處理,具體采用Handler消息傳遞機(jī)制;數(shù)據(jù)處理部分是下載服務(wù)器端采集為txt格式的數(shù)據(jù)文件,讀取后在HTML5上使用canvas繪制波形圖,這種可視化的數(shù)據(jù)分析可以讓實(shí)驗(yàn)者讀取數(shù)據(jù)進(jìn)行公式運(yùn)算。
圖2 功能流程圖
2.3 關(guān)鍵技術(shù)
2.3.1 JNI接口
將開源播放器VLC[4]應(yīng)用到Android上,需要通過將VLC的源代碼編譯成庫文件,再通過Android提供的JNI接口調(diào)用,因?yàn)閂LC的代碼完全由C/C++編寫,在需要調(diào)用第三方C/C++庫文件時(shí),使用JNI接口的應(yīng)用[5]可以讓開發(fā)者實(shí)現(xiàn)一些用Java語言難以實(shí)現(xiàn)的功能。
在上層通過以下代碼載入已經(jīng)編譯好的libvlcjni.so庫文件:
{
System.loadLibrary(“vlcjni”);
}
LibVLC類通過聲明庫中的本地函數(shù)就可以在上層應(yīng)用程序調(diào)用。
在主類MainActivity中,調(diào)用VLC接收服務(wù)器端發(fā)送的視頻流,經(jīng)過程序處理后進(jìn)行播放,關(guān)鍵代碼如下:
private LibVLC mLibVLC = null;
mLibVLC = Util.getLibVlcInstance();
if (mLibVLC ! = null)
{
String pathUri = "http://222.200.152.122:8080/x";
mLibVLC.playMyMRL(pathUri);
}
2.3.2 多線程應(yīng)用
采用多線程技術(shù)可以避免UI線程的阻塞,其中Handler Message[6]方法最為常用。具體操作是在新啟動(dòng)的線程中發(fā)送消息,在主線程中獲取、處理消息,通過回調(diào)的方式,主線程能夠處理先啟動(dòng)線程所發(fā)送的消息。
在觀察實(shí)驗(yàn)現(xiàn)象的同時(shí),要對(duì)實(shí)驗(yàn)儀器進(jìn)行控制,這就需要使用多線程來實(shí)現(xiàn),主線程是視頻播放,實(shí)驗(yàn)儀器控制就會(huì)開啟新的子線程來執(zhí)行,簡(jiǎn)單的代碼實(shí)現(xiàn)如下:
在主線程中定義handler:
private Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch(msg.what){
case 1:
……
break;
} } }
在另一線程中執(zhí)行任務(wù):
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
控制實(shí)驗(yàn)儀器通過Socket通信[7]實(shí)現(xiàn),包括3個(gè)步驟:建立連接、發(fā)送數(shù)據(jù)、關(guān)閉套接字。核心代碼如下:
private Socket client = null;
client = new Socket("222.200.152.122",8888);
PrintWriter out = new
PrintWriter(client.getOutputStream());
out.println("#");
out.flush();
client.close();
整個(gè)Socket通信過程需要采用try…catch機(jī)制。
2.3.3 HTML5
var c = document.getElementById("myCanvas");
//獲取要操作的canvas的ID
//操作canvas的代碼…
在Android WebView控件中使用JavaScript,必須在WebView中使能JavaScript,還要解決亂碼問題,代碼如下:
webView.getSettings().setDefaultTextEncodingName("gbk");
webView.getSettings().setJavaScriptEnabled(true);
3 應(yīng)用實(shí)例
使用該客戶端進(jìn)行操作遠(yuǎn)程控制實(shí)驗(yàn),選用單擺法測(cè)重力加速度實(shí)驗(yàn)[10],因?yàn)榇藢?shí)驗(yàn)需要實(shí)時(shí)觀察實(shí)驗(yàn)現(xiàn)象、遠(yuǎn)程控制電機(jī)的開關(guān)、采集傳感器數(shù)據(jù)進(jìn)行運(yùn)算等內(nèi)容,最后通過實(shí)驗(yàn)的完成進(jìn)而算出重力加速度。通過讀圖,輸入t1=2.79 s,t2=0.83 s,然后客戶端會(huì)自動(dòng)計(jì)算出重力加速度,計(jì)算原理是由周期T=t2-t1,T=2π[Lg],得到重力加速度g=[4π2LT2],客戶端的數(shù)據(jù)處理界面如圖3所示。
4 結(jié) 語
本文設(shè)計(jì)的客戶端,結(jié)合基于C/S模式的遠(yuǎn)程控制實(shí)驗(yàn)系統(tǒng),實(shí)現(xiàn)了在客戶端上通過互聯(lián)網(wǎng)完成遠(yuǎn)程實(shí)驗(yàn)的操作過程。實(shí)時(shí)觀察實(shí)驗(yàn)現(xiàn)象、低延時(shí)控制實(shí)驗(yàn)設(shè)備、準(zhǔn)確處理實(shí)驗(yàn)數(shù)據(jù)等功能增強(qiáng)了遠(yuǎn)程實(shí)驗(yàn)的真實(shí)感,有助于更好地掌握實(shí)驗(yàn)原理。本客戶端除了應(yīng)用到以上實(shí)驗(yàn)外,還可以應(yīng)用到其他物理實(shí)驗(yàn)的教學(xué)當(dāng)中?;贏ndroid平臺(tái)的遠(yuǎn)程實(shí)驗(yàn)客戶端突破了傳統(tǒng)實(shí)驗(yàn)的時(shí)空限制,提高了實(shí)驗(yàn)設(shè)備的利用率,最大限度地共享實(shí)驗(yàn)教學(xué)資源。
圖3 數(shù)據(jù)處理界面圖
參考文獻(xiàn)
[1] 吳先球,劉朝輝,葉穗紅,等.網(wǎng)絡(luò)環(huán)境下遠(yuǎn)程實(shí)驗(yàn)的技術(shù)探討[J].實(shí)驗(yàn)技術(shù)與管理,2008,25(6):30?33.
[2] 公磊,周聰.基于Android的移動(dòng)終端應(yīng)用程序開發(fā)與研究[J].計(jì)算機(jī)與現(xiàn)代化,2008(8):85?89.
[3] 劉龍飛,章堅(jiān)武.基于H.264的Web視頻監(jiān)控客戶端設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2011,34(19):27?30.
[4] 李宗辰,朱秀昌.基于VLC的Android多路視頻監(jiān)控系統(tǒng)[J].現(xiàn)代電子技術(shù),2013,36(24):63?66.
[5] 楊豐盛.Android應(yīng)用開發(fā)揭秘[M].北京:機(jī)械出版社,2010.
[6] 閆偉,葉建栲.多線程技術(shù)在Android手機(jī)開發(fā)中的應(yīng)用[J].信息通信,2012(1):46?47.
[7] 孫劍,董超,夏繼媛,等.基于Android的Socket(TCP/IP)在LED燈光控制系統(tǒng)中的應(yīng)用[J].深圳職業(yè)技術(shù)學(xué)院學(xué)報(bào),2012(5):19?23.
[8] 龐程,崔宣,粟潘,等.基于Android平臺(tái)HTML5的研究與實(shí)現(xiàn)[J].機(jī)械管理開發(fā),2012(6):136?137.
[9] 佚名.HTML
[10] 張冠芬.單擺智能化測(cè)量重力加速度實(shí)驗(yàn)的研究[J].菏澤學(xué)院學(xué)報(bào),2012,34(2):50?55.