劉 斌 劉知一
(中國電影科學技術(shù)研究所(電影技術(shù)質(zhì)量檢測所),北京 100086)
數(shù)字技術(shù)的迅速推廣和數(shù)字電視的逐步普及,激發(fā)了人們對新一代家庭影院產(chǎn)品的需求,形成拉動中國家庭影院市場發(fā)展的動力。產(chǎn)品的智能化、簡約化和個性化成為家庭影院市場新的需求熱點,也預(yù)示著一定的市場發(fā)展空間。為了進一步打造便捷易用的家庭影院,滿足用戶個性化的放映需求,本文的研究針對家庭影院設(shè)計了基于微信小程序的放映控制客戶端,實現(xiàn)在家庭影院中選購影片、放映控制的功能。
移動客戶端作為面向用戶的窗口,在電影放映的過程中發(fā)揮著重要的作用,各類型影院對移動客戶端也有著不同的需求和應(yīng)用。商業(yè)影院的客戶端主要用于影片信息展示、排期展示、選座購票等功能;點播影院更偏向小型化、私人化,排片放映的選擇權(quán)交到了用戶手上,對應(yīng)的客戶端主要包括影片信息展示、放映控制等功能,以實現(xiàn)現(xiàn)場隨點隨播的效果。在應(yīng)用程序客戶端和微信小程序的應(yīng)用方面,以上兩種模式均有較為豐富的發(fā)展。
家庭影院是由環(huán)繞聲放大器 (或環(huán)繞聲解碼器與多通道聲頻功率放大器組合)、多個 (4個以上)揚聲器系統(tǒng)、大屏幕電視 (或投影電視)及高質(zhì)量A/V 節(jié)目源構(gòu)成的具有環(huán)繞聲影院視聽效果的家用視聽系統(tǒng)。相對于商業(yè)影院、點播影院,家庭影院則將放映系統(tǒng)安置到了家庭環(huán)境中,觀影對象相對較為穩(wěn)定,同時有著更高的個性化和私密化需求,對應(yīng)客戶端需要具備影片信息展示、放映控制等功能,也能實現(xiàn)影片的下載。目前家庭影院主要以應(yīng)用程序客戶端為主,微信小程序上暫時沒有相應(yīng)功能的客戶端。而作為嵌入微信里的功能豐富、操作簡潔的輕量級應(yīng)用,微信小程序能較好地適應(yīng)家庭影院個性化的需求,同時能夠使客戶端的開發(fā)、下載和使用更加便捷。本文將以微信小程序為依托,研討放映控制客戶端的設(shè)計方案。
微信小程序開發(fā)基本分為四類文件,包括json文件、js文件、wxml文件、wxs文件。
json文件:小程序頁面相關(guān)的配置,可決定頁面文件的路徑、窗口表現(xiàn)、設(shè)置網(wǎng)絡(luò)超時時間、設(shè)置整體框架等(其中app.json為全局設(shè)置,可設(shè)置頂部顯示欄、底部菜單欄、頁面注冊等)。
js文件:設(shè)置變量、函數(shù)、初始化,進行數(shù)據(jù)邏輯處理、頁面動態(tài)修改等。
wxml文件:頁面設(shè)計,包括簡單邏輯判斷、從邏輯層取值、控件設(shè)置、控件位置布局等。
wxss文件:布局設(shè)計,自定布局方式,包括樣式(絕對/相對布局)、大小、背景、位置、顏色、方向等。
家庭影院作為家用視聽系統(tǒng),需要通過驗證用戶和放映設(shè)備的綁定關(guān)系,來保證用戶能夠有效的控制到所綁定的放映設(shè)備。
相對于應(yīng)用程序端,微信小程序基于微信平臺,進入客戶端后無需注冊或輸入用戶名和密碼登錄,只需通過微信賬號驗證即可。微信平臺會為不同的用戶生成一個當前小程序的openid,作為對應(yīng)用戶在這個小程序的唯一標識。對于擁有多個小程序的開發(fā)者,開發(fā)者可以通過微信開放平臺賬號綁定所有小程序,微信將會根據(jù)用戶的微信ID 映射出一個unionid,作為這個用戶在整個開放平臺的唯一標識。
如圖1所示在微信小程序啟動過程中,用戶訪問小程序觸發(fā)小程序內(nèi)自帶的wx.login方法,獲取到微信登錄憑證code并上傳到后端系統(tǒng),后端系統(tǒng)(開發(fā)者服務(wù)器)通過code和后端存儲的商戶信息,借助微信接口服務(wù)從微信后臺獲取會話信息,以驗證小程序登錄的有效性。該會話信息包含用戶唯一標識openid、會話密鑰等信息,其中會話密鑰是由微信服務(wù)器生成的針對用戶數(shù)據(jù)進行加密簽名的密鑰,安全起見不應(yīng)該傳輸?shù)娇蛻舳?,故由后端系統(tǒng)存儲會話信息,并生成令牌與客戶端之間做接口對接校驗。客戶端需要從微信后臺獲取其它信息時,再由后端系統(tǒng)通過用戶對應(yīng)的會話信息向微信后臺發(fā)起請求,將獲取到的信息反饋給客戶端,后續(xù)微信小程序與后端系統(tǒng)所有交互均攜帶該令牌。

圖1 登錄流程
在維持登錄狀態(tài)時,微信小程序的執(zhí)行環(huán)境并不同于瀏覽器環(huán)境,沒有cookie,因此一般將令牌放入HTTP請求頭部或者置于請求內(nèi)容中。
登錄后當小程序需要獲取用戶的基本信息時,向后端系統(tǒng)發(fā)起查詢,若存在該用戶的基本信息,則直接返回給小程序,否則需要用戶通過點擊微信小程序上的授權(quán)按鈕觸發(fā)wx.get User Info方法獲取到用戶信息,包括微信昵稱、頭像、性別、省市等,并將該信息錄入至后端系統(tǒng)存儲,以便后續(xù)用戶信息的獲取。
由于小程序依托于微信框架內(nèi),所以只支持微信支付的方式。當小程序發(fā)起支付時,向后端系統(tǒng)發(fā)起支付請求,由后端系統(tǒng)生成本地訂單,通過本地訂單向微信后臺發(fā)起訂單請求,由微信后臺服務(wù)器生成微信訂單反饋給后端系統(tǒng),后端系統(tǒng)再將微信訂單轉(zhuǎn)發(fā)給微信小程序。微信小程序獲取到微信訂單后,即可使用wx.requestPayment方法根據(jù)訂單調(diào)用微信自帶的支付服務(wù)。支付成功后客戶端將支付狀態(tài)上報給后端系統(tǒng),用于更新對應(yīng)訂單的支付狀態(tài)。
退款方式同支付方式,進入退款流程后,由后端系統(tǒng)通過對應(yīng)的微信訂單向微信后臺發(fā)起退款請求。無論退款成功或失敗,微信后臺會向后端系統(tǒng)發(fā)送退款狀態(tài)的通知,后端系統(tǒng)可根據(jù)該狀態(tài)給予客戶端退款反饋,并更新后端系統(tǒng)所存儲的訂單信息,方便統(tǒng)計和對賬。
家庭影院的放映過程中,微信小程序作為客戶端會響應(yīng)用戶的操作行為,并頻繁的向后端系統(tǒng)發(fā)起通信,從而實現(xiàn)相應(yīng)的顯示、修改信息、控制操作等功能。由于微信小程序作為依托于微信平臺的客戶端,無法作為服務(wù)器來接收外部的HTTP請求信息,故通過采用wx.request方法發(fā)起HTTP 網(wǎng)絡(luò)請求來調(diào)用后端系統(tǒng)、放映系統(tǒng)的接口服務(wù)。在放映控制過程中,顯示放映狀態(tài)的功能對實時性要求較高,則需要自動以高頻率請求的方式定時與外部通信,以實時獲取并顯示信息。
在微信小程序的后端系統(tǒng)和微信后臺的通信過程中,會常調(diào)用微信所提供的功能性接口,如訂單申請、退款申請、用戶信息獲取等。這些接口對保密性要求較高,當獲取這些信息時需要用到微信后臺所提供的接口調(diào)用憑據(jù)(access_token)。
接口調(diào)用憑據(jù)有效期為2小時,故需要后端系統(tǒng)定時獲取微信后臺服務(wù)器新的憑據(jù)并加以存儲,使后端系統(tǒng)在運行過程中都能夠?qū)崟r向微信后臺服務(wù)器發(fā)起通信請求,為小程序功能的時效性提供保障,提高用戶使用體驗。
獲取接口調(diào)用憑據(jù)時,需要用到小程序唯一憑證AppID 和小程序唯一憑證密鑰AppSecret,小程序的開發(fā)者可通過微信公眾平臺獲取這兩條信息,并存儲在后端系統(tǒng)方便向微信后臺發(fā)起請求。
基于微信小程序的電影放映客戶端作為終端,主要用于向用戶展示影片列表,以供選擇播放,同時用戶能夠通過客戶端控制放映設(shè)備進行放映,類似于點播影院的移動端播控軟件。但不同的是所述電影放映客戶端是以微信小程序為依托,包含首頁、放映、個人3個功能模塊,通過json格式接口與后端系統(tǒng)進行交互,主要實現(xiàn)選購影片、選擇播放、放映控制、個人信息查改、購卡續(xù)卡、退款等功能,同時通過選購影片的模塊,能夠?qū)?yīng)影片資源下載到放映設(shè)備中以供播放。
電影放映客戶端主要與后端系統(tǒng)、放映系統(tǒng)建立連接,從后端系統(tǒng)獲取存儲的影片、用戶、設(shè)備等基本信息,其中影片和用戶信息用于展示和支持客戶端的功能實現(xiàn),設(shè)備信息方便客戶端連接用戶已綁定的放映設(shè)備,從而控制放映,管理員可通過后端系統(tǒng)或院線的管理平臺將用戶的手機號與放映設(shè)備做綁定設(shè)置,用戶通過微信首次進入到客戶端時,客戶端會向用戶發(fā)起授權(quán)申請,以獲取用戶微信對應(yīng)的手機號。通過后端系統(tǒng)的登陸驗證后,用戶即可通過客戶端控制所綁定的放映設(shè)備播放影片。
客戶端將控制信息直接發(fā)送給放映系統(tǒng),以控制影片放映,同時獲取設(shè)備的放映狀態(tài)信息用于顯示和控制。
首頁模塊是將傳統(tǒng)影院中影片分發(fā)的窗口從院線的管理平臺移動到了客戶端,使用戶能根據(jù)自己的喜好為所綁定的放映設(shè)備添加影片內(nèi)容,這樣可以更好地滿足家庭影院的個性化需求。
考慮到影片資源傳輸?shù)椒庞诚到y(tǒng)需要一定的時間,需要提前將影片分發(fā)至設(shè)備片庫中才能進行放映,且放映系統(tǒng)雖然能夠存儲大量的影片,但數(shù)量仍是有限的,故方案設(shè)計從該模塊購買影片后進行分發(fā)。該模塊主要展示后端系統(tǒng)中的影片庫,再通過選擇購買的方式將選擇的影片分發(fā)到所綁定的放映設(shè)備,影片分發(fā)成功后即可選擇放映一場。
如圖2所示,用戶在成功登錄小程序后進入首頁模塊,能夠在廣告位看到輪播的廣告、影片推薦等信息。該模塊可根據(jù)影片分類顯示影片列表,并具有對影片名稱、導(dǎo)演、主演進行模糊搜索的功能,方便用戶按分類和關(guān)鍵字查詢想要的內(nèi)容,同時在點擊影片海報后即可查看影片詳情。用戶能夠選擇多部影片進行購買,點擊購買后顯示購買列表,可通過會員卡、微信支付。購買的影片分發(fā)成功后,將會在放映模塊顯示。

圖2 首頁
放映模塊與點播影院移動端的播控軟件功能類似,用戶通過該模塊選擇影片進行放映。
由于首頁模塊已將用戶想要觀看的影片分發(fā)到對應(yīng)的放映系統(tǒng)中,該模塊主要展示用戶所綁定放映設(shè)備的影片庫,并實現(xiàn)控制放映設(shè)備播放影片的功能,在播放過程中能夠即時顯示播放進展控制放映,從而能夠隨看隨放,保障觀影體驗。由于主頁模塊在購買影片并分發(fā)成功后可選擇放映一場,影片成功放映后再次播放時會自動進入購買頁面,支付后隨即播放,實現(xiàn)按場次計費。
用戶在進入放映模塊后,能夠看到已經(jīng)成功分發(fā)到所綁定放映設(shè)備的影片列表,同樣可根據(jù)影片分類、模糊搜索從設(shè)備片庫中查詢想要的影片內(nèi)容。選擇想要觀看的影片即進入影片控制放映頁。該頁可看到影片詳情和該影片的播放狀態(tài)信息,同時作為控制界面,能夠控制影片播放、暫停、終止??蓪崟r顯示當前影片的播放進度,且與放映系統(tǒng)的播放進度一致。
個人模塊主要展示用戶個人信息、會員卡信息、訂單信息和系統(tǒng)信息等。個人信息欄包括顯示個人信息、修改個人信息、上傳頭像等功能。會員卡欄按已購會員卡和所有會員卡兩種分類顯示,同時用戶能夠通過該模塊購買會員卡,或者為已有的會員卡續(xù)費。訂單信息欄能顯示用戶所有訂單列表,包括影片、會員卡的支付訂單,并具有申請退款功能,能夠根據(jù)訂單的支付狀態(tài)判斷能否退款。系統(tǒng)信息包括用戶協(xié)議、版本號等客戶端系統(tǒng)的信息,以供用戶查看。
后端系統(tǒng)主要用于為客戶端提供HTTP接口服務(wù),并與放映系統(tǒng)、微信后臺通過HTTP接口進行交互,對傳輸數(shù)據(jù)加以驗證、處理、記錄和中轉(zhuǎn),從而響應(yīng)客戶端的請求,以支持各個功能的實現(xiàn)。
后端系統(tǒng)采用MySQL 數(shù)據(jù)庫存儲信息,通過CDN 存儲圖片文件以供客戶端引用,通過Python語言搭建后端接口服務(wù),以json格式數(shù)據(jù)同客戶端交互。接口服務(wù)從不同的數(shù)據(jù)庫表中將相應(yīng)的數(shù)據(jù)提取出來,并處理成客戶端需要的數(shù)據(jù)結(jié)構(gòu),使客戶端不用經(jīng)過數(shù)據(jù)解析和篩選,直接賦值變量后即可顯示,減少客戶端數(shù)據(jù)處理壓力,提高運行速率。該接口服務(wù)也能夠響應(yīng)客戶端的請求,完成相關(guān)的業(yè)務(wù)邏輯處理。接口服務(wù)分為以下幾類:
(1)影片放映類接口,能夠為首頁模塊和放映模塊提供對應(yīng)的廣告列表、導(dǎo)航列表、影片列表、影片詳情等信息,支持放映控制的功能。
(2)個人信息類接口,為個人模塊提供用戶個人信息、訂單列表、客戶端系統(tǒng)信息、會員卡列表、支付時選擇會員卡的列表等,支持修改用戶信息的功能。
(3)支付類接口,支持購買影片、購買會員卡、訂單退款的功能。
(4)登錄接口,生成與客戶端的通信令牌,用以驗證接口信息的有效性,同時存儲微信平臺反還的會話信息。
在功能實現(xiàn)上,應(yīng)用程序客戶端和本文所述的電影放映客戶端都可以實現(xiàn)可視化界面展示、影片庫展示和搜索、放映控制、支付等功能。以智能影庫播放器為例,具有片庫瀏覽、分類導(dǎo)航、影片搜索、影片下載、選片放映、放映控制等基本功能。電影放映客戶端也設(shè)計具備同樣的功能,在設(shè)計方面添加了會員卡支付、退款等個性化模塊。
在開發(fā)層面上,相比于微信小程序開發(fā),應(yīng)用程序客戶端能夠加入更多復(fù)雜的功能,靈活性強,且支持多種支付方式,但需要分別對Android 和iOS兩種系統(tǒng)進行開發(fā),并配置開發(fā)環(huán)境,開發(fā)成本也相對較高。微信小程序則更偏向于精簡的設(shè)計開發(fā),依托于微信平臺能夠適用Android和iOS兩種系統(tǒng),且具有第三方接口,開發(fā)成本低,但只能支持微信的支付方式,且整個小程序所有代碼包的大小不能超過20MB,對復(fù)雜功能的開發(fā)有著一定的限制,如圖片處理或文檔編輯,小程序是無法滿足的。
在實現(xiàn)復(fù)雜度高、功能豐富繁多的產(chǎn)品等方面,應(yīng)用程序客戶端仍是不可替代的。相對來說基于微信小程序的開發(fā),可借助于微信平臺,開發(fā)難度相對較低,也能減少開發(fā)時間和資金的投入,并打造簡約實用的終端應(yīng)用,讓客戶端個性化的功能得以實現(xiàn)。合理設(shè)計和應(yīng)用小程序能在實現(xiàn)豐富的功能的基礎(chǔ)上,節(jié)約開發(fā)成本,同時也能為人們在使用的過程中提供更多便利。
隨著數(shù)字電影技術(shù)的飛速發(fā)展,商業(yè)影院、點播影院、校園院線、家庭影院等多種電影放映模式的逐漸普及,同時不同類型影院也需要根據(jù)其運營模式來確定放映控制端的功能實現(xiàn)。應(yīng)用于家庭影院的發(fā)展,微信小程序?qū)^(qū)別于應(yīng)用程序客戶端,以新的方式為影院提供開發(fā)便捷、功能精簡的放映控制窗口,同時滿足個性化觀影需求,提升觀影體驗。本文主要考慮家庭影院具有個性化與私人化的特點,采用微信小程序的開發(fā)方式,將微信工具的普遍性和便利性與家庭影院的放映控制相結(jié)合,設(shè)計了電影放映客戶端,并按業(yè)務(wù)流程、功能設(shè)計詳細探討了該客戶端的實現(xiàn)方案,未來可根據(jù)需求的變化繼續(xù)完善相關(guān)功能,并應(yīng)用于家庭影院中,讓個人片庫管理、控制放映更加簡易方便,促進家庭影院個性化、便利化的發(fā)展。
①放映控制相關(guān)的接口服務(wù)在放映系統(tǒng)中運行,并與客戶端直接對接,以響應(yīng)放映請求。