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