標籤:

如何使用即構JS SDK快速上線在線抓娃娃H5產品?

此前,我們正式發布了在線抓娃娃H5一站式解決方案《即構科技在線抓娃娃H5方案正式上線,400ms超低延遲,完美兼容微信!》,得到了不少創業者的青睞,本文我們則將從開發者的角度著手,給大家從實操角度分享具體該如何使用即構的JS SDK快速搭建在線抓娃娃H5產品。

即構在線抓娃娃的系統架構圖

圖 1 即構線上抓娃娃H5方案架構圖

首先我們先了解一下即構在線抓娃娃H5方案的的實現過程,如圖1 所示,左上角是用戶端H5應用, 右下角是娃娃機。娃娃機端有兩個攝像頭(可以擴展到3個,增加一個俯視的攝像頭),一個傳輸正面影像,另一個傳輸側面,開發者可以自定義正面和側面。即構的SDK和業務層應用跑在娃娃機端的硬體板子上。用戶端H5應用跑在瀏覽器上(比如說微信瀏覽器),包含即構的SDK還有業務層。

直播抓娃娃

娃娃機側的安卓板子通過攝像頭採集, 推送兩路視頻流到即構實時視頻傳輸網路。用戶端H5應用從即構實時視頻傳輸網路拉流播放,可以獲得400ms左右的低延遲。為了實現在H5上的普適性,在即構實時視頻傳輸網路和用戶端H5應用之間加入接入伺服器,把傳輸協議從基於UDP的私有協議轉成WebSocket。在H5上通過JSMpeg播放器來播放。

信令操控天車

用戶側H5應用通過即構的實時信令傳輸網路來發送信令操控娃娃機端的天車(抓娃娃),延遲大約在400ms左右。信令控制和視頻傳輸會進行同步,保障天車操控的時候,眼手配合的靈敏度。構的實時信令傳輸網路通過HTTPS來傳輸實時信令,為了適配用戶側H5應用,中間加入接入伺服器,把HTTPS協議轉成WebSocket。

適配所有瀏覽器

為了保障即構線上抓娃娃H5方案能夠普遍的適配所有瀏覽器,即構團隊在視頻網路完成視頻轉碼,把視頻轉成MPEG1。然後,在用戶側H5和視頻網路之間加入接入伺服器,把基於UDP的私有協議轉成WebSocket。接著,在H5上採用JSMpeg播放器來渲染。最後,加上即構的方案在瀏覽器側做了深度的視頻,保障了即構H5抓娃娃方案能否適配所有的瀏覽器,包括微信瀏覽器。

即構的方案對所有瀏覽器都採用以上的方法來適配,這樣可以保障全面的普適性。如此全面的普適性要歸功於即構完全自研的技術方案。如果是通過WebRTC開源代碼改過來的方案,只能適配少於30%的瀏覽器(Chrome、Opera和Firefox等),而且不被微信支持。這種基於WebRTC的方案如果要適配微信,就必須專門為微信瀏覽器重新實現,通過JSMpeg和WebSocket的方式來嫁接到微信瀏覽器上,普適性和穩定性方面都是沒有得到保障的。

如何快速集成即構的JS SDK

在集成SDK之前,我們先看一張API時序圖,了解一下大概的調用流程。

圖 2 娃娃機用戶端API調用時序圖

首先,引入我們的SDK。

第一步,調用config介面,配置各個參數,如appid,idName等等。

第二步,配置好後,調用login介面進行登錄操作,我們可以在登錄成功回調函數中獲取流信息,從中得到streamID,而後直接調用startPlayStream介面開始拉流。

第三步,娃娃機一般會同時推兩路流,一個正面,一個側面,觀眾進房間會同時播放兩路流,但是我們會先隱藏一個,在點擊切換視角的時候,同時切換隱藏的view。既然有拉流,就有停止拉流的介面,開發者可以調用stopPlayStream介面停止拉流。

第四步,用戶看到視頻流後,可以調用sendCustomCommand介面發送指令與娃娃機進行交互。

第五步,調用onRecvCustomCommand事件介面,接收服務端針對「sendCustomCommand介面發送的消息」返回來的對應消息。

第六步,調用logout介面退出,並且銷毀canvas對象,釋放性能

說一千道一萬,不如我們實際操作來的印象深刻,下面我將用demo源碼來講一下SDK的集成細節。

首先,使用script標籤引入我們的SDK,然後在demo的js文件中,進行調用。我們的SDK暴露出來的是ZegoClient構造函數,開發者可以使用這個構造函數實例化出一個對象。

有了實例化對象,接下來我們按照demo的運行流程,一步步剖析。

1)調用SDK提供的config介面配置基本參數,有appid(每個應用的唯一標識)、idName9(用戶自定義id),nickName (用戶自定義昵稱),還有server參數(娃娃機伺服器連接地址)

2)配置好後,進行登錄操作,登錄前需要獲取token令牌,然後調用login介面。

login介面有五個參數:

roomid表示房間id;

第二個參數表示用戶角色 1是主播,2是觀眾;

第三個即登錄令牌;

第四和第五個分別是成功回調函數與失敗回調函數;

在成功回調函數中,會返回該roomID對應的房間流列表,開發者可以存儲起來等待後續調用。

3)登錄成功後,我們獲取到流列表,就可以調用startPlayingStream介面,播放視頻流了。該介面需要傳入兩個參數分別是流id和開發者傳入的原生canvas元素,不是jq對象的canvas,這裡要注意

4)用戶可以看到視頻後,要進行遊戲,這時候需要發送自定義消息/或者說指令,與娃娃機進行交互的指令,比如預約上機、確認上機、移動娃娃機的天車、執行抓取動作等等。

調用sendCustomCommand介面發送消息,該介面有四個參數:

第一個是anchor_id,表示該消息要發送給的目標對象,該參數類型為數組,該anchor_id可以在login成功回調函數返回的流信息列表中獲取;

第二個是自定義消息內容;

第三個和第四個分別為成功回調與失敗回調函數。

5)最後就是登出介面logout,該介面無需傳入參數

H5怎麼跑起來?去哪裡下載源碼?

demo源碼地址 :

github.com/zegodev/Zego

把目錄中的web/WaWaJiWeb/dist起一個伺服器,將dist目錄設置為根目錄即可體驗。

JS SDK 地址:

storage.zego.im/downloa

demo體驗:wwj.zego.im/

wwj.zego.im/ (二維碼自動識別)

H5方案專題頁面:zego.im/html/solution/w

zego.im/html/solution/w (二維碼自動識別)


推薦閱讀:

即構抓娃娃H5方案全球首家支持HTTPS,抓娃娃先從安全抓起!
線上抓娃娃方案的選型方法
有群「夾娃娃達人」3個月抓取布偶近1500個
秦緒文:抓娃娃項目竟能年賺百萬

TAG:線上抓娃娃 |