劉三滿
(山西警官高等??茖W(xué)校,山西太原030021)
把流媒體技術(shù)應(yīng)用于教育上,構(gòu)建網(wǎng)絡(luò)環(huán)境下的網(wǎng)絡(luò)學(xué)校、網(wǎng)上課堂、在線答疑等新的教學(xué)模式,正成為21世紀(jì)教育改革發(fā)展的新趨勢(shì)[1]。在流媒體技術(shù)應(yīng)用中,流媒體直播服務(wù)器系統(tǒng)功能的設(shè)計(jì)與實(shí)現(xiàn),是關(guān)鍵。
當(dāng)今世界,知識(shí)經(jīng)濟(jì)已見(jiàn)端倪,通過(guò)計(jì)算機(jī)、網(wǎng)絡(luò)進(jìn)行互動(dòng)式教學(xué)成為時(shí)尚。在歐洲和美國(guó),流媒體技術(shù)已成為教育變革的推動(dòng)力。如:英國(guó)南部地區(qū)Sussex Virtual學(xué)院聯(lián)合16家再教育機(jī)構(gòu)和學(xué)院,組成集團(tuán)。集團(tuán)內(nèi)部服務(wù)器相連,通過(guò)校際網(wǎng)絡(luò)共享教學(xué)資源。集團(tuán)外部與企業(yè)個(gè)人電腦終端和ISDN電話線相連,通過(guò)在線視聽(tīng)會(huì)議網(wǎng)絡(luò)為當(dāng)?shù)氐闹行⌒推髽I(yè)提供IT以及商業(yè)方面的培訓(xùn)。
現(xiàn)在各高校建設(shè)網(wǎng)絡(luò)教學(xué)流媒體平臺(tái)存在的主要問(wèn)題是:需要將流媒體技術(shù)與本校特有的教育資源相結(jié)合,設(shè)計(jì)出一套兼顧教育、教學(xué)、信息發(fā)布的多媒體直播服務(wù)系統(tǒng)。技術(shù)要點(diǎn)包括:基于MPEG4IP項(xiàng)目進(jìn)行二次開發(fā),實(shí)現(xiàn)符合MPEG4標(biāo)準(zhǔn)的音視頻數(shù)據(jù)。實(shí)現(xiàn)不同帶寬用戶對(duì)視頻質(zhì)量的需求。基于SDL技術(shù)實(shí)現(xiàn)在Linux平臺(tái)顯示播放?;赗TP/RTSP協(xié)議實(shí)現(xiàn)音視頻數(shù)據(jù)的傳輸。
直播服務(wù)器旨在提供一種立體的、視音頻等多種媒體相整合的、可交互的、具有多種體驗(yàn)的基于超媒體、超鏈接的教學(xué)形式。這種教學(xué)形式有利于教師之間業(yè)務(wù)的相互學(xué)習(xí),可有效提高學(xué)生多種技能的培訓(xùn)效果,增進(jìn)與其他學(xué)校之間的文化、活動(dòng)交流。直播服務(wù)器應(yīng)該主要提供以下的功能:系統(tǒng)的應(yīng)用環(huán)境是校園網(wǎng),采用C/S模式通過(guò)LAN接入。管理員應(yīng)該能夠根據(jù)學(xué)校的安排對(duì)教師的授課和學(xué)校的各項(xiàng)活動(dòng)進(jìn)行視頻的采集和編碼。教師在教學(xué)時(shí),能夠方便地引用直播服務(wù)器上的視頻資源進(jìn)行演示;存儲(chǔ)采集到的教師授課或?qū)W?;顒?dòng)的視頻文件,作為校園網(wǎng)資源;響應(yīng)來(lái)自各教研室教師的直播請(qǐng)求,使各個(gè)教研室都能在網(wǎng)上收看教師授課和學(xué)校活動(dòng)的直播情況[2]。師生在下課后可以對(duì)校園網(wǎng)資源進(jìn)行點(diǎn)播。
流媒體直播服務(wù)器系統(tǒng)的信息處理流程為:開啟管理員界面,根據(jù)對(duì)音視頻參數(shù)的設(shè)置開始配置音、視頻參數(shù),然后等待管理員命令,接收到管理員的命令后便開始采集、編碼教師授課或?qū)W?;顒?dòng)的視頻數(shù)據(jù)。若收到教研室的直播請(qǐng)求,則開啟直播服務(wù),為教研室發(fā)送音、視頻數(shù)據(jù)。若學(xué)校要求對(duì)數(shù)據(jù)進(jìn)行備份,則管理員可以設(shè)置存儲(chǔ)文件,服務(wù)器開始生成.mp4格式的文件。當(dāng)視頻直播需要結(jié)束時(shí),由管理員中止服務(wù),退出主界面。
針對(duì)流媒體直播服務(wù)器的功能需求,對(duì)系統(tǒng)進(jìn)行如下設(shè)計(jì):音、視頻部分,網(wǎng)絡(luò)傳輸部分,管理員GUI部分,基礎(chǔ)組件部分。
音、視頻部分設(shè)計(jì)主要的功能為:采集音、視頻數(shù)據(jù),并對(duì)音、視頻數(shù)據(jù)進(jìn)行編碼。
網(wǎng)絡(luò)傳輸部分的設(shè)計(jì)基于RTSP實(shí)時(shí)流協(xié)議。作為一個(gè)應(yīng)用層協(xié)議,RTSP可提供一個(gè)可供擴(kuò)展的框架,控制具有實(shí)時(shí)特性的數(shù)據(jù)發(fā)送,提供播放、暫停、快進(jìn)等操作,負(fù)責(zé)定義具體的控制消息、操作方法、狀態(tài)碼等,描述與RTP間的交互操作,實(shí)現(xiàn)實(shí)時(shí)流媒體數(shù)據(jù)的受控和點(diǎn)播。
管理員GUI部分設(shè)計(jì)主要包括:管理員GUI和流控制兩個(gè)部分,實(shí)現(xiàn)生成系統(tǒng)運(yùn)行的管理員界面和子對(duì)話框界面,監(jiān)聽(tīng)客戶端的連接請(qǐng)求。
基礎(chǔ)組件部分的設(shè)計(jì)主要完成對(duì)音、視頻參數(shù)的設(shè)置,保存.mp4文件,創(chuàng)建線程和出錯(cuò)信息處理等。
流媒體直播服務(wù)器系統(tǒng)具有四大功能:音視頻采集、編碼功能,網(wǎng)絡(luò)傳輸功能(包括直播服務(wù)),管理控制服務(wù)器功能。
流媒體直播服務(wù)器開啟管理員界面后,根據(jù)GUI的設(shè)置開始配置音、視頻參數(shù),系統(tǒng)開啟。然后等待客戶端連接。若收到客戶端的請(qǐng)求直播服務(wù),則啟動(dòng)直播服務(wù),首先經(jīng)過(guò)音視頻采集、編碼數(shù)據(jù),為每一個(gè)連接建立相應(yīng)的流控線程,然后通過(guò)RTP/RTSP協(xié)議進(jìn)行網(wǎng)絡(luò)傳輸,為客戶端發(fā)送數(shù)據(jù)。若管理員設(shè)置服務(wù)器為多播方式,則系統(tǒng)提供的服務(wù)切換為多播狀態(tài)[3]。若管理員設(shè)置存儲(chǔ)文件,存放未編碼的音視頻文件或者已經(jīng)編碼的音視頻文件,則服務(wù)器開始生成擴(kuò)展名是mp4格式的文件。當(dāng)點(diǎn)擊“退出”按鈕時(shí),則中止服務(wù),退出主界面。
初始化函數(shù)描述:
初始化函數(shù)描述:
音視頻幀接口函數(shù)描述:
void AddReference(void)m_refcnt自加1
void RemoveReference(void)m_refcnt自減1
void operator delete(void* p)對(duì) CMediaFrame中的 m_refcnt變量減1,
如果m_refcnt變?yōu)榱?,則釋放CMediaFrame中的m_pData和m_pMutex,同時(shí)釋放p指針。
網(wǎng)絡(luò)傳輸模塊主要函數(shù)描述:
static u_int32_t GetRandomMcastAddress(void)得到隨機(jī)的多播地址
static u_int16_t GetRandomPortBlock(void)產(chǎn)生大于2000的四個(gè)隨機(jī)端口號(hào)
u_int32_t AudioTimestampToRtp(Timestamp t)把音頻時(shí)間戳轉(zhuǎn)換成RTP時(shí)間戳
u_int32_t VideoTimestampToRtp(Timestamp t)把視頻時(shí)間戳轉(zhuǎn)換成RTP時(shí)間戳
u_int64_t TimestampToNtp(Timestamp t)把時(shí)間戳轉(zhuǎn)化為NTP格式
void CRtpTransmitter::DoStartTransmit()初始化音頻及視頻RTP會(huì)話,開始RTP傳輸
更為轟動(dòng)的是,原騰訊公司總裁助理劉春寧在負(fù)責(zé)騰訊視頻版權(quán)采購(gòu)時(shí)期,涉嫌商業(yè)賄賂被抓,當(dāng)時(shí),他已經(jīng)跳槽到阿里巴巴負(fù)責(zé)文娛業(yè)務(wù)。
void CRtpTransmitter::DoSendFrame(CMediaFrame*pFrame)判斷媒體幀的類型,用RTP發(fā)送數(shù)據(jù),同時(shí)設(shè)定是否需要音視頻同步,發(fā)送的數(shù)據(jù)必須是已經(jīng)編碼過(guò)的數(shù)據(jù)。
本模塊由CMediaFlow類實(shí)現(xiàn),作為CAVLiveMediaFlow的父類,它提供了流媒體啟動(dòng),流媒體結(jié)束,設(shè)置流媒體的參數(shù),以及獲得流媒體當(dāng)前狀態(tài)的函數(shù)接口。
主要函數(shù)描述:
如果不是詢問(wèn)媒體流是否開始,則返回false;如果是,則valueName=FLOW_STATUS_STARTED,則返回 true,同時(shí)返回開始狀態(tài)
void CAVLiveMediaFlow::Start(void)開始流媒體
設(shè)置音視頻設(shè)備的輸入,產(chǎn)生新的音視頻源,設(shè)置config,啟動(dòng)ThreadMain()等待消息,開始流媒體。
void CAVLiveMediaFlow::AddSink(CMediaSink*pSink)往媒體源中的接收器隊(duì)列中添加接收器pSink
void CAVLiveMediaFlow::RemoveSink(CMediaSink*pSink)從媒體源的接收器隊(duì)列中刪除接收器pSink
void CAVLiveMediaFlow::StartVideoPreview(void)往視頻源的接收器隊(duì)列中添加回顯接收器,并且啟動(dòng)視頻回顯
void CAVLiveMediaFlow::SetAudioOutput(bool mute)屏蔽音頻
void CAVLiveMediaFlow::SetPictureControls(void)調(diào)節(jié)圖像的飽和度,色度和對(duì)比度
bool CAVLiveMediaFlow::GetStatus(u_int32_t value Name,void*pValue)
用pValue存儲(chǔ)已經(jīng)編碼的視頻幀的個(gè)數(shù);否則,用pValue存儲(chǔ)流媒體已經(jīng)開始的信息[4]。
分析了流媒體直播服務(wù)器的功能需求,根據(jù)現(xiàn)有的直播服務(wù)系統(tǒng)的原理和處理流程,利用MPEG4IP編碼庫(kù)實(shí)現(xiàn)MPEG4的軟編碼,設(shè)計(jì)了流媒體直播服務(wù)器的功能。通過(guò)主要函數(shù)的描述為中心,以主要函數(shù)的流程為線索,通過(guò)編寫管理員界面及子對(duì)話框來(lái)實(shí)現(xiàn)管理及設(shè)置服務(wù)器功能,實(shí)現(xiàn)符合MPEG4標(biāo)準(zhǔn)的音視頻數(shù)據(jù),最終形成一個(gè)基于linux平臺(tái)的網(wǎng)絡(luò)直播平臺(tái)——Linux流媒體直播服務(wù)器。Linux流媒體直播服務(wù)器系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),突破了傳統(tǒng)的教學(xué)模式,在實(shí)現(xiàn)過(guò)程中,較之其他直播服務(wù)器,在技術(shù)上的創(chuàng)新有以下幾點(diǎn):
·基于MPEG4IP項(xiàng)目進(jìn)行二次開發(fā),實(shí)現(xiàn)了符合MPEG4標(biāo)準(zhǔn)的音視頻數(shù)據(jù),滿足了不同帶寬用戶對(duì)視頻質(zhì)量的需求。
·基于SDL技術(shù)實(shí)現(xiàn)在Linux平臺(tái)顯示播放。
·基于RTP/RTSP協(xié)議實(shí)現(xiàn)音視頻數(shù)據(jù)的傳輸。
實(shí)驗(yàn)顯示,采用SDL技術(shù)實(shí)現(xiàn)了在Linux平臺(tái)顯示播放,基于RTP/RTSP協(xié)議實(shí)現(xiàn)了音視頻數(shù)據(jù)的傳輸,效果良好,而且系統(tǒng)穩(wěn)定性和負(fù)載均衡性都有很好表現(xiàn)。
[1]吳堅(jiān).IPTV內(nèi)容使用精細(xì)化[J].流媒體世界,2009(3):23-25.
[2]張靜.基于.NET下Web服務(wù)的信息查詢系統(tǒng)的研究與設(shè)計(jì)[D].合肥工業(yè)大學(xué),2011(9):32-35.
[3]駱炎民.基于XML的WebGIS及其數(shù)據(jù)共享的研究[D]華僑大學(xué),2010(11):40-44.
[4]駱炎民.基于XML的WebGIS及其數(shù)據(jù)共享的研究[D]華僑大學(xué),2007.