南京 鄭力
微信小程序由于自身平臺(tái)優(yōu)勢(shì),不需要對(duì)各類設(shè)備單獨(dú)開發(fā)不同系統(tǒng)版本APP,具有開發(fā)成本低、占用內(nèi)存小、用戶量龐大等特點(diǎn),給教育行業(yè)帶來了廣闊的應(yīng)用空間。微信小程序可以應(yīng)用于課堂教學(xué)、實(shí)驗(yàn)直播及教學(xué)會(huì)議等應(yīng)用場(chǎng)景,具有搭建迅速、自由度高及實(shí)時(shí)互動(dòng)等特點(diǎn)。
微信小程序的直播功能采用了輕量化的直播引擎,開發(fā)及使用門檻更低。其嵌套于微信生態(tài)中,方便師生獲取。但是在功能的完整性上,與原生直播App 還有差距,如果需要個(gè)性化的上傳輔流、美化圖像等功能,還需要借助其它直播軟件才能實(shí)現(xiàn)。
雖然微信小程序是基于JavaScript、HTML 及CSS 技術(shù)進(jìn)行開發(fā)的,但是又有別于傳統(tǒng)的瀏覽器。其提供了豐富的API 接口,可以方便的調(diào)用微信各種能力。提供的組件不但可以實(shí)現(xiàn)拉流,同時(shí)能夠?qū)崿F(xiàn)推流,而且提供了RTC 功能,可以實(shí)現(xiàn)連麥互動(dòng),降低了直播延時(shí)。
微信小程序采用的MINA框架通過封裝微信客戶端提供的文件系統(tǒng)、網(wǎng)絡(luò)通信、數(shù)據(jù)與安全等基礎(chǔ)功能,提供一系列的組件和API,必要的文件為:
1.*.json 后綴的JSON 配置文件
JSON 是一種數(shù)據(jù)格式,并不是編程語言,在小程序中,JSON 扮演的靜態(tài)配置的角色。app.json 是當(dāng)前小程序的全局配置,包括了小程序的所有頁面路徑、界面表現(xiàn)、網(wǎng)絡(luò)超時(shí)時(shí)間、底部tab等;每個(gè)頁面中的.json 文件用來表示每個(gè)小程序頁面相關(guān)的配置。
2.*.wxml 后 綴 的WXML 模板文件
在小程序中,充當(dāng)類似HTML 的角色,提供了頁面結(jié)構(gòu)相關(guān)的組件、屬性及條件渲染能力。
3.*.wxss 后綴 的WXSS 樣式文件
wxss 具有CSS 大部分的特性,但是在選擇器上只支持部分CSS 選擇器,在底層支持新的尺寸單位rpx,避開了不同設(shè)備對(duì)像素?fù)Q算的煩惱,可以在不同設(shè)備上自動(dòng)轉(zhuǎn)換樣式大小。
4.*.js 后綴的JS 腳本邏輯文件
完成了小程序的邏輯層的功能,實(shí)現(xiàn)了對(duì)頁面的數(shù)據(jù)運(yùn)算、渲染等功能。微信小程序提供了豐富的API 接口,讓開發(fā)者可以很方便的調(diào)用微信提供的能力,實(shí)現(xiàn)了與微信數(shù)據(jù)的互通。
1.
主播端使用,它在微信小程序的內(nèi)部是一個(gè)推流引擎,它負(fù)責(zé)對(duì)手機(jī)攝像頭和麥克風(fēng)的數(shù)據(jù)進(jìn)行采集和編碼,并通過url 參數(shù)指定的rtmp 推流地址上傳到云端。
2.
觀眾端使用,它在小程序的內(nèi)部是一個(gè)在線播放器,負(fù)責(zé)從云端實(shí)時(shí)拉取音視頻數(shù)據(jù)并進(jìn)行解碼和渲染。由于云端推流時(shí)使用了CDN 網(wǎng)絡(luò),每一個(gè)觀眾都能在離自己比較近的云服務(wù)器上拉取到實(shí)時(shí)且流暢的音視頻流。
值得注意的是,
1.小程序的注冊(cè)與直播權(quán)限的開通
包含直播功能的小程序必須以非個(gè)人主體類型進(jìn)行注冊(cè),以獲得小程序的AppID,并需要先通過類目審核,再在小程序管理后臺(tái),「開發(fā)」-「接口設(shè)置」中自助開通推拉流標(biāo)簽的使用權(quán)限。
2.申請(qǐng)推流與播放域名
使用微信小程序直播服務(wù),至少需要2 個(gè)域名,可以使用騰訊云直播提供的域名,或者自行購買其它域名。擁有域名后必須進(jìn)行備案,并提交審核。
1.教學(xué)直播
教師對(duì)教學(xué)內(nèi)容進(jìn)行直播,不需要學(xué)生參與互動(dòng)。對(duì)教學(xué)內(nèi)容進(jìn)行保存,方便日后點(diǎn)播。
2.教學(xué)互動(dòng)
教師對(duì)教學(xué)內(nèi)容進(jìn)行講解,學(xué)生可以通過彈幕發(fā)言,并向老師申請(qǐng)發(fā)言權(quán)限,實(shí)現(xiàn)教學(xué)互動(dòng)。
3.教學(xué)會(huì)議
多人實(shí)時(shí)進(jìn)行的小會(huì)議,通過小程序建立會(huì)議室,邀請(qǐng)微信好友或者通過掃描小程序二維碼參與會(huì)議。
1.推流碼率及延時(shí)設(shè)定
在設(shè)計(jì)直播功能時(shí),視頻的流暢度和延時(shí)是首要考慮的問題。通過設(shè)置
表1 屬性設(shè)置
一般而言,RTC 的視頻流延時(shí)為500ms 以內(nèi),直播網(wǎng)絡(luò)的視頻流延時(shí)為1-3s,因此一般將延時(shí)min-cache 設(shè)為0,max-cache 設(shè)為5。
2.事件處理
當(dāng)直播組件狀態(tài)發(fā)生改變時(shí),組件就會(huì)拋出相應(yīng)的狀態(tài)碼,通過組件的綁定事件屬性可以綁定一個(gè)事件處理函數(shù),該函數(shù)可以監(jiān)聽組件模塊的內(nèi)部事件和異常通知,根據(jù)不同的狀態(tài)碼在邏輯層做出相應(yīng)的處理。
綁定事件包括:
1.流媒體服務(wù)器
流媒體服務(wù)器的性能,決定了直播程序體驗(yàn)的質(zhì)量,如今租用云服務(wù)器是很好的選擇,不但可以降低搭建服務(wù)器的成本,靈活的配置和擴(kuò)容業(yè)務(wù),同時(shí)可以獲得更高的帶寬和流速,直播體驗(yàn)更佳。
例如,騰訊專門開發(fā)了云直播服務(wù),主要面向云對(duì)接的直播服務(wù),其優(yōu)點(diǎn)包括開源UI 快速集成、更低的卡頓及延時(shí)、AI 美化及識(shí)別能力的加成。騰訊云能夠?yàn)闃?biāo)準(zhǔn)RTMP 提供UDP 加速能力,開啟加速后的推流質(zhì)量比標(biāo)準(zhǔn)RTMP 推流有更好的網(wǎng)絡(luò)波動(dòng)抵抗力。
如果想要自己搭建RTMP流媒體服務(wù)器,由于直播會(huì)占用較大的帶寬,應(yīng)首先考慮校園內(nèi)部的網(wǎng)絡(luò)承受能力,再?zèng)Q定將服務(wù)器放在校內(nèi)還是校外。
如果觀看直播的受眾分布地域較廣,還需要租用CDN服務(wù)商線路,對(duì)直播內(nèi)容進(jìn)行分發(fā)。
相對(duì)于云服務(wù)器,自建流媒體服務(wù)器會(huì)產(chǎn)生更大成本,更高延時(shí),當(dāng)業(yè)務(wù)量產(chǎn)生變化時(shí),升級(jí)的成本也更大。
2.存儲(chǔ)服務(wù)器
在直播教學(xué)的過程中,可以將教學(xué)資料保存,方便日后使用。通過一些直播和視屏錄制軟件,可以實(shí)現(xiàn)視頻的保存與推流。
常用的軟件如obs,可以對(duì)直播視頻進(jìn)行編輯和錄制,并將視頻文件保存在本地存儲(chǔ)服務(wù)器,當(dāng)有直播需要時(shí),只需要在自定義流媒體服務(wù)器中設(shè)置推流地址,連接成功后就可以實(shí)現(xiàn)直播。
日后在小程序端進(jìn)行回看點(diǎn)播時(shí),可利用本地自建的存儲(chǔ)服務(wù)器,對(duì)資源進(jìn)行點(diǎn)播。
值得注意的是,微信小程序視頻推流只支持Flv 或者Rtmp 格式的視頻文件,在上傳時(shí)應(yīng)當(dāng)先本地轉(zhuǎn)碼,實(shí)現(xiàn)過程如圖1。
圖1 自建服務(wù)器
如果想要使用云端能力,也可以購買各類云服務(wù)商的云點(diǎn)播服務(wù)。云點(diǎn)播服務(wù)可以自行對(duì)視頻文件進(jìn)行轉(zhuǎn)碼處理,并將視頻文件存儲(chǔ)于云端,在播放時(shí)提供CDN 加速,有回看需求也可以回看點(diǎn)播。
微信小程序作為一個(gè)新興技術(shù),其功能還在不斷更新與完善。直播組件方面,在
在如今幾乎人人使用微信的時(shí)代,微信小程序?yàn)橛脩籼峁┝烁涌焖俚募虞d能力,擁有易用且安全的微信數(shù)據(jù)開放能力,為教育教學(xué)提供了廣闊的平臺(tái)。而直播同樣作為一個(gè)新興的產(chǎn)業(yè),也不斷被年輕人所接受。微信小程序、直播和教育的融合,為我們提供了更加便利,更加高效的教學(xué)手段。