葉興 汪彥 肖金琢
摘要:為了提高當(dāng)前高校機(jī)房實(shí)驗(yàn)教學(xué)的信息化管理水平,改善實(shí)驗(yàn)教學(xué)質(zhì)量,設(shè)計(jì)了一個(gè)機(jī)房教學(xué)管理系統(tǒng)。該系統(tǒng)利用C/S結(jié)構(gòu),以Visual Studio 2012作為開發(fā)工具,并使用SQL Server 2010作為數(shù)據(jù)庫(kù)。本系統(tǒng)實(shí)現(xiàn)了基本的機(jī)房實(shí)驗(yàn)教學(xué)管理功能,并采用較為新穎的RTMP協(xié)議配合FFmpeg工具進(jìn)行屏幕共享功能的實(shí)現(xiàn),在保證畫面質(zhì)量的同時(shí),實(shí)驗(yàn)教學(xué)效率有了進(jìn)一步的提高。
關(guān)鍵詞:教學(xué)系統(tǒng);信息化;C/S;屏幕共享; RTMP協(xié)議;FFmpeg
中圖分類號(hào):TP311.5 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2019)04-0091-03
隨著信息時(shí)代的高速發(fā)展,高校教學(xué)思想與教學(xué)平臺(tái)發(fā)生了翻天覆地的變化[1]。越來越多的高校將機(jī)房規(guī)模擴(kuò)大以便適應(yīng)時(shí)代潮流,而在高校教學(xué)活動(dòng)當(dāng)中,機(jī)房實(shí)踐教學(xué)處于突出位置,這使得這種現(xiàn)代化實(shí)驗(yàn)教學(xué)面對(duì)著十分嚴(yán)峻的挑戰(zhàn)。不過囿于人力與資金的關(guān)系,現(xiàn)在許多高校仍然在使用比較傳統(tǒng)的教學(xué)管理方式,這不但使得教學(xué)質(zhì)量堪憂,也造成了較大的資源浪費(fèi)。因此,需要一種方便而實(shí)用的機(jī)房實(shí)驗(yàn)教學(xué)系統(tǒng)來解決當(dāng)前的問題。結(jié)合實(shí)際機(jī)房實(shí)驗(yàn)教學(xué)狀況,我們?cè)O(shè)計(jì)和實(shí)現(xiàn)了一個(gè)機(jī)房教學(xué)系統(tǒng),該系統(tǒng)使用Visual Studio 2012作為開發(fā)工具,使用SQL Server 2010實(shí)現(xiàn)后臺(tái)數(shù)據(jù)庫(kù)。
1 目前背景介紹
當(dāng)前國(guó)內(nèi)外同類的教學(xué)軟件大部分為機(jī)房實(shí)驗(yàn)教學(xué)系統(tǒng)[2-3],大都具有廣播教學(xué)、文件傳輸?shù)裙δ?,但有些系統(tǒng)已經(jīng)不能適應(yīng)如今信息化教學(xué)的潮流和軟硬件環(huán)境的變化,筆者認(rèn)為可以用更高效、更穩(wěn)定的技術(shù)進(jìn)行機(jī)房教學(xué)系統(tǒng)基本功能的改進(jìn)與擴(kuò)展。
2 系統(tǒng)分析
2.1 需求分析
經(jīng)調(diào)研分析,我們了解到現(xiàn)階段高校機(jī)房系統(tǒng)的管理需求主要存在于高效率的屏幕共享、文件傳輸、設(shè)備監(jiān)管與簽到簽退等方面,同時(shí)系統(tǒng)需具有良好的可兼容性、可維護(hù)性。
2.2 可行性分析
文件傳輸與設(shè)備監(jiān)管等需求可以使用傳統(tǒng)的Socket通信技術(shù)來實(shí)現(xiàn),作為授課主要功能的屏幕共享則使用更為穩(wěn)定、高效的RTMP協(xié)議來進(jìn)行實(shí)現(xiàn),而使用數(shù)據(jù)庫(kù)技術(shù)可以進(jìn)行后臺(tái)學(xué)生信息管理,實(shí)現(xiàn)課堂簽到、簽退等功能。這些技術(shù)都是比較成熟和穩(wěn)定的,因此該系統(tǒng)從技術(shù)的角度來看具有可行性。
3 系統(tǒng)設(shè)計(jì)
3.1 系統(tǒng)構(gòu)架設(shè)計(jì)
機(jī)房實(shí)驗(yàn)教學(xué)系統(tǒng)的總體框架結(jié)構(gòu)分為后臺(tái)數(shù)據(jù)庫(kù)、分發(fā)服務(wù)器、教師端軟件和學(xué)生端軟件四部分。后臺(tái)網(wǎng)絡(luò)數(shù)據(jù)庫(kù)采用SQL Server 2010與分發(fā)服務(wù)器都運(yùn)行在Windows操作系統(tǒng)上。教師端軟件運(yùn)行在教師機(jī)上,學(xué)生端軟件則運(yùn)行在學(xué)生機(jī)上,教師端軟件與學(xué)生端軟件之間、運(yùn)行于不同學(xué)生機(jī)的學(xué)生端軟件之間通過Socket進(jìn)行網(wǎng)絡(luò)通信。教師端和學(xué)生端均采用EF(Entity Framework)框架訪問后臺(tái)數(shù)據(jù)庫(kù),EF框架在3.3節(jié)闡述。系統(tǒng)整體架構(gòu)如圖1所示。
3.2 系統(tǒng)功能模塊設(shè)計(jì)
如構(gòu)架圖所示,機(jī)房教學(xué)系統(tǒng)分為后臺(tái)數(shù)據(jù)庫(kù)、分發(fā)服務(wù)器、教師端軟件、學(xué)生端軟件四部分。教師可以通過教師端軟件廣播屏幕功能向?qū)W生機(jī)廣播自己的屏幕,共享文件功能對(duì)文件進(jìn)行發(fā)送,在線討論功能與學(xué)生進(jìn)行交流,并可以設(shè)置是否允許討論,還可以通過遠(yuǎn)程控制對(duì)學(xué)生端進(jìn)行遠(yuǎn)程控制,如關(guān)閉學(xué)生機(jī)上的某個(gè)程序,遠(yuǎn)程關(guān)機(jī)等等。學(xué)生通過學(xué)生端軟件可以進(jìn)行簽到,簽退,進(jìn)行討論,接收教師機(jī)共享文件,觀看教師機(jī)廣播屏幕等功能。系統(tǒng)功能結(jié)構(gòu)圖如圖2所示。
3.3 數(shù)據(jù)庫(kù)設(shè)計(jì)
機(jī)房教學(xué)系統(tǒng)數(shù)據(jù)庫(kù)除了使用功能強(qiáng)大的SQL Server 2010構(gòu)建外,還使用了微軟的EF(Entity Framework)框架。EF框架是ADO.NET (ActiveX Data Objects 活動(dòng)數(shù)據(jù)對(duì)象)中的一套支持開發(fā)面向數(shù)據(jù)的軟件應(yīng)用程序的技術(shù),是微軟的一個(gè)ORM(Object Relational Mapping對(duì)象關(guān)系映射)框架。此框架最大的作用就是夠使用特定于域的對(duì)象來處理數(shù)據(jù),而無(wú)需關(guān)注存儲(chǔ)在此數(shù)據(jù)的基礎(chǔ)數(shù)據(jù)庫(kù)表和列,簡(jiǎn)而言之就是使用更少的代碼創(chuàng)建和維護(hù)面向數(shù)據(jù)的應(yīng)用程序,使得訪問數(shù)據(jù)庫(kù)像使用一個(gè)class類一般簡(jiǎn)單。
合理利用數(shù)據(jù)庫(kù)可以大量減少日常工作任務(wù),結(jié)合實(shí)際情況分析,本系統(tǒng)數(shù)據(jù)庫(kù)共設(shè)計(jì)四張表,分別是教師信息表、學(xué)生信息表、實(shí)驗(yàn)記錄表、課堂記錄表。
1)學(xué)生信息表用于學(xué)生具體信息的記錄,包括學(xué)生學(xué)號(hào)、姓名、班號(hào)、性別、登錄密碼和院系名稱。
2)教師信息表用于記錄教師的具體信息,包括教師工號(hào)、姓名、性別、登錄密碼和院系名稱。
3)課堂記錄表是記錄本次課堂的詳細(xì)信息,包括機(jī)房編號(hào)、授課時(shí)間、教師工號(hào)、班號(hào)、到課人數(shù)、缺勤人數(shù)、缺勤學(xué)號(hào)。
4)學(xué)生實(shí)驗(yàn)記錄表是記錄具體每次上機(jī)實(shí)驗(yàn)的信息,包括學(xué)號(hào)、機(jī)房編號(hào)、實(shí)驗(yàn)編號(hào)、教師工號(hào)、班號(hào)、實(shí)驗(yàn)分?jǐn)?shù)。
4 系統(tǒng)實(shí)現(xiàn)的關(guān)鍵技術(shù)
4.1 RTMP協(xié)議簡(jiǎn)介
RTMP (Real Time Messaging Protocol實(shí)時(shí)消息傳輸協(xié)議) 是專門用來傳輸音視頻數(shù)據(jù)的流媒體。它基于TCP/IP協(xié)議,是一個(gè)協(xié)議族,除了基本協(xié)議之外還包含RTMPT/RTMPS/RTMPE等多種變種。它最初由Macromedia公司創(chuàng)建, 后來歸Adobe公司所有, 是一種應(yīng)用非常廣泛的通信協(xié)議,其研發(fā)目的是為了更好地完成實(shí)時(shí)的數(shù)據(jù)通信任務(wù),實(shí)現(xiàn)音頻視頻文件的傳遞接收。但隨著流媒體技術(shù)的發(fā)展應(yīng)用,RTMP協(xié)議的使用范圍也在不斷擴(kuò)大,多個(gè)在音視頻傳播領(lǐng)域有廣泛影響力的,類似于Flash+AIR(Adobe Integrated Runtime )軟件中,RTMP協(xié)議都可以完美支持[4]。
4.2 利用RTMP協(xié)議實(shí)現(xiàn)屏幕共享
所謂屏幕共享,是指在網(wǎng)絡(luò)環(huán)境中,遠(yuǎn)程客戶端可以在較短的時(shí)間延遲內(nèi)重現(xiàn)主機(jī)屏幕界面的顯示內(nèi)容,并提供給遠(yuǎn)程用戶一種如坐在主機(jī)旁一樣的虛擬界面環(huán)境。屏幕共享是一種重要的數(shù)據(jù)共享應(yīng)用,已在視頻會(huì)議、遠(yuǎn)程教學(xué)、遠(yuǎn)程監(jiān)控和股票分析系統(tǒng)等領(lǐng)域中取得到了良好的應(yīng)用。
屏幕共享最開始源于蘋果公司所提出GUI (Graphic User Interface圖形用戶界面),后因?yàn)槠涑杀镜?、靈活和便于維護(hù)等優(yōu)越性得以迅速發(fā)展[5-6]。在本系統(tǒng)中,整個(gè)屏幕共享功能的簡(jiǎn)要流程如圖3所示。
其中本系統(tǒng)的分發(fā)服務(wù)器部分,利用SRS(Simple RTMP Server)搭建RTMP服務(wù)器,在配置方面較為簡(jiǎn)單方便,利于后面使用FFmpeg工具進(jìn)行推流與拉流。FFmpeg是一套非常強(qiáng)大的視頻、音頻開源轉(zhuǎn)換程序,能將視頻、音頻轉(zhuǎn)換成流,F(xiàn)Fmpeg內(nèi)置的gdigrab就可以進(jìn)行基于Win32 GDI(Graphics Device Interface圖形設(shè)備接口)的屏幕捕獲,只要一條ffmpeg -f gdigrab -i desktop指令即可,在采集教師端的桌面畫面后進(jìn)行壓縮轉(zhuǎn)碼操作,將其轉(zhuǎn)換成流。至此之后就是進(jìn)行推流的準(zhǔn)備,將流封裝成RTMP格式,且在傳輸時(shí)需要拆分成一個(gè)個(gè)的Chunk塊。RTMP流的傳輸不是用Message劃分的,而是用Chunk塊,接下來使用FFmpeg即可進(jìn)行推流,把利用RTMP協(xié)議封裝好后的RTMP流傳輸?shù)椒?wù)器上。其具體操作可概括為初始化、握手、建立連接和建立流等環(huán)節(jié),此處以本機(jī)服務(wù)器地址為例,F(xiàn)Fmpeg工具的推流的啟動(dòng)指令為ffmpeg -f gdigrab -i desktop–b4M –r 10 –preset ultrafast –turezerlatency–fflvrtmp:localhost:1935/live/room,在學(xué)生端同樣利用FFmpeg進(jìn)行拉流,此時(shí)也需要進(jìn)行轉(zhuǎn)碼操作。值得一提的是使用FFmpeg的C# BindingFFmpeg.AutoGen直接用指針來操縱流,所造成的延遲較低,大概在1秒左右。在整個(gè)屏幕共享過程中RTMP流的轉(zhuǎn)碼是重中之重,視頻文件的輸出轉(zhuǎn)碼過程如圖:
所謂轉(zhuǎn)碼即為視頻信號(hào)從一種格式轉(zhuǎn)換成另一種格式。這里即為視頻流與RTMP流之間的相互轉(zhuǎn)換,學(xué)生端只有正確地將RTMP流進(jìn)行轉(zhuǎn)碼才能觀看到教師端的畫面。
學(xué)生端轉(zhuǎn)碼的部分核心代碼如下:
_pFormatContext=ffmpeg.avformat_alloc_context();//創(chuàng)建一個(gè)內(nèi)存
varpFormatContext = _pFormatContext;
//寫入
ffmpeg.avformat_open_input(&pFormatContext, url, null, null).ThrowExceptionIfError();
ffmpeg.avformat_find_stream_info(_pFormatContext, null).ThrowExceptionIfError();
//查找第一個(gè)視頻流
AVStream* pStream = null;
for(vari = 0;i< _pFormatContext->nb_streams; i++)
//判斷是否為視頻流
if(_pFormatContext->streams[i]->codec->codec_type == AVMediaType.AVMEDIA_TYPE_VIDEO)
{
pStream = _pFormatContext->streams[i];
break;
}
//沒有找到視頻流就拋出異常
If(pStream == null) throw new InvalidOperationException("Could not found video stream.");
//設(shè)定流
_streamIndex = pStream->index;
_pCodecContext = pStream->codec;
//查找編碼和解碼
varcodecId = _pCodecContext->codec_id;
varpCodec=ffmpeg.avcodec_find_decoder(codecId);
if (pCodec==null)throw new
InvalidOperationException("Unsupported codec.");//不支持編碼類型
//解碼
ffmpeg.avcodec_open2(_pCodecContext, pCodec, null).ThrowExceptionIfError();
//設(shè)置解碼名
CodecName=ffmpeg.avcodec_get_name(codecId);
//設(shè)置幀的大小
FrameSize=new Size(_pCodecContext->width, _pCodecContext->height);
//設(shè)置像素格式
PixelFormat = _pCodecContext->pix_fmt;
//創(chuàng)建視頻
_pPacket = ffmpeg.av_packet_alloc();
_pFrame = ffmpeg.av_frame_alloc();
5 結(jié)束語(yǔ)
在計(jì)算機(jī)技術(shù)普及的時(shí)代,實(shí)驗(yàn)教學(xué)系統(tǒng)遇到更多的挑戰(zhàn)是必然的。想要有效提升高校機(jī)房教學(xué)管理水平,需要對(duì)網(wǎng)絡(luò)通信、數(shù)據(jù)庫(kù)和機(jī)房教學(xué)等方面有著比較深刻的認(rèn)知,了解機(jī)房具體管理運(yùn)作和系統(tǒng)功能塊上的優(yōu)缺點(diǎn),并結(jié)合日常機(jī)房實(shí)踐管理案例,針對(duì)性地將系統(tǒng)進(jìn)行修改與擴(kuò)展。本文所介紹的系統(tǒng),提高了實(shí)驗(yàn)課堂教學(xué)質(zhì)量,簡(jiǎn)化了日常教學(xué)工作, 也使機(jī)房實(shí)驗(yàn)教學(xué)工作更加井然有序,這對(duì)當(dāng)前高校信息化教學(xué)有著重要的現(xiàn)實(shí)意義和推動(dòng)作用。
參考文獻(xiàn):
[1] 邱兆新.基于機(jī)房教學(xué)模式下大學(xué)計(jì)算機(jī)基礎(chǔ)教學(xué)改革[J].廣西民族師范學(xué)院學(xué)報(bào),2016,33(3):38-40,43.
[2] 孫濤,焦媛.提升機(jī)房教學(xué)效果的措施分析[J].黑龍江教育:理論與實(shí)踐,2016(Z1):83-84.
[3] 汪彥,劉智勇,龍振球.機(jī)房實(shí)驗(yàn)教學(xué)系統(tǒng)的優(yōu)化研究與實(shí)現(xiàn)[J].計(jì)算機(jī)時(shí)代,2017(2):49-51,54.
[4] 黃波,張先輝.基于RTMP協(xié)議的IPTV監(jiān)測(cè)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].廣播電視信息,2018(7) .
[5] 張宗飛.VB中屏幕共享系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2008(4):83-86,111.
[6] 汪彥,黃雪華,涂立.一種改進(jìn)的應(yīng)用于機(jī)房教學(xué)的屏幕共享方案[J].計(jì)算機(jī)與現(xiàn)代化,2011(9):82-85.
【通聯(lián)編輯:朱寶貴】