文 / 唐賡 整理 / LiveVideoStack 點(diǎn)擊觀看演講視頻,關(guān)注LiveVideoStack,回復(fù)『0422資料』,獲得此次此次分享的資料下載地址。 本文主要分為以下部分:
在經(jīng)歷了野蠻發(fā)展的2016直播大戰(zhàn)后,App端的技術(shù)扮演越來(lái)越重要的角色,好的技術(shù)可以讓App在大量同質(zhì)化的直播App中脫穎而出,讓用戶(hù)體驗(yàn)和用戶(hù)留存率顯著提升。 互聯(lián)網(wǎng)老碼農(nóng)、朝陽(yáng)區(qū)老群眾唐賡將在本次分享上介紹花椒直播App在手機(jī)端技術(shù)的探索和實(shí)踐、以及對(duì)未來(lái)的展望和思考。本文將涉及265、GPU技術(shù)、游戲級(jí)交互引擎、人工智能、深度學(xué)習(xí)等技術(shù)在直播中的應(yīng)用和展望。 一、直播興起的歷史 如今,隨著直播平臺(tái)如雨后春筍般的興起,一旦有大事件發(fā)生,新聞采訪(fǎng)時(shí)都是下面這樣的: 上面這張圖攝于2015年,我們也是其中之一。隨著國(guó)外直播平臺(tái)PeriScope和Meercat的成功,國(guó)人也發(fā)現(xiàn)了其中的機(jī)遇,于是紛紛效仿。 映客和花椒是國(guó)內(nèi)起步較早的直播平臺(tái),后面又有各種各樣的其它平臺(tái)出現(xiàn)。 二、摸索學(xué)習(xí)階段 基本情況 初期,我們的很多基本體驗(yàn)都是基于模仿的,甚至初期我們是完全照搬了MeerCat的模式。 最初的內(nèi)容比較繁雜,囊括了各種信息,包括達(dá)人才藝展示、授課、烹飪、雜耍等?;镜慕换シ绞骄褪屈c(diǎn)贊、分享、文字交流以及視頻,我們對(duì)自己的定位就是“視頻版微博”,包括界面的整體布局全都是效仿微博的,連按鈕位置和頁(yè)面布局都幾乎一模一樣。整個(gè)頁(yè)面的主要關(guān)注點(diǎn)在Feed流上面。 后在濾鏡比較火爆的時(shí)候,我們又加入了圖片濾鏡功能,然后又加入了自拍短視頻的功能。出于對(duì)社交的重視,我們又加入了私信功能。 在初期摸索階段,由于產(chǎn)品經(jīng)理以及開(kāi)發(fā)人員對(duì)整個(gè)App的定位缺乏明確的認(rèn)識(shí),我們只能采取跟風(fēng)做法,將市場(chǎng)上比較潮流的內(nèi)容一網(wǎng)打盡,全部加上去。 技術(shù)問(wèn)題 在這個(gè)階段,大家所解決的都是類(lèi)似的問(wèn)題: 1、硬編硬解 我們分析過(guò)映客,結(jié)果發(fā)現(xiàn)映客所用的硬編硬解代碼與我們所使用的一模一樣,連臨時(shí)文件的文件名都一模一樣。原因在于:我們所使用的都是同一套開(kāi)源代碼。 最初iOS8還不普及,大多設(shè)備都是iOS7系統(tǒng),想要做硬編硬解只能依賴(lài)系統(tǒng)的MovieWriter那套API(從磁盤(pán)的MP4臨時(shí)文件中讀取編碼結(jié)果)。為了解決問(wèn)題,當(dāng)時(shí)有一個(gè)外國(guó)人分享了一套開(kāi)源編碼,解決了硬編硬解實(shí)現(xiàn)的問(wèn)題,因此大家全都去用這套開(kāi)源代碼。后來(lái)到了iOS8,由于原生支持硬編硬解,這個(gè)問(wèn)題才不復(fù)存在。 2、看播花屏 類(lèi)似的問(wèn)題還有很多,現(xiàn)在看起來(lái)覺(jué)得很基礎(chǔ)的問(wèn)題,當(dāng)時(shí)卻是很大的問(wèn)題,比如看播花屏。丟了一幀再?gòu)?qiáng)行解碼,就會(huì)出現(xiàn)花屏的問(wèn)題。解決方法很簡(jiǎn)單,完全丟棄GoP里后續(xù)的內(nèi)容。 3、音視頻同步 根據(jù)我們對(duì)各家平臺(tái)的分析,所有直播平臺(tái)基本都不同步,只不過(guò)大家采用的方式各不相同。例如:將音頻視頻分開(kāi)采集,并分別通過(guò)不同的通道進(jìn)行傳播。在此過(guò)程中,我們需要盡量保證音頻是連續(xù)的,視頻相對(duì)就沒(méi)那么重要,這樣就會(huì)導(dǎo)致音頻和視頻總有些不同步。解決辦法就是保證時(shí)間戳準(zhǔn)確。 我們讓QA測(cè)試是否同步的簡(jiǎn)易辦法是,利用一支筆敲擊桌面,同時(shí)在視頻的那個(gè)瞬間,也必須要有聲音發(fā)出。相對(duì)于對(duì)口型等方式,這樣的方式更簡(jiǎn)單也更直接。 當(dāng)然,我們也嘗試了很多其它方案,不過(guò)利用不同的方案去采集聲音,時(shí)間戳總會(huì)有些問(wèn)題存在。在這個(gè)階段,我們做了很多嘗試,一個(gè)個(gè)解決掉了這些問(wèn)題。 4、降低看播錄播CPU消耗、直播間CPU總消耗 起初我們并沒(méi)有意識(shí)到這個(gè)問(wèn)題,結(jié)果上線(xiàn)后突然出現(xiàn)了卡頓等意外。經(jīng)過(guò)深入分析,我們發(fā)現(xiàn)這是由于CPU的消耗非常嚴(yán)重引起的。實(shí)際應(yīng)用與測(cè)試環(huán)境不同,由于實(shí)際環(huán)境下使用人數(shù)眾多,點(diǎn)贊、發(fā)言、送禮等操作都會(huì)對(duì)CPU造成巨大的消耗。 通過(guò)模擬,我們找到了各種各樣的性能瓶頸,并一點(diǎn)點(diǎn)地改進(jìn)。彼時(shí)大約有50%的因素是因?yàn)榭蛻?hù)端CPU消耗太高,導(dǎo)致推流時(shí)會(huì)出現(xiàn)卡頓。 5、回放/回放彈幕優(yōu)化 剩下的問(wèn)題在于服務(wù)端,類(lèi)似回放、回放的彈幕優(yōu)化等問(wèn)題都有可能造成卡頓。 有一次我們請(qǐng)了范冰冰來(lái)做直播,平時(shí)的彈幕文件也就是幾兆而已,結(jié)果那次彈幕文件的大小達(dá)到了200多兆。讀取要花費(fèi)很久,即便讀取成功,下載的彈幕文件在載入時(shí)也會(huì)出現(xiàn)內(nèi)存超過(guò)限制,隨后閃退的情況。類(lèi)似這樣的問(wèn)題層出不窮,我們也只能一個(gè)個(gè)解決。 6、私有協(xié)議與公有協(xié)議、TCP與UDP 在這個(gè)階段,我們摸索了很長(zhǎng)一段時(shí)間,包括究竟用私有協(xié)議還是公有協(xié)議,究竟用TCP還是UDP等等。不過(guò)事實(shí)上到現(xiàn)在,這些問(wèn)題仍舊存在。我們的線(xiàn)上還是既有私有協(xié)議又有公有協(xié)議,既有TCP又有UDP。 私有協(xié)議的好處在于,我們可以肆無(wú)忌憚地加入各種各樣的功能,包括對(duì)其進(jìn)行優(yōu)化,性能調(diào)試等,但公有協(xié)議的好處在于它支持CDN,各家CDN都可以拿過(guò)來(lái)直接使用。我們自己的CDN只在國(guó)內(nèi)一些大城市有,像奧運(yùn)會(huì)這樣的活動(dòng),如果要去巴西,或者要去直播歐洲杯,都要借助其它的CDN。 TCP和UDP的問(wèn)題在于:UDP的性能比TCP好得多,沒(méi)有超時(shí)重傳這些消耗。而且TCP還有一個(gè)問(wèn)題,就是可靠連接的問(wèn)題。它必須要確保數(shù)據(jù)到達(dá),一旦出現(xiàn)阻塞,要想放棄的話(huà)就只能把鏈接斷掉。 7、回放錄制,HLS生成 一般來(lái)說(shuō),如果網(wǎng)絡(luò)不好的話(huà),信息流經(jīng)常會(huì)出現(xiàn)斷裂以及缺失。如果錄制的回放中有缺失,生成HLS之后,通過(guò)一些私有播放器是可以正常播放的,但之前系統(tǒng)的播放器是無(wú)法播放這類(lèi)視頻的。 當(dāng)時(shí)我們想了很多辦法,包括重整時(shí)間戳,進(jìn)行其它的處理,都是為了解決播放的問(wèn)題。不過(guò)現(xiàn)在就沒(méi)關(guān)系了,用我們自己編寫(xiě)的播放器來(lái)播放,是始終可以正常播放的。 8、秒開(kāi) 放在以前,大家點(diǎn)進(jìn)去以后等一兩秒再打開(kāi),都覺(jué)得挺快了。但現(xiàn)在來(lái)講,超過(guò)三百毫秒都不合格。秒開(kāi)應(yīng)當(dāng)是所有直播軟件必備的功能了。 在改進(jìn)時(shí),我們通過(guò)抓包分析,了解從點(diǎn)擊到視頻的第一幀展現(xiàn)之間,都發(fā)生了哪些事情,再把所有不必要的東西全部拿掉。例如之前先點(diǎn)進(jìn)去的話(huà),可能要去找對(duì)應(yīng)的流服務(wù)器,需要通過(guò)302跳轉(zhuǎn)。而現(xiàn)在在廣場(chǎng)上就把類(lèi)似這些所有的必要信息全都拿到。點(diǎn)擊后,原本打開(kāi)直播間時(shí)要加載頭像、豆幣等內(nèi)容,但為了實(shí)現(xiàn)秒開(kāi),這些全部要讓道,所有東西必須等到第一幀展現(xiàn)出來(lái)以后才開(kāi)始進(jìn)行。 根據(jù)我們的分析,映客App做得更多一些。從手指向上滑的時(shí)候就開(kāi)始切換,當(dāng)手指落點(diǎn)超過(guò)屏幕的1/3后,就會(huì)開(kāi)始加載下一個(gè)直播。這樣一來(lái),借助偷跑的零點(diǎn)幾秒,它的秒開(kāi)性能更加優(yōu)越。 其它優(yōu)化問(wèn)題還包括CDN優(yōu)化,使用成熟的CDN廠商會(huì)帶來(lái)更好的效果。比如映客的GoP就是一秒,我們的GoP是兩秒,都可能是因?yàn)橄嚓P(guān)的優(yōu)化問(wèn)題。 9、用戶(hù)定位、調(diào)度 至于用戶(hù)定位和調(diào)度的優(yōu)化問(wèn)題,有這樣的案例:某個(gè)人明明在美國(guó),但我們采集到的IP定位顯示他在廣州,根據(jù)分析他實(shí)際是使用了廣州移動(dòng)的sim卡漫游到美國(guó)。由于移動(dòng)的原因,我們會(huì)顯示他的IP在廣州。 這種情況下,再去對(duì)他進(jìn)行調(diào)度,一定會(huì)出錯(cuò)。我們經(jīng)常發(fā)生這種事情,比如有人特別卡,我們就會(huì)去看他實(shí)際所在的位置,是否跟我們將他調(diào)度所分配到的服務(wù)器不在同一個(gè)地方。 由于經(jīng)常發(fā)生類(lèi)似問(wèn)題,我們也形成了一套比較自動(dòng)的補(bǔ)救機(jī)制。以前都是固定調(diào)度,調(diào)度以后在直播過(guò)程中就不能再更改了。但由于類(lèi)似錯(cuò)誤太多,我們修改了相應(yīng)機(jī)制,使其能夠在當(dāng)直播中重新調(diào)度,強(qiáng)制執(zhí)行一個(gè)離用戶(hù)最近的流服務(wù)器。 10、VR直播? 這個(gè)時(shí)間段,我們還嘗試了VR直播,那段時(shí)間VR特別火。為了增加這個(gè)功能,我們?cè)诳蛻?hù)端增加了VR播放器,結(jié)果讓安裝包又?jǐn)U大了好幾兆,結(jié)果并不成功,這個(gè)屬于我們趟過(guò)的坑。 三、秀場(chǎng)直播階段 趟過(guò)的坑和解決過(guò)的問(wèn)題 1、禮物系統(tǒng) 做了大半年之后,我們才找到一個(gè)比較好的定位,就是做秀場(chǎng)直播。既然是秀場(chǎng)直播,就得有秀場(chǎng)必須要有的東西,包括各種各樣的禮物,連發(fā)禮物、全屏禮物、私信禮物,實(shí)際上一加上這些東西,就又會(huì)遇到各種各樣的CPU問(wèn)題。 怎么優(yōu)化這些CPU的占用?比如說(shuō),像用PNG序列(實(shí)現(xiàn)的禮物)----我們一個(gè)最大的PNG序列可能會(huì)有80幀甚至180幀,全部一起加載的話(huà),一瞬間的CPU占用會(huì)非常高。一兩秒之內(nèi),推流都會(huì)停止。類(lèi)似這種情況,我們都是在性能分析階段才發(fā)現(xiàn)的。采用的解決方案是:讓圖片加載得慢一點(diǎn),加幾幀之后就停一下。 2、金幣系統(tǒng) 金幣系統(tǒng),我們也走了一些彎路。最早我們用的是單幣體系,就是整個(gè)世界里交易的只有一種東西,就是花椒豆。我送給你一百豆,你就拿到一百豆,當(dāng)然最終提現(xiàn)的時(shí)候會(huì)有一些手續(xù)費(fèi)。 但單幣體系有一個(gè)問(wèn)題,就是你拿一百豆又可以送給我,我又可以再送給你,我們之間就可以無(wú)限刷下去。這樣會(huì)導(dǎo)致一個(gè)結(jié)果:在我們的整個(gè)體系里,無(wú)論經(jīng)驗(yàn)值還是其它的,只要跟消費(fèi)量有關(guān)的東西,就可以隨便刷了。 其實(shí)大家在上線(xiàn)這個(gè)東西的時(shí)候,就已經(jīng)意識(shí)到可能會(huì)有這樣的問(wèn)題,但由于缺乏經(jīng)驗(yàn),最終還是決定上了。之后就發(fā)現(xiàn)有人通過(guò)各種各樣的方式利用這個(gè)規(guī)則,因此我們趕緊改掉,用雙幣種的模式,送花椒豆給對(duì)方得用幣,再用幣來(lái)買(mǎi)豆或者提現(xiàn)的話(huà),就得有一定的折損。 有了這樣的游戲規(guī)則以后,整個(gè)生態(tài)環(huán)境就變得健康多了。實(shí)際上這個(gè)彎路走得挺不值的,因?yàn)榘╕Y、映客等App,都早就采用了雙幣系統(tǒng)。 3、附近的人 這個(gè)也算一個(gè)坑。當(dāng)時(shí)這個(gè)功能我們都做了,后來(lái)又拿下了。原因在于:假設(shè)用戶(hù)位置定得過(guò)于精確,會(huì)讓主播產(chǎn)生顧慮——如果可以定位到哪個(gè)小區(qū),別人在小區(qū)門(mén)口守著怎么辦?以前我們還有一個(gè)地圖視圖,可以在地圖上將用戶(hù)標(biāo)記出來(lái)。雖然有一定的誤差,但通過(guò)多收集幾個(gè)手機(jī)的數(shù)據(jù),就有可能定位到具體的位置。 最后,我們還是采用了映客的方式,也就是九宮格頭像。在下面稍微標(biāo)注一下這個(gè)人距離你有多遠(yuǎn),而且那個(gè)數(shù)字也是調(diào)整過(guò)的。地圖視圖對(duì)主播傷害很大,一般有這個(gè)功能,他們就不愿意用了。 4、美顏功能 美顏算是我們做得比較好的一個(gè)功能。這個(gè)功能并不是我們第一個(gè)上的,就手機(jī)APP來(lái)講,映客就比我們上得早。之后我們了解了一下,映客用的是虹軟的方案,就去找虹軟談。但虹軟用的是CPU方案,所有數(shù)據(jù)的讀取和處理都要憑借CPU,之后再返回。對(duì)于本來(lái)就很緊張的CPU而言,這個(gè)方案會(huì)有很大問(wèn)題。最后,我們用了GPU的方案,直接在GPU內(nèi)部進(jìn)行美顏的處理。 最早我們嘗試了多家不同的方案,上線(xiàn)后讓很多主播一個(gè)個(gè)嘗試,看哪個(gè)濾鏡的美顏效果最好。最后通過(guò)實(shí)驗(yàn),換了好幾家的方案之后,我們終于找了一家比較好的。以前我們調(diào)到最好的狀態(tài),就覺(jué)得跟映客差不多了,但后來(lái)我們找了一個(gè)新的解決方案以后,明顯感覺(jué)比虹軟的效果要高一個(gè)檔次。 不過(guò),現(xiàn)在我們所用的美顏方案已經(jīng)完全是我們自己開(kāi)發(fā)的方案了,這個(gè)后面也會(huì)提到。這個(gè)新方案與之前我們所用的那個(gè)效果最好的技術(shù)提供商方案,從肉眼上已經(jīng)看不出區(qū)別。 這里還有一個(gè)很有意思的事情,我們是做技術(shù)的,自己覺(jué)得肉眼沒(méi)有區(qū)別。我們換了一款濾鏡之后,一丟出去結(jié)果就立刻真有主播找過(guò)來(lái),問(wèn)我們是不是換濾鏡了,是不是改什么東西了,我要的那個(gè)效果沒(méi)了,也不知道他們是不是有特異功能。我們是完全看不出來(lái)什么區(qū)別的,最后就只能用算法來(lái)做對(duì)比,將兩個(gè)算法擺在一起,用程序去分析紅分量、綠分量等各種分量,以及界面上有膚色的地方究竟有什么區(qū)別。因?yàn)槲覀兯械墓こ處熡萌庋劭赐?,都覺(jué)得沒(méi)有問(wèn)題了,只要一丟出去,就立刻有主播找過(guò)來(lái),問(wèn)我們是不是改東西了。 目前來(lái)講,我們還是有這個(gè)信心的,在美顏這塊我們算有比較明顯的優(yōu)勢(shì)。 5、萌顏功能 2016年初FaceU大火的時(shí)候,我們就想到了將這個(gè)想法插入直播App中。最初的第一個(gè)版本僅花費(fèi)了兩天時(shí)間就出爐了,用的是蘋(píng)果自帶的人臉識(shí)別方案,但做出來(lái)的效果與FaceU差距很大,原因在于蘋(píng)果自帶的人臉識(shí)別,抖動(dòng)非常厲害。即使用戶(hù)和手機(jī)都保持靜止,系統(tǒng)每一幀所識(shí)別出來(lái)的圖像也會(huì)不停抖動(dòng),導(dǎo)致人頭大小一直變化。 經(jīng)過(guò)了解,我們發(fā)現(xiàn)FaceU未采用系統(tǒng)自帶的方案,而是用了SenseTime的方案。于是我們迅速搜尋相關(guān)信息,并積極溝通,購(gòu)買(mǎi)相關(guān)引擎。 同時(shí)我們也在開(kāi)發(fā)人工智能的相關(guān)功能,例如下面寫(xiě)著360人工智能研究院,識(shí)別的圖片。我們也有針對(duì)相關(guān)問(wèn)題,積極組織工程師團(tuán)隊(duì)進(jìn)行攻關(guān)。 不過(guò)短期內(nèi)我們不可能立刻做出一套能把SenseTime比下去的方案,因此前期我們用的都是SenseTime的方案。借此解決了幾個(gè)問(wèn)題,一個(gè)是人臉識(shí)別的問(wèn)題,識(shí)別之后在GPU內(nèi)部進(jìn)行處理,播放的視頻效果就是視頻1這樣的。最終形成的結(jié)果,就是將需要的效果與真實(shí)圖像疊加在一起。這個(gè)問(wèn)題我們解決得很快,應(yīng)該是第一個(gè)上線(xiàn)這個(gè)功能的APP了。 具體細(xì)節(jié)我印象還很深刻,大約2016年初即將過(guò)春節(jié)的時(shí)候,之前的周末我剛把代碼寫(xiě)完,第二天立刻找SenseTime去簽合同購(gòu)買(mǎi)引擎。對(duì)方的工程師剛上火車(chē),經(jīng)過(guò)協(xié)商,對(duì)方在火車(chē)上給我們Build版本。由于我們自己春節(jié)也要趕火車(chē),時(shí)間非常緊張。到最后,我還是在火車(chē)上繼續(xù)把代碼寫(xiě)完的,然后打包上線(xiàn)這個(gè)功能了。當(dāng)時(shí)這也確實(shí)是搶了一個(gè)先機(jī),算是直播app里第一個(gè)上線(xiàn)該功能的,就算到現(xiàn)在來(lái)講,有這個(gè)功能的App也不是很多。 6、換臉、瘦臉、大眼功能 當(dāng)時(shí)我們還做了換臉、瘦臉、大眼這些功能。換臉就是類(lèi)似下圖這樣的效果,這個(gè)功能我們已經(jīng)下線(xiàn)了。原因是用了一段時(shí)間之后,我們發(fā)現(xiàn)整個(gè)花椒的直播間在晚上的時(shí)候,效果會(huì)非常驚悚,整個(gè)氣氛都不對(duì)了。后來(lái)這個(gè)功能就被下線(xiàn)了。 但是瘦臉和大眼的功能現(xiàn)在還是有的,主播現(xiàn)在用的這個(gè)版本就可以選擇瘦臉和大眼,以及美顏、美白、磨皮程度的。 7、K歌/曲庫(kù),音效 當(dāng)時(shí)在做K歌功能的時(shí)候,我們也遇到了很多問(wèn)題。比如音效功能。話(huà)筒講話(huà)會(huì)帶有一定的混響或音效,比如大禮堂、大房間、小房間這樣的。當(dāng)時(shí)我們找了一些解決方案后就匆匆上線(xiàn)了,實(shí)際上有一個(gè)問(wèn)題并未解決,就是實(shí)時(shí)返聽(tīng)的功能。上線(xiàn)之后,我們就在攻關(guān)實(shí)時(shí)返聽(tīng)的功能,現(xiàn)在看來(lái)很簡(jiǎn)單,在iOS下面根本就不是問(wèn)題,只要用AudioUnit就可以達(dá)到三毫秒以下返聽(tīng)的效果。 但當(dāng)時(shí)來(lái)說(shuō),不拿著K歌軟件嘗試一下,我們完全體會(huì)不出返聽(tīng)效果5毫秒和10毫秒之間差別有多大。根據(jù)我們通常的認(rèn)識(shí),比如打電話(huà),只要差別在一百毫秒之內(nèi),我們會(huì)認(rèn)為它是實(shí)時(shí)的,基本沒(méi)有問(wèn)題。但在唱歌的時(shí)候,連10毫秒的時(shí)差都是難以忍受的。唱歌時(shí)耳朵所聽(tīng)到的聲音,和自己發(fā)出的聲音之間相差超過(guò)10毫秒,歌手就沒(méi)法唱下去了。實(shí)際上,iOS系統(tǒng)對(duì)這個(gè)問(wèn)題解決得比較好,安卓系統(tǒng)并不是所有的手機(jī)都會(huì)支持,而iOS就可以把這個(gè)時(shí)差控制在5毫秒之內(nèi),用戶(hù)耳朵里聽(tīng)到的聲音跟自己唱得聲音幾乎是同步的。 后來(lái)我們還做了變聲、變調(diào)效果,以及氣氛、音效等,基本都是對(duì)照著像全民K歌之類(lèi)的軟件,把能做的功能全都做上了。 直播底層技術(shù) 關(guān)于直播的底層技術(shù),我們也做了很多嘗試。 1、降低CPU的消耗 我們做了很多降低CPU消耗的嘗試,包括調(diào)整在GPU里處理的畫(huà)面的大小,讓處理的像素少一些。效果非常明顯,最下面那根線(xiàn)就是我們改進(jìn)之后的效果。 之前我們的CPU消耗還是很高的,經(jīng)過(guò)處理后一下子就降了下來(lái)。這個(gè)問(wèn)題的解決辦法,就是要保證在GPU里,所處理的像素是最少的。因?yàn)樽罱K我們要把畫(huà)面從GPU里拿出來(lái),放到CPU中進(jìn)行傳輸,只要把這個(gè)像素壓縮小了,讀取所消耗的時(shí)間也會(huì)相應(yīng)減少許多。 2、碼率、幀率、分辨率自適應(yīng),帶寬自適應(yīng)、崩潰續(xù)推 當(dāng)時(shí)我們還做了碼率、幀率、分辨率的自適應(yīng)功能,以及帶寬自適應(yīng)、崩潰續(xù)推等功能。 之前我們遇到畫(huà)面崩潰的問(wèn)題,就在考慮續(xù)推的解決方案。后來(lái)發(fā)現(xiàn),這個(gè)問(wèn)題非常簡(jiǎn)單,整套直播體系本來(lái)就支持這個(gè)功能。原因在于:用戶(hù)的網(wǎng)絡(luò)本身就會(huì)斷掉,閃斷然后再連上,本身就說(shuō)明它已經(jīng)具有這個(gè)續(xù)推的功能了。網(wǎng)絡(luò)都斷了,又繼續(xù)新建連接。于是我們就做了一個(gè)簡(jiǎn)單的提示,如果需要續(xù)推,我們會(huì)提示用戶(hù)剛剛發(fā)生閃退,是否要回到直播間,這就OK了。 3、畫(huà)質(zhì)改善/清晰度測(cè)試(PSNR/靜態(tài)畫(huà)質(zhì)清晰度/動(dòng)態(tài)清晰度) 我們還做了許多改善畫(huà)質(zhì)的工作。一種是用PSNR這個(gè)業(yè)內(nèi)比較直截了當(dāng)?shù)姆绞剑覀兺瑫r(shí)借鑒了單反相機(jī)評(píng)測(cè)的方法,用了一些比較標(biāo)準(zhǔn)化的測(cè)試。原本是用來(lái)評(píng)測(cè)單反相機(jī)的解析度,后來(lái)我們用那個(gè)標(biāo)準(zhǔn),對(duì)我們各種各樣的算法和處理進(jìn)行打分。這個(gè)功能其實(shí)也做了蠻長(zhǎng)時(shí)間的,應(yīng)該來(lái)講效果還是比較明顯的。 四、互動(dòng)秀場(chǎng)階段 新的嘗試 1、雙人連麥和多人連麥 現(xiàn)在我們新加入了雙人連麥的功能,實(shí)際上最近我們還在做多人連麥的功能,昨天才發(fā)了新版。之前我們一直熬夜加班在加這個(gè)功能,不過(guò)我也不敢保證上線(xiàn)后一定會(huì)很好。目前我們做了一些比較激進(jìn)的策略,比如不連麥的時(shí)候,我們會(huì)切換到成本比較低的線(xiàn)路上。一旦真正開(kāi)始連麥了,再切換回成本比較高的BPG線(xiàn)路上去,當(dāng)中會(huì)發(fā)生各種各樣的切換,主播要切換、嘉賓要切換、觀眾那邊也得切換,只能等上線(xiàn)后再看效果,再看會(huì)有什么問(wèn)題。 這個(gè)功能中間還是有很多坑的,因?yàn)榍袚Q需要CDN廠商的支持,當(dāng)時(shí)我們也是找了CDN與我們一同進(jìn)行修改。至于后效如何,也只能等著看了。(LiveVideoStack注——唐賡反饋了低成本連麥策略的運(yùn)行情況:經(jīng)過(guò)一個(gè)多月上線(xiàn)運(yùn)行,穩(wěn)定性超預(yù)期,沒(méi)有發(fā)生需要救火的情況,我們?cè)O(shè)計(jì)的連麥異常自動(dòng)補(bǔ)救機(jī)制有效運(yùn)行。同時(shí),明顯降低了成本,用戶(hù)連麥活躍度明顯增加,連麥推流流量(BGP流量)卻降低了,直接減少了5成以上費(fèi)用,同時(shí)對(duì)用戶(hù)體驗(yàn)基本沒(méi)有影響,沒(méi)有用戶(hù)抱怨我們?cè)诤笈_(tái)切換線(xiàn)路導(dǎo)致的短時(shí)卡頓,完全達(dá)到了我們的設(shè)計(jì)初衷。) 2、2D和3D互動(dòng)禮物 如今已經(jīng)是后秀場(chǎng)時(shí)代,我們必須更多地跟主播進(jìn)行互動(dòng),因此我們加了很多東西,包括2D和3D的禮物。然后也嘗試了很多游戲引擎之類(lèi)的內(nèi)容,實(shí)際上熊貓直播也嘗試過(guò),他們加了Unity引擎,不過(guò)后來(lái)失敗了。我們需要的引擎,其生命周期應(yīng)當(dāng)是與直播間的生命周期接近的,甚至是跟禮物的生命周期接近的,出現(xiàn)禮物包的時(shí)候才用,不用的時(shí)候就釋放掉。但這與游戲引擎的設(shè)計(jì)理念不符,對(duì)Unity這樣的3D游戲引擎來(lái)講,中途釋放是釋放不干凈的。后來(lái)我們對(duì)Cocos2D-X也是做了非常多的改造,才比較完美地解決了這個(gè)問(wèn)題,包括各種內(nèi)存泄露、狀態(tài)清理不干凈的問(wèn)題,當(dāng)然最終效果還需要大家等待一下,我們很快就會(huì)上線(xiàn)。 3、多人游戲/PK,語(yǔ)音場(chǎng)控/DJ/主持 比較有意思的功能還有一個(gè),就是主播跟觀眾之間的互動(dòng)游戲功能。 上面的圖片實(shí)際上是截自YY,他們加了語(yǔ)音場(chǎng)控、DJ、主持人的功能,以及多人游戲、PK這些功能,我們也在努力,盡快上線(xiàn)這些功能。 4、多人連麥游戲 最近狼人殺等App就用到了12路甚至15路連麥的技術(shù),上圖來(lái)自于美播,其中的一些思路我們也是可以借鑒的。這些都能讓直播間的玩兒法更豐富起來(lái)。 互動(dòng)秀場(chǎng)的AI應(yīng)用 1、綠幕和FABBY摳像 我們做的綠幕摳像技術(shù),實(shí)際上主播一開(kāi)始是下面第一張圖的情況,背后是綠色的。當(dāng)他選好背后的背景視頻之后,綠幕就會(huì)被替換掉,換成第二張那樣視頻。不過(guò)這里有個(gè)要求:主播背后必須是一塊綠色的背景。 我們對(duì)這個(gè)功能并不是很滿(mǎn)意,做完這個(gè)功能之后,有一款新的APP出來(lái)了,叫做FABBY。它可以在沒(méi)有綠幕的情況下,就把人像給摳出來(lái)。它們所使用的方案是深度學(xué)習(xí)方案,360研究院也立刻就跟進(jìn)了,上圖是我們做出來(lái)一些效果。 2、其他 我們還有很多其他研究,包括手勢(shì)識(shí)別、場(chǎng)景識(shí)別、物體識(shí)別、主播自動(dòng)分類(lèi)(性感、清純等)、畫(huà)質(zhì)監(jiān)控、聊天機(jī)器人等。 手勢(shì)識(shí)別:在很低的CPU消耗下,系統(tǒng)自動(dòng)識(shí)別出主播的手勢(shì),比如比心。 引入265 簡(jiǎn)單說(shuō)一下265,我們對(duì)市場(chǎng)上各種265的解決方案進(jìn)行了測(cè)試,結(jié)果發(fā)現(xiàn)確實(shí)能帶來(lái)非常明顯的帶寬節(jié)省效果。節(jié)省的帶寬高達(dá)40%甚至54%,這個(gè)數(shù)字非??鋸埩?。具體數(shù)字如下:
但是,由于現(xiàn)在H5或者其他的一些分享渠道都必須用到264,我們必須在服務(wù)端進(jìn)行轉(zhuǎn)碼。由于對(duì)轉(zhuǎn)碼集群的需求,會(huì)有一定的費(fèi)用消耗。此外,金山的這個(gè)方案本身也非常貴,因此這個(gè)方案整體來(lái)說(shuō)也是有一定成本的,并且還需要CDN廠商的支持,才能將265的內(nèi)容傳遞出去。 因此,我們需要整體做一個(gè)權(quán)衡,去考慮損益。不過(guò)在目前來(lái)看,我們覺(jué)得這是未來(lái)的一個(gè)趨勢(shì),而我們也一定會(huì)緊跟這個(gè)趨勢(shì)。 游戲錄屏 現(xiàn)在我們還推出了游戲錄屏功能,我們所使用的是AIRPLAY的錄屏功能,實(shí)際上蘋(píng)果建議使用REPLAYKIT,但由于REPLAYKIT會(huì)要求游戲廠商本身要提供支持,我們還是采用了AIRPLAY的方案。 這里有個(gè)問(wèn)題:AIRPLAY的方案是蘋(píng)果明令禁止的,我們?cè)趯?shí)現(xiàn)時(shí)使用了它的私有API,以企業(yè)發(fā)布的形式發(fā)布了采用AIRPLAY的這個(gè)版本。 人頭拾音 這也算是個(gè)黑科技,如果觀眾戴上耳機(jī)去聽(tīng)的話(huà),會(huì)覺(jué)得主播是真的在耳邊說(shuō)話(huà)。聲音會(huì)跟隨主播從左耳慢慢走到右耳,甚至連觸摸耳朵的感覺(jué)都能感覺(jué)出來(lái),閉上眼睛汗毛都要豎起來(lái)了。 更多UGC內(nèi)容 我們認(rèn)為,一個(gè)直播平臺(tái)想要成功的話(huà),必須要有更多的UGC內(nèi)容。這點(diǎn)快手就做得非常漂亮,我們的app在內(nèi)容的豐富度上跟快手相比差太遠(yuǎn)了,快手上什么都有,有人在展示如何修理iPhone手機(jī),有人在玩兒飛機(jī),有人玩兒多肉植物,有人玩兒玉器,各種各樣的內(nèi)容全都有。
而我們的多樣性還相距甚遠(yuǎn),主要都是妹子唱歌跳舞這些,需要后期等待運(yùn)營(yíng)人員的改進(jìn)。 關(guān)于分享者 唐賡 唐賡,北京密境和風(fēng)科技有限公司iOS技術(shù)負(fù)責(zé)人,負(fù)責(zé)直播技術(shù)開(kāi)發(fā)與研究,目前工作集中在主播端功能特性開(kāi)發(fā)與優(yōu)化。在音視頻多媒體技術(shù)、云計(jì)算、系統(tǒng)優(yōu)化方面有多年工作經(jīng)驗(yàn)。 廣告時(shí)間 『LiveVideoStack Meet:后直播時(shí)代技術(shù)』系列沙龍來(lái)杭州和上海了! 6月17日和6月24日,『LiveVideoStack Meet:后直播時(shí)代技術(shù)』將分別在杭州和上海舉行,淘寶直播的研發(fā)負(fù)責(zé)人 陳舉鋒(豐火)、涂圖 CTO 邱彥林、又拍云CTO 黃慧攀、即構(gòu)科技合伙人 林君、vipabc研發(fā)總監(jiān) 董海冰、喜馬拉雅FM音視頻工程師 馬力、滬江CCtalk技術(shù)負(fù)責(zé)人 楊繼珩、愛(ài)奇藝技術(shù)經(jīng)理 周志偉將做分享。網(wǎng)易、蝸牛云直播、B站和聲網(wǎng)的講師還在邀請(qǐng)中。 此外,一如既往的直播技術(shù)技能圖譜、LiveVideoStack紀(jì)念胸針、《WebRTC權(quán)威指南》第三版、《H.265/HEVC原理、標(biāo)準(zhǔn)與實(shí)現(xiàn)》、小米藍(lán)牙音箱及各種小禮品,還有晚宴和OpenSpace與專(zhuān)家自由討論應(yīng)有盡有。 長(zhǎng)按圖片識(shí)別二維碼進(jìn)入各報(bào)名頁(yè)面,搶30張免費(fèi)票 |
|