作者|冼牛
編輯|徐川
直播答題已經是風口,毋容置疑。對攻城獅們來說,2018 年春節是個坎,直播答題技術做細緻做到位了,才能安心過個好年。
為了應對這個挑戰,我們首先分析一下直播答題和傳統直播在技術上的不同,然後深度解釋一下直播答題解決方案的海量併發派題和收題。
直播答題和傳統直播在技術上的不同
1. 海量併發派題
2. 海量併發收題
3. 視訊和答題同步
4. 主持人背景特效
直播答題:海量併發派題和收題
首先,我們看一下直播答題的業務流程:
1.主持人發出派題指令;
2.題目資訊通過實時通訊網路和實時分發網路送達給使用者;
3.VIP 使用者從實時通訊網路拉取題目資訊;
4.普通使用者從實時分發網路拉取題目資訊;
5.如題目資訊包含完整內容,則下一步,如果只有題目 ID,則到業務伺服器查詢題目內容;
6.使用者把題目答案提交給答題統計分析伺服器,同時得到標準答案反饋;答題統計分析伺服器是分散式的叢集,統計答題結果,反饋給主持人;
然後,我們看看各個網路服務實體的分工:
1.實時通訊網路:為實時傳輸而設計的網路,能實時傳輸海量資料,不只是語音視訊。它比實時分發網路(比如 CDN)的延遲更低,具有動態回源和對抗弱網等特點。
2.實時分發網路:為實時分發海量內容而設計的網路,優點是能支撐海量併發,成本相對也比較低,缺點是延遲相對於實時通訊網路要高一些。
3.答題統計服務:為統計使用者提交的題目答案而在視訊直播架構外設計的服務,能反饋標準答案,並且統計所有題目答案,最後反饋給主持人。該服務要能承受海量併發壓力。
4.業務伺服器:如果派題資訊包含完整題目內容,使用者不需要再查詢題目內容;如果派題資訊只有題目 ID, 那麼使用者要到業務伺服器查詢題目內容。該服務也要承受海量併發壓力。
最後,我們再分析直播答題中的關鍵環節:
1. 海量併發派題
2. 海量併發收題
收題的環節由使用者觸發,每個使用者答題的時間視窗不盡相同,因此每個使用者提交題目的時間有秒級的差別。然而,海量使用者在數秒之內提交答案,題目答案屬於重要訊息,不能做拋棄處理,伺服器的壓力也是巨大的。為了減少伺服器壓力,使用者的答題將會被就近提交到邊緣節點並且獲得正確答案反饋,整體的答題統計結果將會由分散式的伺服器叢集來完成,最後傳達到主持人端,使得主持人可以近乎實時地宣佈統計的結果。
3. 視訊和答題同步
通過實時語音視訊傳輸通道來派題的技術手段其實並不新鮮。在視訊直播的 K 歌場景中,主播 K 歌要儘量還原線下的體驗 -- 主播的歌聲、畫面還有歌詞必須要同步在使用者端顯示。歌詞資訊在主播端打點,通過實時語音視訊傳輸通道同步傳輸給使用者端。
另外,還可以為主持人的背景增加特效,甚至 AR 效果。主持人要在綠幕背景前進行節目主持。在採集和編碼之間的前處理環節,開發者獲得原始視訊資料,把綠色的畫面部分去除,把主持人的畫像扣出來,補充上動畫或者 AR 等特效處理後,再把視訊資料塞給編碼環節。使用第三方視訊直播 SDK 的話,那麼該視訊直播 SDK 必須要開放前處理介面,開發者才能獲得原始視訊資料,否則開發者沒辦法通過前處理的方式在視訊畫面增加特效。比如說,支援 WebRTC 的瀏覽器沒有開放前處理介面,那麼基於 WebRTC 的視訊直播方案在瀏覽器端就不支援在視訊畫面上增加特效。
4. 題目內容安全性
針對題目派送的方式,目前市面上有兩種第三方直播答題方案:第一種方案,技術方案通過實時語音視訊通道派送題目的全部內容,該方案的優勢是完全負責了派題的安全性和併發壓力,開發者不需要投入開發成本。第二種方案,技術方案通過實時語音視訊通道只派送題目 ID,使用者終端獲得題目 ID 後,到開發者的業務伺服器查詢題目內容。該方案的優勢是開發者完全把控題目內容的私密性。
以即構 ZEGO 的直播答題方案為例,如果題目內容小於 1000 位元組,也就是 500 箇中文字元,可以通過實時語音視訊通道傳輸所有題目內容;如果超過 1000 位元組,通過實時語音視訊通道傳輸題目 ID, 然後由使用者終端以題目 ID 從就近伺服器拉取題目內容。
如果第三方直播答題方案只派送題目 ID,開發者可以把題目內容快取在就近伺服器,通過題目 ID 獲取題目內容,增加的延遲很小,不會影響使用者體驗。然而,開發者要承擔查詢題目的海量併發壓力,還要實現題目內容的安全保護機制,比如說拉取題目要鑑權,題目傳輸要加密,和題目時效視窗的控制等,開發成本也就水漲船高。
寫在最後
視訊直播的魅力在於,它已經成為類電視的流量入口,類似開心辭典等在電視上被驗證過的業務玩法也會逐一在視訊直播平臺上嘗試和落地。如果說直播答題是視訊直播的第二春,那麼每年春天還會來,請不要意外。
作者介紹
冼牛,即構科技資深語音視訊專家,北京郵電大學計算機碩士,香港大學工商管理碩士,多年從事語音視訊雲服務技術研究,專注互動直播技術、語音視訊社交和實時遊戲語音。