天天看點

ChromeCast Device Emulator的使用

最近在做自定義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即可。

ChromeCast Device Emulator的使用

二、安裝方法

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指定加載視訊完成後自動播放。