最近在做自定義Chromecast Receiver的項目,但是在開發過程中,暫時沒有真實的設備和APP ID,所以只好找一個模擬器對開發的Receiver進行測試。
模擬器Chromecast Device Emulator:https://github.com/ajhsu/chromecast-device-emulator
一、模擬器工作原理
首先我們來看一下真實Google Cast的使用流程。如下圖所示,左側是在真實場景中Sender、Cast device、Receiver的之間的通信圖。我們可以看到Sender app中,用戶可能執行加載視頻(load)、播放(play)、暫停(pause)等操作。當執行這些動作時,Sender app會通過Sender SDK把這些信息通過發送IPCMessages的方式發送到Cast device中。而Cast device只是轉發了這些IPCMessages給Receiver App。Receiver接受到信息後則做出響應。
在無真實設備開發的場景中,我們所需要的模擬器實現的功能就是轉發IPCMessages。但是因爲沒有真實的設備,所以我們需要預先把用戶可能執行的操作的信息記錄下來,讓模擬器轉發,確保Receiver能收到IPCMessages即可。
二、安裝方法
2.1 全局安裝/CLI:
npm install chromecast-device-emulator -g
安裝後,將iIPCMessages內容寫入一個json文件中,啓動CLI即可向Receiver發送IPCMessages。啓動方法以下兩種任選其一:
chromecast-device-emulator start scenario.json
cde start scenario.json
2.2 局部安裝/Node
在項目中的開發環境中安裝chromcast-device-emulator的node api,如下:
npm install chromecast-device-emulator --save-dev
然後在項目中引入cde的包並創建一個模擬器:
var CastDeviceEmulator = require('chromecast-device-emulator');
// 創建一個instance
var emulator = new CastDeviceEmulator();
// 加載預記錄IPCMessages的json文件
emulator.loadScenario(require(your_json_path));
// 啓動模擬器
emulator.start();
// do something
// 關閉模擬器
emulator.stop();
三、scenario.json
像github中提供的文檔,是建議使用IPC Message Recorder去記錄來自真實設備的信息內容。但是暫時還未申請SDK的情況下,而且我在項目中只是需要獲取一個URL,所以我就參考example中的例子,僅寫了一個特簡單的LOAD類型IPCMessage,大家也可以依據自己的項目情況編寫scenario.json文件。以下是我寫的:
{
"timeline": [{
"time": 844,
"ipcMessage": "{\"data\":\"{\\\"applicationId\\\":\\\"4F8B483\\\",\\\"applicationName\\\":\\\"testing app\\\",\\\"closedCaption\\\":{},\\\"deviceCapabilities\\\":{\\\"bluetooth_supported\\\":true,\\\"display_supported\\\":true,\\\"focus_state_supported\\\":true,\\\"hi_res_audio_supported\\\":false},\\\"launchingSenderId\\\":\\\"7f8b100d-a1fe-e60b-5a35-6feaa22976df.2:sender-l4koe754cbxf\\\",\\\"messagesVersion\\\":\\\"1.0\\\",\\\"sessionId\\\":\\\"46fd154e-f03d-4d58-986d-4998c43639a7\\\",\\\"type\\\":\\\"ready\\\",\\\"version\\\":\\\"1.30.113131\\\"}\",\"namespace\":\"urn:x-cast:com.google.cast.system\",\"senderId\":\"SystemSender\"}"
},
{
"time": 1064,
"ipcMessage": "{\"data\":\"{\\\"type\\\":\\\"LOAD\\\",\\\"requestId\\\":889570262,\\\"sessionId\\\":\\\"46fd154e-f03d-4d58-986d-4998c43639a7\\\",\\\"media\\\":{\\\"contentId\\\":\\\"http://localhost/source/test.mp4\\\"},\\\"autoplay\\\":true}\",\"namespace\":\"urn:x-cast:com.google.cast.media\",\"senderId\":\"7f8b100d-a1fe-e60b-5a35-6feaa22976df.2:152792770056491611\"}"
}]
}
其中contentId就是需要傳送的URL,type是操作類型,autopaly:true指定加載視頻完成後自動播放。