如何在小程式上增加音視訊?

騰訊雲加社群發表於2018-04-08

歡迎大家前往騰訊雲+社群,獲取更多騰訊海量技術實踐乾貨哦~

本文首發在雲+社群,未經許可,不得轉載。

作者:常青 | 騰訊視訊雲終端技術負責人

2017年第四季度,騰訊雲終端團隊和微信合作,將騰訊雲多年積累以SDK的形式落到微信上,從而開放了音視訊能力。今天我主要跟大家介紹一下關於小程式的音視訊,然後先做一下自我介紹。我也是騰訊雲的同學,我們有一個非常不錯的視訊雲,大家看到的直播、點播包括實時通話等場景應用都是在騰訊視訊雲落地的。我這邊主要負責視訊雲終端技術這一塊的事情,這一塊今天也是圍繞著老本行,跟大家談一談我們怎麼樣把音視訊技術在小程式上進行落地。

今天主要是這幾個部分,首先我們為什麼要幹這個事情?因為很多朋友就說騰訊雲講這個東西一點不感興趣我不要聽,因為並沒有那個需求。其實我們可以看一下再說,這裡面有很多細分的場景,有很多的商業價值和挖掘空間的。

值得注意的是今天的主題主要講原理,講一下技術路線。這一塊主要是分享了,沒有太多打廣告的意思。如果大家有時間可以耐心的聽下來,我覺得是不錯的。如果你之前沒有了解過,我估計聽下來你也可以成為半個音視訊專家。最後我講一講快速的落地,黃老師剛說的WEBRTC我一直在用,它可以實現一個目標,讓我一個人可以搞定一個很不錯的東西,在此之前至少是兩個人,一個前臺一個後臺。

小程式的優勢大家都知道,沒有安裝成本,比如說平時去刷的百度的貼吧,你點開廣告你就沒有慾望去繼續下載了。這些廣告都是需要閃現的,到底有多少人裝?這是一個數學遊戲。

還有一些低頻剛需的場景,如果你真的解決了APP的安裝問題,比如說剛才黃老師也講的摩拜單車,你以前沒裝APP,如果在多裝這個APP真的會崩潰。所以這個時候這個場景就很有用。還有一個其實剛才說過,廣告效應非常好,大家有沒有刷朋友圈的時候遇到長按掃描二維碼進入我們的介紹頁或者介紹的小程式的情況,有很多的廣告在小程式就是通過這個方式進行傳播的。第一是在朋友圈傳播的效果其實會容易,第二資訊的傳遞比較好。

它既然有那麼多好處,我這邊自然會想我們的音視訊這一塊田地怎麼去結合,如何去做這麼好的場景?說我們有直播、點播還有音視訊的應用。直播如映客、花椒、鬥魚等,點播如優酷、土豆、愛奇藝,還有視訊,微信上大家開視訊會議。這些場景結合微信小程式有很大的市場前景?

雙面音視訊

說一下雙面音視訊,如果兩個人聊就是兩個朋友或者關係很好的人,這叫交友。如果不認識的人聊,以前叫裸聊,這都是不健康產業。但是如果放在企業裡面,放在客服系統上這就完全不一樣了,比如線上的客服系統,就有很大的優勢,相比於傳統的一些電話系統。我們可以看這樣一個場景,早晨開車上班,遲到了老闆沒有等到回報,很著急。這時候車擦了,你等著定審的人過來,堵塞交通一兩千就罰掉了。這個時候特別希望線上視訊就可以解決。我們有很多客戶嘗試使用APP解決相關問題。但是很多使用者牴觸心理很強。如果這個時候你跟他說點個連結,在小程式裡面搜一個什麼什麼保險,就可以完成這個簡單的流程,後續接入視訊通話,在這裡拍一個照,然後那邊定損人員一看你權責,他權責,這樣保險公司和使用者都很喜歡。

再講一個遠端評審,之前我們跟法院合作還有這樣的案例。法院在大城市裡,原告被告分別是農村兩個小夥子,因為一點瑣碎的事情吵架。其實法院只需要簡單遠端做一個事情,這麼一點小事,你非到大城市裡面打官司,一場官司沒有那麼容易打的。後續還要來回跑好幾趟。現在農村4G和WIFI覆蓋面也不錯,法院只需要遠端解決的事情,這裡面有很大的商業空間和利潤空間。

這些場景有很多的可以結合的點,我們的功能非常多,直播、點播都有,這個成本很低。

原理

我今天的重點就是講一下原理,這一部分其實是重頭戲。

這一塊實際上在講這個東西之前先說一下故事,跟微信團隊也是有一個合作,當時我們希望騰訊雲的技術直接放在微信的APP裡面去。微信的同學就說我們提一些要求,就是像美國的國防部給別人去提要求,你需要達到多少技術指標,要求非常高的。微信提了幾個標準,第一簡單易用,第二要可擴充套件、可定製,我們的開發者可以拿到做各種場景的需求,第三實現音視訊直播,第四,第五、第六、第七、第八、第九,我覺得這個需求太誇張了。

我這個人喜歡被挑戰。你知道前蘇聯卡拉斯克夫曾經做了一把很牛的槍,這個武器在當時越南打阻擊主要的武器,其實很大一個就是在設計理念上簡單。像阿富汗那個小作坊幾個老頭就可以做。第二可靠;從不卡殼,關鍵時刻站住,一按就出來。不像印度造的槍,該打的時候打不出火來。威力很厲害。這把槍的設計理念我們應該去延續。

我們也在想,我們能不能去想想怎麼設計這樣一個理念,做這樣很有優勢的一個解決方案。最後結果當然比較理想,我們算是朝這個方向做了一些努力,也做了一些成績。

首先技術架構就不說了,說說我們在微信裡面內嵌了音視訊元件吧,它是一個免費使用的版本,這個產品我們已經打磨了已經有兩年多了,而且現在每個月都一兩次更新。而且這裡面SDK有兩部分組成的,一個是音視訊上行,另一個是音視訊下行。

上行解決什麼問題?上行叫推流,就是把本地的畫面經過採集然後進行預處理,有人可能問處理要幹什麼?比如說美顏,這個很接地氣的需求。再有要降噪,聲音也需要降噪,可能音訊其他背景很不好的情況下,聽著也很不舒服了。然後再進行編碼,我們需要以數量級十倍、二十倍把這個資料量壓下去。再最後通過網路模組傳到雲端上去,現在基本上音視訊研發都是依賴於這個的,但是效果和穩定性都比較查,不過現在網路成本已經開始降下來了,所以沒必要再這樣做了,現在直接就可以使用騰訊雲。

然後下行,俗稱拉流。原來上去的,現在下來,這個就叫播放。播放的話,其實就是從上至下,尤其是網速時快時慢時候,你會發現播放一卡一卡的,這種效果優化就不好,所以一定要加一個快取,像一個蓄水池一樣,合適的時候在優化,再進行解碼,進行渲染。

有了上行,有了下行,有了播放,這就是架構。微信裡面從標籤到下面的SDK,再到網路再到另一端,這樣就把這個鏈路串起來了。有了鏈路之後我們相當於有了兩個基本的原則,就可以組合成多彩的事件。

技術演化,第一個就是播放對應上行,有了這兩個標籤之後我們靠雲在中間就進行直播功能,就是大家看到映客、鬥魚、花椒等可以體驗一下,基本上可以把該有的東西都做到,包括各方面的這些訊息、還有各方面的延遲都是很好的,但是全屏效果不如做的原來的做的好。

這個方案為什麼我說要加個雲呢?我手裡的這個麥,是整個會場的音訊系統的一個部分,它負責把聲音採過去,其實就像我剛才說的推流,進行一個處理。我估計在這個地方會有一個數字處理電路,會對聲音進行一些清洗相應的整合,然後再教給後面的系統進行逐級放大。逐級放大是什麼程式?可能我們騰訊雲的全國上萬臺機器,全國各地都要看要擴大到一萬臺機器。你可以把雲當成訊號放大器,將一個單點的圓,無限的拷貝,讓每一個人都能在就近的一個機房裡面拉到一個高質量的音視訊流,這樣就可以解決卡頓的問題和流暢性的問題。

當您有了這樣一個放大器之後,加上上行和下行,才能構建出一個高併發的解決方案。好處是比較便宜,像騰訊雲價格可以看一下,價格很低。再加上它的質量很不錯,而且可以做多清晰度的切換,但是因為有很大的資料,所以延遲至少2秒以上。

接下來我們就開始做能力+,做升級。直播場景搞出來了,但是DS場景還需要做的。DS場景什麼時候需要?我現在要做遠端調控,2017年線上夾娃娃場景,要求是極其苛刻,這個延遲是極高的,300毫秒行不行?如果你能做到100毫秒真的很牛,所以我們要加科技點了。我們想了兩個方案,一個是UDP加速,一個延時控制。娃娃機是一個遠端遙控,正常看是2到5秒,真正的機器要求是500毫秒以內把它傳遞到機器那面過去。這個其實我們要需要做什麼樣額外的科技點的積累呢?UDP協議當時設計者設計的時候是本著天下為公的理念。所以大家的理念就是你讓一讓,我讓一讓,這個場景就變成一個問題,稍微一堵,它就開始網速就下來了。你來做高延時的場景是會被傷掉的,有時候非常希望脾氣硬一點。那怎麼辦呢?我們可能要換一下,我用UDP。當網路差我也要繼續發。第二個顏色控制,這個功能其實讓我們騰訊雲在去年年底做風險大會的時候,解決方案是傲視群雄的,延遲控制不用對著時間戳,因此我們保證了直播到觀眾的延遲控制在3s以內。

有了這樣一個鏈路,遠端的遙控、遠端的互動都可以做,但是這還是單向的。

有了單向的東西,又延遲又很低,我跟你一路延遲很低的單向,你再跟我一路,我們們這個事情是不是就搞定了?所以專業音視訊功能就出來了?其實沒有那麼簡單,我們還需要修很多的科技點。噪聲、消除、迴音抑制等。

我們們先說一路上行,一路下行是單向,兩路就RTC模式,現在模式選擇RTC之後,兩邊的延遲都是500毫秒,雙向通話就可以解決了,背後在技術層面我們需要做這樣一個東西。比如說假設我的延遲有點大,那麼延遲控制小一點不行嗎?但是資料丟了效果一定非常差。大學的時候老師會說音視訊解決方案你用UDP就行了,但是壓縮後的編碼和資料真要丟了就解不出來了,所以真不能丟。那怎麼辦呢?我們可能就是要在你察覺不到的地方把時間給縮回去。我現在在說四五十分鐘的演講,中間漏掉一兩個字大家都能接受。我們做的是刪掉多餘的時間空隙,人說話裡面是有大量的空隙是可以做文章的。比如說我們可以在這各點上做點文章,把我們認為不太重要的資料切掉,這樣的情況下聲音也沒有褶皺,,感覺跟原來有一點點不一樣,但是內容很正常。所以在這種情況下我們的時間也壓回去了。

雙向音視訊的時候有時候會有破音、爆音的問題,解決這種問題的時候功能學的角度也是比較簡單的,我要把聲音變的柔和一點,做一些回聲抑制,比如說我現在說話,你看他沒有一個勁的迴圈,其實裡面是有迴音消除的電子元件的。我們要上就是軟體解決方案,就是把本來播出去的聲音給它消除掉,這樣就會做到回聲抑制,否則兩個人打電話就會聽到無限回聲。

以上聲學處理的部分不是一兩天能搞定的,,這一塊以你可能要養一個研發團隊,這個團隊有很多聲學專家、音視訊專家,現在小程式有好處就是RTC搞定。我覺得我們還是做了一件相對比較技術普世的東西。

有了這個雙向音視訊之後,我們繼續把技術往上提,把房間這個IM也拉下來。因為雙人你一路我一路,很簡單,很清晰,多人的時候,就很麻煩,所以不能這樣玩,所以需要一個總控系統,去協調各個端的狀態,協調各個端的輸出,然後包括誰說話,誰不說話進行一些協調,這個就需要有一個房間的概念,房間的管理。再加上IM,做的程式,就可以把多人的解決方案搞定了。

其實多人解決方案裡面服務端要多做一些事情,還需要一個類似於房間管理的概念,把A、B、C三個人拉里面,進行狀態同步。我們其實在小程式裡面沒有內建這麼多的東西,其實有一點是說微信以簡單為主,不要搞的那麼複雜。所以就提了一個rtcroom解決方案,就是附及一些額外的邏輯,這一塊在騰訊雲移動直播解決方案裡面是可以找到相應的東西的,或者在小程式音視訊裡面也可以找到相應的資料。


​這一部分說完我們整個技術路線就走下來了,從簡單的直播到DNS再到雙向,其實大部分音視訊的場景都可以涵蓋了。但是這個時候有人跳出來跟我說,我們做Webrtc的,蘋果也跟它搞在一起了。這個時候我們想說一下區別,然後我們是怎麼優化Webrtc的。

區別的話,現在你如果直接在微信裡面去做Webrtc還是有很多限制的,第一個瀏覽器核心,在不同的手機可能不太一致,碎片化嚴重。蘋果是內嵌,如果這個東西你要用的話,小程式沒辦法實施。目前在Webrtc這一塊它的任何功能的加持都是蘋果和谷歌兩邊達成一致,這個過程是很漫長的過程。所以在小程式這一塊就是做一些接地氣功能,不會去看蘋果爺爺和谷歌爸爸的眼色。

再有就是說在設計理念上也會有一些不同,Webrtc很多理念都是基於不可靠鏈構的,我們小程式是可以用比較廉價的雲解決的,這是跟Webrtc的對比。

我們不是競爭,我們其實是可以跟Webrtc可以搞成一家的。騰訊雲後臺最近打算把兩套系統打通,微信4月份版本釋出之後,你們就可以在小程式上和Chrome進行互通。這一部分有點難,有興趣的朋友可以看一下解決方案還是有技術含量的。

說到打通之後,這涉及到另一套解決方案,小程式+Webrtc,這一塊在原來基礎上把協議換成rom打頭的就可以了。

快速上手,原來需要給他搭後臺,搭前臺,非常痛苦,現在大家可以直接在黃老師的系統上直接可以找到相應的包,我們可以把裡面的包傳上去。而且除錯特別方便。我今天分享就到這兒,看看大家有什麼問題。

Q/A:

Q:我作為一個個人開發者,比如看有時候個人開發者一些開放內幕,比如說音視訊相關的這些沒有開放,我想開發這樣的產品,它需要辦理資質的成本很高。所以小程式在音視訊這方面將來會不會更開放,讓成本更低一點。

A:好像有一些比較簡單的,你看直播內幕是很難。實際上我是非常希望它全開放的,我也主動找了好幾次微信的領導談這個事情。微信的同學給我說了一個很現實的擔憂,以前做APP如果出現涉黃涉政跟APP沒關係,所以這個問題他們是非常謹慎的。這裡面其實資質的提交核心就是一個問題,如果出現問題靠這個資質我們會在這邊做一個控制手段,它只是想做一個自保的方案。個人開發者是個人相關除錯的能力,還有一些內幕的話,相應來說其實是比較容易去提交上去的。

Q:點播和直播都會在中間加上快取做嗎?

A:實際上快取是比較少的,像優酷、土豆是點播,視訊是傳上去,你可以從中間看,開頭看,這是點播。直播是我現在攝象頭開著,實時往上傳,如果你多了之後可能產生跟高的延遲。騰訊內網是打通的,沒必要做那麼多快取,真正快取主要是大家剛剛看到播放這一塊,這一塊會有我們的快取區,這裡面有一系列的優化演算法,這個是多大然後來去做快取。其實整個系統裡面唯一的快取就這一塊。

Q:我剛才想加快取就是延遲性變高了。還有常老師提到涉黃涉政這一塊,您在演講的時候說對聲音處理就可以做到每秒鐘間隔就可以停調了,做視訊的時候,會有一些美顏,這樣這些內容你們的把控性其實很高的。這樣的話,在中間到了類似於關卡那種,檢測出涉黃涉政的直接就可以遮蔽掉了。

A:現在有這種系統,這種系統需要人為干預。我現在是這樣一個態度,目前還沒到完全撒手不管的狀態,現在是有誤報的,主持人可能是我的狀比較黃,所以涉黃了,這就需要人為過一道,這裡面就有延遲。先把人為舉報到檢測系統,觀眾越多的線路,你誤報產生的代價越高。

Q:因為在做直播的話,雖然可以做一些涉黃、視訊的處理,通過一些AI和監控,我們有沒有可能做一些錄播,如果一旦出現什麼事情的話我們還要出現一些舉證。您說的東西在我們平臺上是有直接的需求的。

A:是錄播嗎?

Q:直播的情況下有沒有可能錄播?

A:這個肯定沒問題,因為所有過雲的,只要您說開一個按鈕開了就可以全錄下來,或者說從幾點到幾點錄這個都是沒問題的。但是在雲解決方案的時候你可以把它搬過來,就是在技術含量比較高的地方,你要把音視訊重新緩一下,比如說金融開戶、還有法院都是錄下來的,唯一問題是錄是有成本的,是需要付費的。我們相應推錄製的時候政用是開放的,商用就不是開放的。 其實像我們很多大客戶一年成本頻寬佔一部分,還有他存一個月,這個量非常大。

問答

短視訊可以通過什麼技術接入小程式?

相關閱讀

劉翌:如何利用小程式技術解決企業銷售難題

李明:微信小遊戲技術分享

餘國良:微信小遊戲的架構設計與開發

此文已由作者授權騰訊雲+社群釋出,原文連結:https://cloud.tencent.com/developer/article/1084503?fromSource=waitui


相關文章