劉 斌 劉知一
(中國(guó)電影科學(xué)技術(shù)研究所(電影技術(shù)質(zhì)量檢測(cè)所),北京 100086)
數(shù)字技術(shù)的迅速推廣和數(shù)字電視的逐步普及,激發(fā)了人們對(duì)新一代家庭影院產(chǎn)品的需求,形成拉動(dòng)中國(guó)家庭影院市場(chǎng)發(fā)展的動(dòng)力。產(chǎn)品的智能化、簡(jiǎn)約化和個(gè)性化成為家庭影院市場(chǎng)新的需求熱點(diǎn),也預(yù)示著一定的市場(chǎng)發(fā)展空間。為了進(jìn)一步打造便捷易用的家庭影院,滿足用戶個(gè)性化的放映需求,本文的研究針對(duì)家庭影院設(shè)計(jì)了基于微信小程序的放映控制客戶端,實(shí)現(xiàn)在家庭影院中選購(gòu)影片、放映控制的功能。
移動(dòng)客戶端作為面向用戶的窗口,在電影放映的過(guò)程中發(fā)揮著重要的作用,各類型影院對(duì)移動(dòng)客戶端也有著不同的需求和應(yīng)用。商業(yè)影院的客戶端主要用于影片信息展示、排期展示、選座購(gòu)票等功能;點(diǎn)播影院更偏向小型化、私人化,排片放映的選擇權(quán)交到了用戶手上,對(duì)應(yīng)的客戶端主要包括影片信息展示、放映控制等功能,以實(shí)現(xiàn)現(xiàn)場(chǎng)隨點(diǎn)隨播的效果。在應(yīng)用程序客戶端和微信小程序的應(yīng)用方面,以上兩種模式均有較為豐富的發(fā)展。
家庭影院是由環(huán)繞聲放大器 (或環(huán)繞聲解碼器與多通道聲頻功率放大器組合)、多個(gè) (4個(gè)以上)揚(yáng)聲器系統(tǒng)、大屏幕電視 (或投影電視)及高質(zhì)量A/V 節(jié)目源構(gòu)成的具有環(huán)繞聲影院視聽效果的家用視聽系統(tǒng)。相對(duì)于商業(yè)影院、點(diǎn)播影院,家庭影院則將放映系統(tǒng)安置到了家庭環(huán)境中,觀影對(duì)象相對(duì)較為穩(wěn)定,同時(shí)有著更高的個(gè)性化和私密化需求,對(duì)應(yīng)客戶端需要具備影片信息展示、放映控制等功能,也能實(shí)現(xiàn)影片的下載。目前家庭影院主要以應(yīng)用程序客戶端為主,微信小程序上暫時(shí)沒(méi)有相應(yīng)功能的客戶端。而作為嵌入微信里的功能豐富、操作簡(jiǎn)潔的輕量級(jí)應(yīng)用,微信小程序能較好地適應(yīng)家庭影院個(gè)性化的需求,同時(shí)能夠使客戶端的開發(fā)、下載和使用更加便捷。本文將以微信小程序?yàn)橐劳?,研討放映控制客戶端的設(shè)計(jì)方案。
微信小程序開發(fā)基本分為四類文件,包括json文件、js文件、wxml文件、wxs文件。
json文件:小程序頁(yè)面相關(guān)的配置,可決定頁(yè)面文件的路徑、窗口表現(xiàn)、設(shè)置網(wǎng)絡(luò)超時(shí)時(shí)間、設(shè)置整體框架等(其中app.json為全局設(shè)置,可設(shè)置頂部顯示欄、底部菜單欄、頁(yè)面注冊(cè)等)。
js文件:設(shè)置變量、函數(shù)、初始化,進(jìn)行數(shù)據(jù)邏輯處理、頁(yè)面動(dòng)態(tài)修改等。
wxml文件:頁(yè)面設(shè)計(jì),包括簡(jiǎn)單邏輯判斷、從邏輯層取值、控件設(shè)置、控件位置布局等。
wxss文件:布局設(shè)計(jì),自定布局方式,包括樣式(絕對(duì)/相對(duì)布局)、大小、背景、位置、顏色、方向等。
家庭影院作為家用視聽系統(tǒng),需要通過(guò)驗(yàn)證用戶和放映設(shè)備的綁定關(guān)系,來(lái)保證用戶能夠有效的控制到所綁定的放映設(shè)備。
相對(duì)于應(yīng)用程序端,微信小程序基于微信平臺(tái),進(jìn)入客戶端后無(wú)需注冊(cè)或輸入用戶名和密碼登錄,只需通過(guò)微信賬號(hào)驗(yàn)證即可。微信平臺(tái)會(huì)為不同的用戶生成一個(gè)當(dāng)前小程序的openid,作為對(duì)應(yīng)用戶在這個(gè)小程序的唯一標(biāo)識(shí)。對(duì)于擁有多個(gè)小程序的開發(fā)者,開發(fā)者可以通過(guò)微信開放平臺(tái)賬號(hào)綁定所有小程序,微信將會(huì)根據(jù)用戶的微信ID 映射出一個(gè)unionid,作為這個(gè)用戶在整個(gè)開放平臺(tái)的唯一標(biāo)識(shí)。
如圖1所示在微信小程序啟動(dòng)過(guò)程中,用戶訪問(wèn)小程序觸發(fā)小程序內(nèi)自帶的wx.login方法,獲取到微信登錄憑證code并上傳到后端系統(tǒng),后端系統(tǒng)(開發(fā)者服務(wù)器)通過(guò)code和后端存儲(chǔ)的商戶信息,借助微信接口服務(wù)從微信后臺(tái)獲取會(huì)話信息,以驗(yàn)證小程序登錄的有效性。該會(huì)話信息包含用戶唯一標(biāo)識(shí)openid、會(huì)話密鑰等信息,其中會(huì)話密鑰是由微信服務(wù)器生成的針對(duì)用戶數(shù)據(jù)進(jìn)行加密簽名的密鑰,安全起見不應(yīng)該傳輸?shù)娇蛻舳耍视珊蠖讼到y(tǒng)存儲(chǔ)會(huì)話信息,并生成令牌與客戶端之間做接口對(duì)接校驗(yàn)??蛻舳诵枰獜奈⑿藕笈_(tái)獲取其它信息時(shí),再由后端系統(tǒng)通過(guò)用戶對(duì)應(yīng)的會(huì)話信息向微信后臺(tái)發(fā)起請(qǐng)求,將獲取到的信息反饋給客戶端,后續(xù)微信小程序與后端系統(tǒng)所有交互均攜帶該令牌。
圖1 登錄流程
在維持登錄狀態(tài)時(shí),微信小程序的執(zhí)行環(huán)境并不同于瀏覽器環(huán)境,沒(méi)有cookie,因此一般將令牌放入HTTP請(qǐng)求頭部或者置于請(qǐng)求內(nèi)容中。
登錄后當(dāng)小程序需要獲取用戶的基本信息時(shí),向后端系統(tǒng)發(fā)起查詢,若存在該用戶的基本信息,則直接返回給小程序,否則需要用戶通過(guò)點(diǎn)擊微信小程序上的授權(quán)按鈕觸發(fā)wx.get User Info方法獲取到用戶信息,包括微信昵稱、頭像、性別、省市等,并將該信息錄入至后端系統(tǒng)存儲(chǔ),以便后續(xù)用戶信息的獲取。
由于小程序依托于微信框架內(nèi),所以只支持微信支付的方式。當(dāng)小程序發(fā)起支付時(shí),向后端系統(tǒng)發(fā)起支付請(qǐng)求,由后端系統(tǒng)生成本地訂單,通過(guò)本地訂單向微信后臺(tái)發(fā)起訂單請(qǐng)求,由微信后臺(tái)服務(wù)器生成微信訂單反饋給后端系統(tǒng),后端系統(tǒng)再將微信訂單轉(zhuǎn)發(fā)給微信小程序。微信小程序獲取到微信訂單后,即可使用wx.requestPayment方法根據(jù)訂單調(diào)用微信自帶的支付服務(wù)。支付成功后客戶端將支付狀態(tài)上報(bào)給后端系統(tǒng),用于更新對(duì)應(yīng)訂單的支付狀態(tài)。
退款方式同支付方式,進(jìn)入退款流程后,由后端系統(tǒng)通過(guò)對(duì)應(yīng)的微信訂單向微信后臺(tái)發(fā)起退款請(qǐng)求。無(wú)論退款成功或失敗,微信后臺(tái)會(huì)向后端系統(tǒng)發(fā)送退款狀態(tài)的通知,后端系統(tǒng)可根據(jù)該狀態(tài)給予客戶端退款反饋,并更新后端系統(tǒng)所存儲(chǔ)的訂單信息,方便統(tǒng)計(jì)和對(duì)賬。
家庭影院的放映過(guò)程中,微信小程序作為客戶端會(huì)響應(yīng)用戶的操作行為,并頻繁的向后端系統(tǒng)發(fā)起通信,從而實(shí)現(xiàn)相應(yīng)的顯示、修改信息、控制操作等功能。由于微信小程序作為依托于微信平臺(tái)的客戶端,無(wú)法作為服務(wù)器來(lái)接收外部的HTTP請(qǐng)求信息,故通過(guò)采用wx.request方法發(fā)起HTTP 網(wǎng)絡(luò)請(qǐng)求來(lái)調(diào)用后端系統(tǒng)、放映系統(tǒng)的接口服務(wù)。在放映控制過(guò)程中,顯示放映狀態(tài)的功能對(duì)實(shí)時(shí)性要求較高,則需要自動(dòng)以高頻率請(qǐng)求的方式定時(shí)與外部通信,以實(shí)時(shí)獲取并顯示信息。
在微信小程序的后端系統(tǒng)和微信后臺(tái)的通信過(guò)程中,會(huì)常調(diào)用微信所提供的功能性接口,如訂單申請(qǐng)、退款申請(qǐng)、用戶信息獲取等。這些接口對(duì)保密性要求較高,當(dāng)獲取這些信息時(shí)需要用到微信后臺(tái)所提供的接口調(diào)用憑據(jù)(access_token)。
接口調(diào)用憑據(jù)有效期為2小時(shí),故需要后端系統(tǒng)定時(shí)獲取微信后臺(tái)服務(wù)器新的憑據(jù)并加以存儲(chǔ),使后端系統(tǒng)在運(yùn)行過(guò)程中都能夠?qū)崟r(shí)向微信后臺(tái)服務(wù)器發(fā)起通信請(qǐng)求,為小程序功能的時(shí)效性提供保障,提高用戶使用體驗(yàn)。
獲取接口調(diào)用憑據(jù)時(shí),需要用到小程序唯一憑證AppID 和小程序唯一憑證密鑰AppSecret,小程序的開發(fā)者可通過(guò)微信公眾平臺(tái)獲取這兩條信息,并存儲(chǔ)在后端系統(tǒng)方便向微信后臺(tái)發(fā)起請(qǐng)求。
基于微信小程序的電影放映客戶端作為終端,主要用于向用戶展示影片列表,以供選擇播放,同時(shí)用戶能夠通過(guò)客戶端控制放映設(shè)備進(jìn)行放映,類似于點(diǎn)播影院的移動(dòng)端播控軟件。但不同的是所述電影放映客戶端是以微信小程序?yàn)橐劳校醉?yè)、放映、個(gè)人3個(gè)功能模塊,通過(guò)json格式接口與后端系統(tǒng)進(jìn)行交互,主要實(shí)現(xiàn)選購(gòu)影片、選擇播放、放映控制、個(gè)人信息查改、購(gòu)卡續(xù)卡、退款等功能,同時(shí)通過(guò)選購(gòu)影片的模塊,能夠?qū)?duì)應(yīng)影片資源下載到放映設(shè)備中以供播放。
電影放映客戶端主要與后端系統(tǒng)、放映系統(tǒng)建立連接,從后端系統(tǒng)獲取存儲(chǔ)的影片、用戶、設(shè)備等基本信息,其中影片和用戶信息用于展示和支持客戶端的功能實(shí)現(xiàn),設(shè)備信息方便客戶端連接用戶已綁定的放映設(shè)備,從而控制放映,管理員可通過(guò)后端系統(tǒng)或院線的管理平臺(tái)將用戶的手機(jī)號(hào)與放映設(shè)備做綁定設(shè)置,用戶通過(guò)微信首次進(jìn)入到客戶端時(shí),客戶端會(huì)向用戶發(fā)起授權(quán)申請(qǐng),以獲取用戶微信對(duì)應(yīng)的手機(jī)號(hào)。通過(guò)后端系統(tǒng)的登陸驗(yàn)證后,用戶即可通過(guò)客戶端控制所綁定的放映設(shè)備播放影片。
客戶端將控制信息直接發(fā)送給放映系統(tǒng),以控制影片放映,同時(shí)獲取設(shè)備的放映狀態(tài)信息用于顯示和控制。
首頁(yè)模塊是將傳統(tǒng)影院中影片分發(fā)的窗口從院線的管理平臺(tái)移動(dòng)到了客戶端,使用戶能根據(jù)自己的喜好為所綁定的放映設(shè)備添加影片內(nèi)容,這樣可以更好地滿足家庭影院的個(gè)性化需求。
考慮到影片資源傳輸?shù)椒庞诚到y(tǒng)需要一定的時(shí)間,需要提前將影片分發(fā)至設(shè)備片庫(kù)中才能進(jìn)行放映,且放映系統(tǒng)雖然能夠存儲(chǔ)大量的影片,但數(shù)量仍是有限的,故方案設(shè)計(jì)從該模塊購(gòu)買影片后進(jìn)行分發(fā)。該模塊主要展示后端系統(tǒng)中的影片庫(kù),再通過(guò)選擇購(gòu)買的方式將選擇的影片分發(fā)到所綁定的放映設(shè)備,影片分發(fā)成功后即可選擇放映一場(chǎng)。
如圖2所示,用戶在成功登錄小程序后進(jìn)入首頁(yè)模塊,能夠在廣告位看到輪播的廣告、影片推薦等信息。該模塊可根據(jù)影片分類顯示影片列表,并具有對(duì)影片名稱、導(dǎo)演、主演進(jìn)行模糊搜索的功能,方便用戶按分類和關(guān)鍵字查詢想要的內(nèi)容,同時(shí)在點(diǎn)擊影片海報(bào)后即可查看影片詳情。用戶能夠選擇多部影片進(jìn)行購(gòu)買,點(diǎn)擊購(gòu)買后顯示購(gòu)買列表,可通過(guò)會(huì)員卡、微信支付。購(gòu)買的影片分發(fā)成功后,將會(huì)在放映模塊顯示。
圖2 首頁(yè)
放映模塊與點(diǎn)播影院移動(dòng)端的播控軟件功能類似,用戶通過(guò)該模塊選擇影片進(jìn)行放映。
由于首頁(yè)模塊已將用戶想要觀看的影片分發(fā)到對(duì)應(yīng)的放映系統(tǒng)中,該模塊主要展示用戶所綁定放映設(shè)備的影片庫(kù),并實(shí)現(xiàn)控制放映設(shè)備播放影片的功能,在播放過(guò)程中能夠即時(shí)顯示播放進(jìn)展控制放映,從而能夠隨看隨放,保障觀影體驗(yàn)。由于主頁(yè)模塊在購(gòu)買影片并分發(fā)成功后可選擇放映一場(chǎng),影片成功放映后再次播放時(shí)會(huì)自動(dòng)進(jìn)入購(gòu)買頁(yè)面,支付后隨即播放,實(shí)現(xiàn)按場(chǎng)次計(jì)費(fèi)。
用戶在進(jìn)入放映模塊后,能夠看到已經(jīng)成功分發(fā)到所綁定放映設(shè)備的影片列表,同樣可根據(jù)影片分類、模糊搜索從設(shè)備片庫(kù)中查詢想要的影片內(nèi)容。選擇想要觀看的影片即進(jìn)入影片控制放映頁(yè)。該頁(yè)可看到影片詳情和該影片的播放狀態(tài)信息,同時(shí)作為控制界面,能夠控制影片播放、暫停、終止??蓪?shí)時(shí)顯示當(dāng)前影片的播放進(jìn)度,且與放映系統(tǒng)的播放進(jìn)度一致。
個(gè)人模塊主要展示用戶個(gè)人信息、會(huì)員卡信息、訂單信息和系統(tǒng)信息等。個(gè)人信息欄包括顯示個(gè)人信息、修改個(gè)人信息、上傳頭像等功能。會(huì)員卡欄按已購(gòu)會(huì)員卡和所有會(huì)員卡兩種分類顯示,同時(shí)用戶能夠通過(guò)該模塊購(gòu)買會(huì)員卡,或者為已有的會(huì)員卡續(xù)費(fèi)。訂單信息欄能顯示用戶所有訂單列表,包括影片、會(huì)員卡的支付訂單,并具有申請(qǐng)退款功能,能夠根據(jù)訂單的支付狀態(tài)判斷能否退款。系統(tǒng)信息包括用戶協(xié)議、版本號(hào)等客戶端系統(tǒng)的信息,以供用戶查看。
后端系統(tǒng)主要用于為客戶端提供HTTP接口服務(wù),并與放映系統(tǒng)、微信后臺(tái)通過(guò)HTTP接口進(jìn)行交互,對(duì)傳輸數(shù)據(jù)加以驗(yàn)證、處理、記錄和中轉(zhuǎn),從而響應(yīng)客戶端的請(qǐng)求,以支持各個(gè)功能的實(shí)現(xiàn)。
后端系統(tǒng)采用MySQL 數(shù)據(jù)庫(kù)存儲(chǔ)信息,通過(guò)CDN 存儲(chǔ)圖片文件以供客戶端引用,通過(guò)Python語(yǔ)言搭建后端接口服務(wù),以json格式數(shù)據(jù)同客戶端交互。接口服務(wù)從不同的數(shù)據(jù)庫(kù)表中將相應(yīng)的數(shù)據(jù)提取出來(lái),并處理成客戶端需要的數(shù)據(jù)結(jié)構(gòu),使客戶端不用經(jīng)過(guò)數(shù)據(jù)解析和篩選,直接賦值變量后即可顯示,減少客戶端數(shù)據(jù)處理壓力,提高運(yùn)行速率。該接口服務(wù)也能夠響應(yīng)客戶端的請(qǐng)求,完成相關(guān)的業(yè)務(wù)邏輯處理。接口服務(wù)分為以下幾類:
(1)影片放映類接口,能夠?yàn)槭醉?yè)模塊和放映模塊提供對(duì)應(yīng)的廣告列表、導(dǎo)航列表、影片列表、影片詳情等信息,支持放映控制的功能。
(2)個(gè)人信息類接口,為個(gè)人模塊提供用戶個(gè)人信息、訂單列表、客戶端系統(tǒng)信息、會(huì)員卡列表、支付時(shí)選擇會(huì)員卡的列表等,支持修改用戶信息的功能。
(3)支付類接口,支持購(gòu)買影片、購(gòu)買會(huì)員卡、訂單退款的功能。
(4)登錄接口,生成與客戶端的通信令牌,用以驗(yàn)證接口信息的有效性,同時(shí)存儲(chǔ)微信平臺(tái)反還的會(huì)話信息。
在功能實(shí)現(xiàn)上,應(yīng)用程序客戶端和本文所述的電影放映客戶端都可以實(shí)現(xiàn)可視化界面展示、影片庫(kù)展示和搜索、放映控制、支付等功能。以智能影庫(kù)播放器為例,具有片庫(kù)瀏覽、分類導(dǎo)航、影片搜索、影片下載、選片放映、放映控制等基本功能。電影放映客戶端也設(shè)計(jì)具備同樣的功能,在設(shè)計(jì)方面添加了會(huì)員卡支付、退款等個(gè)性化模塊。
在開發(fā)層面上,相比于微信小程序開發(fā),應(yīng)用程序客戶端能夠加入更多復(fù)雜的功能,靈活性強(qiáng),且支持多種支付方式,但需要分別對(duì)Android 和iOS兩種系統(tǒng)進(jìn)行開發(fā),并配置開發(fā)環(huán)境,開發(fā)成本也相對(duì)較高。微信小程序則更偏向于精簡(jiǎn)的設(shè)計(jì)開發(fā),依托于微信平臺(tái)能夠適用Android和iOS兩種系統(tǒng),且具有第三方接口,開發(fā)成本低,但只能支持微信的支付方式,且整個(gè)小程序所有代碼包的大小不能超過(guò)20MB,對(duì)復(fù)雜功能的開發(fā)有著一定的限制,如圖片處理或文檔編輯,小程序是無(wú)法滿足的。
在實(shí)現(xiàn)復(fù)雜度高、功能豐富繁多的產(chǎn)品等方面,應(yīng)用程序客戶端仍是不可替代的。相對(duì)來(lái)說(shuō)基于微信小程序的開發(fā),可借助于微信平臺(tái),開發(fā)難度相對(duì)較低,也能減少開發(fā)時(shí)間和資金的投入,并打造簡(jiǎn)約實(shí)用的終端應(yīng)用,讓客戶端個(gè)性化的功能得以實(shí)現(xiàn)。合理設(shè)計(jì)和應(yīng)用小程序能在實(shí)現(xiàn)豐富的功能的基礎(chǔ)上,節(jié)約開發(fā)成本,同時(shí)也能為人們?cè)谑褂玫倪^(guò)程中提供更多便利。
隨著數(shù)字電影技術(shù)的飛速發(fā)展,商業(yè)影院、點(diǎn)播影院、校園院線、家庭影院等多種電影放映模式的逐漸普及,同時(shí)不同類型影院也需要根據(jù)其運(yùn)營(yíng)模式來(lái)確定放映控制端的功能實(shí)現(xiàn)。應(yīng)用于家庭影院的發(fā)展,微信小程序?qū)^(qū)別于應(yīng)用程序客戶端,以新的方式為影院提供開發(fā)便捷、功能精簡(jiǎn)的放映控制窗口,同時(shí)滿足個(gè)性化觀影需求,提升觀影體驗(yàn)。本文主要考慮家庭影院具有個(gè)性化與私人化的特點(diǎn),采用微信小程序的開發(fā)方式,將微信工具的普遍性和便利性與家庭影院的放映控制相結(jié)合,設(shè)計(jì)了電影放映客戶端,并按業(yè)務(wù)流程、功能設(shè)計(jì)詳細(xì)探討了該客戶端的實(shí)現(xiàn)方案,未來(lái)可根據(jù)需求的變化繼續(xù)完善相關(guān)功能,并應(yīng)用于家庭影院中,讓個(gè)人片庫(kù)管理、控制放映更加簡(jiǎn)易方便,促進(jìn)家庭影院個(gè)性化、便利化的發(fā)展。
①放映控制相關(guān)的接口服務(wù)在放映系統(tǒng)中運(yùn)行,并與客戶端直接對(duì)接,以響應(yīng)放映請(qǐng)求。