挨踢部落直播課堂第五期:如何使用即構(gòu)SDK即時構(gòu)建實時語音視頻APP
原創(chuàng)網(wǎng)絡(luò)視頻直播存在已有很長一段時間,隨著移動上下行帶寬提升及資費(fèi)的下調(diào),視頻直播被賦予了更多娛樂和社交的屬性,人們享受隨時隨地進(jìn)行直播和觀看,直播已經(jīng)廣泛應(yīng)用于語音社交、視頻社交、互動直播和娃娃機(jī)直播等領(lǐng)域。
對于現(xiàn)在的直播領(lǐng)域來說,娃娃機(jī)成了新的時代驕子,如何實現(xiàn)同時推兩路流,低延遲等都是大家想要了解的重點了,那么,如何使用即構(gòu)SDK即時構(gòu)建娃娃機(jī)視頻APP呢?我們特此邀請到即構(gòu)科技資深前端技術(shù)支持主管盧愛輝老師做直播分享。
內(nèi)容簡介:
1.介紹即構(gòu)語音視頻的整個架構(gòu)
1) 應(yīng)用場景介紹
2) 架構(gòu)實現(xiàn)
3) 架構(gòu)圖說明
2.如何接入即構(gòu)語音視頻SDK(娃娃機(jī)場景接入)
1)娃娃機(jī)控制端接口調(diào)用
2)娃娃機(jī)APP端接口調(diào)用
大家好,這次分享的主題是最近很熱門的直播主題,如何使用即構(gòu)SDK即時構(gòu)建實時語音視頻APP。
![C:\Users\hexing\Documents\Tencent Files\211357701\Image\Group\DG0MM%B2N88TT~4MM]P$0$M.png](https://s5.51cto.com/oss/201711/14/238af9f547e02d52c613063f0037f2a3.jpg)
這邊先簡短介紹一下我們公司的背景,如下截圖。

大家知道,直播領(lǐng)域很廣,可應(yīng)用的場景也很廣泛,比如語音社交、視頻社交、互動直播和最近很火的娃娃機(jī)場景。我這里主要給大家分享一下如何用zegoSDK來做一個娃娃機(jī)的直播。
一、介紹即構(gòu)語音視頻的整個架構(gòu)
1) 場景介紹
咱們先看一下玩娃娃的線下部署:
兩個攝像頭,對著一臺娃娃機(jī),娃娃機(jī)推兩路,這樣的方式,就可以使操作者兩個角度看看娃娃機(jī)的視角。

用戶端APP做出來的效果示例:

支持:2個視角,100毫秒超低延遲,視頻和天車實時同步,這樣使玩家在操作的過程中體驗流暢,兩個視角就不至于看到的畫面太過于平面。
2) 架構(gòu)實現(xiàn)
接下來和大家說一下,這個直播場景的架構(gòu)實現(xiàn)。有兩端來說明:
一端是娃娃機(jī)端,娃娃機(jī)上是有一塊芯片,這塊芯片是Android系統(tǒng)的,大家可以理解為一個小的Android手機(jī)。
從以上娃娃機(jī)場景可見,娃娃機(jī)邊上有兩個攝像頭,說明娃娃機(jī)端需要推兩路視頻流出來。
另一端就是用戶APP端,用戶端可以是移動端,也可以是PC端。
用戶APP端:用戶端需要同時拉兩路流去觀看,一開始的時候,先隱藏掉一個view,大家看到一個畫面,當(dāng)點擊切換攝像頭的時候,就切換到另一個view去看另外的視角。
3) 架構(gòu)圖說明
這個架構(gòu)圖的意思就是:娃娃機(jī)端推兩路流,先推到zegoserver,然后再經(jīng)過分發(fā)網(wǎng)絡(luò),給普通的玩家去觀看,這個時候的延遲大概是1-2秒。
用戶端上,當(dāng)有玩家要上機(jī)去抓娃娃的時候,就上機(jī),zegoSDK內(nèi)部會切換到zegoServer去拉流,實現(xiàn)低延遲,此時可以達(dá)到100-300ms。
以下是整個架構(gòu)圖流的走向。
![C:\Users\hexing\Documents\Tencent Files\211357701\Image\Group\GNP(}[H6NL}~{D]S9Z0AQI0.png](https://s2.51cto.com/oss/201711/14/6a99fcbc5fde9e501a7606cd88aee6c1.jpg)
二、如何接入即構(gòu)語音視頻SDK(娃娃機(jī)場景接入)
接下來我們講解如何用zegoSDK來做出來一個APP,那就涉及到sdk接口層面的調(diào)用了。
1) 娃娃機(jī)控制端接口調(diào)用
首先初始化SDK,登錄房間:
![C:\Users\hexing\Documents\Tencent Files\211357701\Image\Group\]II@EZ]SN4P@}T(EXWI%9KJ.png](https://s1.51cto.com/oss/201711/14/38ca90d4a268f848a0fc8b23b655c305.jpg)
同時推兩路流:
![C:\Users\hexing\Documents\Tencent Files\211357701\Image\Group\U3J7$~P95QQN$K$Z%]UQD9C.png](https://s2.51cto.com/oss/201711/14/29259bcfd717e3ce0c16ed1dc012e89e.jpg)
![C:\Users\hexing\Documents\Tencent Files\211357701\Image\Group\5Y%`UQ$QC0BSI@RHI~IKG]U.png](https://s3.51cto.com/oss/201711/14/a0844a5ca169f78b28972947d2145443.jpg)
大家看到,推第一路流的時候,有調(diào)用enableMic設(shè)置為FALSE,這里是因為娃娃機(jī)端不需要將音頻推出去,因此將麥克風(fēng)關(guān)閉。
第二路流默認(rèn)就是不推送音頻的,因此不需要再繼續(xù)調(diào)用這個接口了
2)娃娃機(jī)APP端接口調(diào)用
推完兩路流之后,用戶端就可以進(jìn)來觀看了,用戶端也是一樣,是需要先初始化SDK和登錄房間的。
進(jìn)入這個房間后,就可以開始觀看
![C:\Users\hexing\Documents\Tencent Files\211357701\Image\Group\AIIJ4G9RI0XPI34(`S88]2M.png](https://s4.51cto.com/oss/201711/14/71ae8f854ab1b3864f4c63872ef6879b.jpg)
進(jìn)入房間后,某些用戶就想要上機(jī)進(jìn)行抓娃娃,接口調(diào)用:

上機(jī)后,那就要開始控制娃娃機(jī)的天車,要進(jìn)行左右前后的移動,然后開始抓,這個信令就是通過我們的接口sendCustomCommand去實現(xiàn)的。
玩家上機(jī)抓完娃娃之后,無論咱們有沒有成功抓到,就要下機(jī)了,下機(jī)的接口調(diào)用就如下了:
下機(jī)之后,如若想繼續(xù)上機(jī),可以重復(fù)上面的上機(jī)接口流程,如果下機(jī)之后,玩家不想繼續(xù)觀看了,就可以結(jié)束觀看,退出房間。
![C:\Users\hexing\Documents\Tencent Files\211357701\Image\Group\Z[$NA3J$W{FJVN4L$][8OEW.png](https://s2.51cto.com/oss/201711/14/7625001039eb77332878732e09eba2a7.jpg)
3) 娃娃機(jī)控制端接口調(diào)用
用戶端發(fā)送了一些自定義的消息給娃娃機(jī)端,娃娃機(jī)端接收到之后,就要轉(zhuǎn)換為芯片上娃娃機(jī)能夠識別的串口指令了,娃娃機(jī)這端收到的這些指令的接口就是onReceiveCustomCommand。

說完APP端的接口調(diào)用,娃娃機(jī)這端咱們還差了一個結(jié)束推流,SDK接口調(diào)用如下,因為娃娃機(jī)推了兩路,因此結(jié)束的時候也是要結(jié)束兩路的,最后退出房間。

咱們總結(jié)一下調(diào)用的主要流程:
娃娃機(jī)端:
1. 初始化SDK
2. 登錄房間
3. 開始直播,推第一路流
4. 開始直播,推第二路流
5. 接收來自APP端的指令
6. 結(jié)束直播,退出房間
用戶端:
1. 初始化SDK
2. 登錄房間
3. 拉流觀看
4. 上機(jī)操作,升級為玩家
5. 下機(jī),降級為觀眾
6. 結(jié)束觀看,退出房間
以上就是整個sdk接口的調(diào)用,即構(gòu)的娃娃機(jī)方案,咱們可以去免費(fèi)下載Zego的Demo試用。
![C:\Users\hexing\Documents\Tencent Files\211357701\Image\Group\XTC39}LKZB8C3LCUP[_0]BW.jpg](https://s2.51cto.com/oss/201711/14/f9fe5f6b683aa831167a3bc5daf85217.jpg)
iOS版本>>
安卓版本>>
同時,娃娃機(jī)的具體方案介紹和流程圖說明,大家也可以上我們官網(wǎng)參考:
https://www.zego.im/html/solution/wawaji.html
https://www.zego.im/html/document/#Application_Scenes/WaWaJiClient/Overview
以下問題是來自51CTO開發(fā)者社群小伙伴們的提問和分享:
Q:Java-Eason-福建:rtmp推流嗎
A:即構(gòu)科技盧老師:我們推流是先走zegoserver,因此是先走我們udp的私有協(xié)議推流,最后轉(zhuǎn)推到分發(fā)網(wǎng)絡(luò)的時候,是走的rtmp推流。
Q:Java-Eason-福建:他說的對不對哦

A:即構(gòu)科技盧老師:具體是什么型號的芯片這個依據(jù)廠商來的,芯片上裝的是Android系統(tǒng),Android系統(tǒng)上裝一個控制天車的APP,同時這個APP也是用于推流的。
Q:Java-Eason-福建:娃娃機(jī) 與 兩個攝像頭 是連接在一起的吧
A:即構(gòu)科技盧老師:是的,是通過芯片上的串口連接在一起的。
Q:Java-Eason-福建:應(yīng)該跟阿里云的視頻直播是一個原理的吧
A:即構(gòu)科技盧老師:阿里云有視頻直播,但是沒有連麥,他們的延遲也無法實現(xiàn)像ZEGO這樣的低延遲。
Q:數(shù)據(jù)-unicorn-北京:SDK是直播+互動的對吧?是否支持視頻會議?主播只能有一個?是否支持多個主播?
A:即構(gòu)科技盧老師:是支持視頻會議的,視頻會議用的也是同一個SDK,實現(xiàn)低延遲。視頻會議其實就是多個主播在一個房間內(nèi)互動推流和拉流,走zegoserver推拉流,這樣實現(xiàn)低延遲。因此多個主播也是OK的。
Q:數(shù)據(jù)-unicorn-北京:請問收費(fèi)標(biāo)準(zhǔn)是什么?比如視頻會議。支持同時在線終端有幾個?
A:即構(gòu)科技盧老師:收費(fèi)標(biāo)準(zhǔn)的話,咱們可以官網(wǎng)聯(lián)系我們的商務(wù)同學(xué)具體咨詢。 視頻會議支持12個終端同時在線視頻聊天。
Q:PHP-Coeus-安徽:有H5端的SDK嗎? 我看到有H5的,但是并沒有找到文檔和H5的SDK。

A:即構(gòu)科技盧老師:文檔是在我發(fā)的這個鏈接里面,我發(fā)給您:
https://www.zego.im/html/document/#Application_Scenes/WaWaJiClient 這個鏈接里面有demo的下載,也有SDK的下載

關(guān)于H5的SDK,目前我們已經(jīng)有了方案,在這個月底就會有成品出來,可以直接在H5上使用。
Q:java-Eason-福建:如果PC端推流要怎么做?必須跑在APP上嗎?場景不同。
A:即構(gòu)科技盧老師:PC端我們也是有SDK的,PC端提供的是C++的接口,在sdk的基礎(chǔ)上你們開發(fā)一個客戶端出來就可以。PC端的話,就是電腦的USB接多個攝像頭,有異曲同工之處。只是PC端的話,可能成本上稍微會更貴一些,因為一個安卓板子的錢肯定比一臺電腦的錢便宜,是吧。
我上面是以iOS為例說的,iOS上我們提供的是OC的接口,Android上提供Java的接口,PC上提供的是C++的接口。
Q:java-Eason-福建:娃娃機(jī)控制推流的開關(guān)是 娃娃機(jī)啟動的時候就開著呢 還是有客戶連上的時候開始推流?
A:即構(gòu)科技盧老師:娃娃機(jī)啟動的時候就要開始推流的,因為不一定客戶什么時候進(jìn)來,所以一開始就要開著。
Q:網(wǎng)絡(luò)-小王-廣州:如果接入APP,底包會占多大空間?
A:即構(gòu)科技盧老師:SDK的大小,Android在7M左右,iOS動態(tài)庫在10M左右,iOS的話,打包出來的ipa大概在6M左右。SDK大小的我們?nèi)栽谶M(jìn)一步優(yōu)化。
Q:數(shù)據(jù)-unicorn-北京:視頻會議是否支持私有云部署?
A:即構(gòu)科技盧老師:支持的。安全性比較高的,我們都可以考慮私有化部署,你們提供對應(yīng)的機(jī)器集群就可以。
【51CTO原創(chuàng)稿件,合作站點轉(zhuǎn)載請注明原文作者和出處為51CTO.com】

























