當前,越來越多的用戶選擇使用手機進行視頻創(chuàng)作,隨著視頻UGC時代的到來,用戶不再滿足于簡單地視頻拍攝,更希望一些專業(yè)的剪輯功能在移動端實現(xiàn)。在計算性能非常有限的情況,要實現(xiàn)這些高負載的功能,面臨著非常多技術的挑戰(zhàn)。
大家好,我是陳彬,目前在快手負責短視頻架構工作,主要負責構建快手的移動端多媒體引擎,提供短視頻拍攝、編輯、發(fā)布等視頻創(chuàng)作的基礎能力,還有消費側的播放器SDK和短視頻后端轉碼服務。在加入快手之前,從事過很多視頻技術相關的領域,如視頻編解碼算法、傳輸算法、多媒體芯片、OTT設備等。 今天,我演講的主題是“快手移動端高性能多媒體引擎”,將重點圍繞高性能這一話題來展開,從宏觀到微觀,介紹引擎的整體架構和具體場景的優(yōu)化手段。演講分為快手多媒體引擎概況、高效使用硬件資源、拍攝和編輯場景的性能優(yōu)化三個部分,最后一起展望一下5G+邊緣計算在短視頻方面的應用。
1. 快手多媒體引擎概況 1.1 UGC平臺
眾所周知,快手是一個短視頻UGC平臺,而視頻內容的生產是內容供給的源頭,用戶通過使用手機的拍攝和編輯功能創(chuàng)作視頻,然后上傳到快手平臺。之后,后端服務器利用AI技術對這些視頻進行內容理解,把理解的信息傳送給推薦引擎,推薦引擎結合用戶興趣,進行個性化推薦,進行分發(fā)消費。消費用戶通過觀看、點贊、評論和私信等動作產生一系列的互動行為,這些互動行為同時又進一步促進了內容的生產。
這是一個正向反饋的鏈路,社區(qū)像滾雪球一樣不停的增長。這就是快手最重要的UGC生態(tài)閉環(huán)。 快手目前DAU超過2億,作者數(shù)1.9億,每天新增作品數(shù)1500萬,生產者的比例也很高,用戶分布非常廣,手機型號有幾千款,價格區(qū)間從幾百元到幾千元。這些生產者使用快手移動端的多媒體引擎來進行創(chuàng)作,通過AI技術賦能內容生產,為用戶提供生產創(chuàng)意,降低生產門檻,從而提升作品的數(shù)量和質量。 1.2 AI賦能內容生產
AI技術落地是非常困難的,快手想要實現(xiàn)AI落地,首先要做好基礎平臺、算法和產品這三個要素。基礎平臺是指移動端多媒體平臺,包括快手自研的深度學習推理引擎YCNN、3D渲染引擎和多媒體引擎。復雜的AI算法運行在這三個高性能的引擎上,例如人體理解、場景理解、語音識別、圖像增強等算法,這些算法的效果通過產品形態(tài)呈現(xiàn)給用戶。 舉例說明這些AI算法的落地場景。第一個是“萌面”魔法表情,用戶在拍攝視頻的時候。無需3D結構光攝像頭也可以實時捕捉面部表情,并實時把面部表情通過卡通頭像的形式展現(xiàn),能夠實現(xiàn)非常豐富的面部表情。第二個是梵高的天空特效,使用了天空識別算法。第三個是前段時間特別受歡迎的娃娃臉,通過GAN技術把用戶的臉秒變童顏,可以在安卓和iOS大部分的機型上實時運行,技術挑戰(zhàn)非常大,快手也是國內首家實現(xiàn)這項技術的公司。第四個是自動添加字幕功能,通過識別算法,將語音轉換為文字。最后一個是暗光增強算法,通過該算法可以對暗光環(huán)境下拍攝的視頻進行提亮和去噪,還原更多的細節(jié)。 這些都是AI賦能內容生產的實際應用,通過平臺、算法和產品三要素,實現(xiàn)了原創(chuàng)、好玩、清晰和流暢,這是快手平臺上每天能產生海量作品的秘密之一。 1.3 快手短視頻生產消費整體鏈路
上圖是我們整個生產到消費的鏈路,由作者端、云端和觀眾端三部分組成。作者端也就是生產側,通過拍攝、導入、編輯等操作生產視頻,然后把視頻發(fā)送到云端,云端對視頻進行存儲和轉碼,分發(fā)給CDN,最終通過CDN網絡傳輸給用戶進行消費。本次演講內容的重點是位于作者側的移動端多媒體引擎。 1.4 快影
在快手主app之外,我們還孵化了一些獨立的內容生產App。說到視頻制作方面,就必須介紹視頻剪輯工具——快影,它主要面向更專業(yè)一些,需要在移動端進行較復雜視頻編輯的用戶。 快影最近霸占了App Store免費排行榜榜首的位置。它的功能更加專業(yè),支持超高清視頻的編輯和AI特效功能,是快手移動端多媒體引擎賦能的一個代表性產品,我下面將會用快影的案例進行分析。 1.4.1 多媒體引擎是什么
簡單來說,多媒體引擎主要負責視頻的采集和后期處理,其功能分為拍攝和編輯。拍攝包括濾鏡、美顏美妝、AI特效等功能,編輯包括了剪輯、轉場和貼紙等功能。 這些功能的背后面臨著4K分辨率、3D渲染、美顏美妝、端上AI等技術挑戰(zhàn)。這些挑戰(zhàn)都需要龐大的計算量,再加上實時處理的需求,可謂是難上加難。要解決這些問題,首先就必須要高效的使用硬件資源。 2.高效利用硬件資源 2.1 并行化基本原則
手機端的硬件資源主要有CPU、GPU、HW Codec等模塊,使用這些資源最簡單的辦法是輪流使用,但這種方法并不高效,例如,會出現(xiàn)CPU工作,但是GPU空閑的情況。因此要做到并行化,讓所有硬件同時工作,這是一個非常基本的原則,也是快手多媒體引擎架構設計的一個指導思想。 3.拍攝和編輯場景的性能優(yōu)化 3.1 拍攝場景
理清設計的指導思想后,再看一下具體的優(yōu)化場景。對于拍攝,從相機采集的一幀視頻數(shù)據(jù)先后要經過圖像算法、濾鏡、美顏美妝、魔法特效等模塊,然后分成兩路,一路給實時預覽,一路給錄制,整個流程要在33毫秒之內完成(30fps)。 3.2 拍攝的架構
拍攝的架構需要支撐起實時采集、實時處理、實時預覽和實時錄制的應用場景。整個架構從下往上分成三層。 最下面一層是采集和渲染的Pipeline流水線,由采集模塊、CPU處理單元、GPU處理單元、顯示模塊和錄制模塊組成。 中間一層由各個算法模塊和特效渲染模塊組成,是以plugin的形式插入到底層渲染流水框架中,類似ffmpeg的filter,通過排列組合,實現(xiàn)各種效果。這些filter之間是有依賴關系的,由一個負責依賴管理的模塊DependencyManager進行控制。在此之上是非常重要的monitor模塊,它對整個流水線進行實時監(jiān)控,包括算法模塊耗時、CPU負載、GPU負載、內存使用量、幀率以及分辨率等方面。 這些數(shù)據(jù)實時采集后發(fā)送到快手后端的流媒體大數(shù)據(jù)平臺,進行實時清洗、聚合和展示。基于這些數(shù)據(jù),可以實時監(jiān)控生產模塊的性能。整個過程是分鐘級別的延遲,也就是說,拿出快手APP進行拍攝,一分鐘之后就能在后臺看到整個操作流程的性能數(shù)據(jù)。根據(jù)這些性能數(shù)據(jù),對架構進行針對性的優(yōu)化。這也是快手一直以來實踐的方法,以大數(shù)據(jù)為驅動來進行性能優(yōu)化,提升用戶體驗。 中間層之上是APP接口層,在安卓和iOS平臺上分別提供了Java和OC的接口。整個架構作為一個跨平臺的方案,除了最上層的APP接口層,大部分使用C++來實現(xiàn)。 前面提到的高效使用硬件資源的思想體現(xiàn)在框架圖中最底層的鏈路上,從相機采集的數(shù)據(jù)先傳遞給CPU處理模塊,CPU處理完之后把數(shù)據(jù)傳給GPU,然后CPU立刻再去相機采集下一幀的數(shù)據(jù)。在同一時間點,CPU正在處理當前剛采集的一幀數(shù)據(jù),而GPU正在處理前一幀的數(shù)據(jù),CPU和GPU是并行工作的,這就是高效利用硬件思想的一個很好的體現(xiàn)。 框架圖中的YCNN引擎是快手Y-TechAI實驗室開發(fā)的移動端的推理引擎,各類AI算法都運行在YCNN上。例如,最常用的人臉關鍵點算法,人體關鍵點算法和手勢關鍵點算法。YCNN引擎通過Metal、OpenCL、SIMD這些加速方式,充分利用底層的CPU、GPU和NPU資源。除了高效使用這些硬件資源之外,還做了4個方面的優(yōu)化,第一點是算子融合,把算子打包在一起,load進CPU的cache,這樣可以減少分別load的額外消耗。第二點是內存優(yōu)化,盡量避免頻繁地內存讀寫操作,盡量一次讀完數(shù)據(jù),處理完后一次性寫入,避免對同一段數(shù)據(jù)反復讀寫,同時要注意做內存排布優(yōu)化,增加cache命中率。另外兩點是通用的磁盤I/O優(yōu)化和多線程優(yōu)化。 經過這些優(yōu)化后,在iPhone6手機上實測,人臉關鍵點處理速度是200fps,一秒能處理200幀圖像,人體關鍵點是90fps,人體分割是100fps,都是業(yè)界非常優(yōu)秀的性能。 3.3 分辨率和幀率的變化
除去技術側性能的指標,快手也很注重從用戶主觀感受出發(fā),衡量優(yōu)化對用戶體驗的收益。快手制定了拍攝場景的三個關鍵指標:分辨率、幀率和卡頓率。分辨率和幀率很好理解,而卡頓率一般出現(xiàn)在視頻播放場景。先看分辨率和幀率的變化,隨著多媒體引擎的上線以及持續(xù)性能優(yōu)化,快手的拍攝分辨率從之前540P升級到720P,部分機型已經升級到1080P,幀率也在持續(xù)的上升,實現(xiàn)了更清晰和更流暢。 3.4 卡頓率
但是,我們發(fā)現(xiàn),僅靠平均幀率并不能全面反映一個視頻的流暢度。以一個實際例子來看,我們一位同事去澳洲旅游,在當?shù)嘏臄z的這段視頻里,出現(xiàn)袋鼠的畫面特別卡頓,但是,整個視頻的平均幀率其實已經達到20fps以上。正常情況下,20fps+是比較流暢的,而這個視頻卻看起來很卡,什么原因呢? 我們仔細看了一下幀率的分布,發(fā)現(xiàn)幀率分布非常不均勻,因此發(fā)現(xiàn)之前評估視頻是否流暢僅靠平均幀率是有缺陷的。為了解決這個問題,快手定義了拍攝卡頓率指標。相鄰兩幀時間戳之間的差值大于200毫秒就認定為卡頓,卡頓率是指發(fā)生過卡頓的次數(shù)除以總的拍攝次數(shù)。卡頓率結合平均幀率才能更全面地去衡量拍攝視頻的流暢度。 3.5 卡頓率的變化
從上圖的卡頓率的曲線可以看到,經過優(yōu)化后,卡頓率在持續(xù)下降。通過分辨率、幀率和卡頓率這三個指標,可以看到,經過持續(xù)的優(yōu)化,用戶感知是更加清晰、流暢。 3.6 編輯場景
在編輯場景方面,上圖兩個頁面是快影的主要頁面,其中展示了快影的部分編輯功能。左邊頁面包括了添加視頻片段、分割、倒放和旋轉等操作,右邊頁面是添加轉場的操作。 相比于iOS,安卓端的技術挑戰(zhàn)更大。安卓硬件解碼是一個老生常談的問題,相比于軟件解碼器,硬件解碼器更快,特別是在高分辨率視頻場景下,優(yōu)勢更加明顯。 3.7 安卓硬解碼
上圖是導入一個4K視頻進行編輯的場景,左邊是市面上一款很火的編輯工具,從預覽頁面點擊“下一步”到編輯頁時,有一個“合成中”的等待,之后才能進入編輯頁。需要等待的原因是視頻的分辨率太高,如果不使用硬件解碼器,很難在編輯頁面做到實時操作,因此需要提前做一次轉碼,進行預處理,把分辨率降低。右邊的是快手,同樣的視頻點擊“下一步”,立刻就能進入到編輯頁,不需要進行預處理,這就是硬件解碼器的功勞。 3.8 安卓硬解碼存在的問題
安卓硬解碼在具備以上優(yōu)點的同時,也存在著很多問題:第一,安卓的機型特別多。第二,解碼器的輸出格式多樣,性能不一。第三,支持的分辨率不一樣。針對這些問題,業(yè)界常用的解決辦法是黑白名單,快手一開始也做了黑白名單,但是,黑白名單是一個后置的策略,必須先知道機型,在發(fā)現(xiàn)有問題之后才能加到名單里,這樣的操作并不智能,往往需要人工干預。快手的解決方案是跑Benchmark,自動選擇最佳模式,不需要人工干預,在手機端運行測試程序選出最佳模式。 3.9 硬解Benchmark 3.9.1 支持哪些分辨率?
雖然手機都會聲明支持哪些分辨率,但實際情況,還是要檢測解碼的正確性。把不同分辨率特定pattern的視頻輸入給解碼器,檢查解碼出來的YUV數(shù)據(jù)正確性。 3.9.2 Surface輸出 & Bytebuffer輸出
解碼器一般都支持幾種輸出格式,快手使用跑馬策略,同樣的視頻輸入給解碼器,選擇解碼速度最快的輸出格式。 使用了自動Benchmark后,快影的硬件解碼器覆蓋率,從70%提升到90%+,這是一個非常大的提升。硬解是所有流暢編輯體驗的基礎。 3.10 Seek優(yōu)化
連續(xù)Seek是視頻編輯操作過程中很常見的一個場景,特別容易出現(xiàn)卡頓的情況,需要進行大量的優(yōu)化。為了達到理想的用戶體驗,需要做到兩點:第一點,畫面連續(xù)顯示,這不是簡單的seek,而是連續(xù)seek的過程,因此不能出現(xiàn)靜止幀的情況;第二點,畫面要能跟上手指移動的速度。 為了滿足上述兩點,我們設計了一個復雜而精巧的機制,能夠做到保持解碼器連續(xù)工作,不做重置,實現(xiàn)了seek跟手的流暢體驗。重點講下前向seek,也就是倒放。在保持解碼器連續(xù)工作時,還可以在解碼前丟棄一些非參考幀,只解碼參考幀,減輕解碼器的負擔。這樣兩方面優(yōu)化,可以實現(xiàn)流暢的前向seek體驗。 3.11 轉場優(yōu)化
轉場也屬于編輯時常用的功能,在兩段視頻的交接處,往往容易卡頓,因為在渲染的時候需要兩路解碼。我們通過提前預熱解碼器的方法來解決這個問題,實現(xiàn)了流暢的轉場預覽效果。 舉例上圖,左右兩段表示兩個視頻片段。左邊橘色解碼器解到接近交界位置的時候,創(chuàng)建藍色解碼器,并讓其預解碼幾幀。當渲染轉場效果時,因為藍色解碼器已經提前預解碼了,此時就只有橘色的解碼器在工作,整體負載比較低,就能夠實現(xiàn)流暢的效果。 4. 5G的關鍵能力
最后說一下我們對5G的展望。5G的特點是兩高一低:高帶寬,數(shù)百兆甚至數(shù)十G的峰值傳輸帶寬;低延遲,10毫秒以內的端到端延遲;高可靠,帶寬和延遲非常穩(wěn)定。這使得5G能夠提供非常高效的通信鏈路。 有了這個通信鏈路,我們認為,就有可能把端上采集的數(shù)據(jù),實時發(fā)給云端處理。利用云端強大的處理速度運行各類復雜的算法,把處理完的數(shù)據(jù)再實時傳輸?shù)揭苿佣孙@示。整個過程如果在33毫秒之內完成,就意味著達到了實時的效果。利用云端計算力可以解決手機的性能瓶頸問題。在5G的加持下,借助云端的計算力,就能實現(xiàn)更加復雜的AI算法和更加逼真的CG渲染效果,提供更酷炫的視頻制作體驗。這個未來需要5G+邊緣計算結合來實現(xiàn)。快手會在這些新方向上持續(xù)、深入的探索。
-
SDK
+關注
關注
3文章
1038瀏覽量
46025 -
ai技術
+關注
關注
1文章
1281瀏覽量
24351
原文標題:快手高性能移動端多媒體引擎架構
文章出處:【微信號:livevideostack,微信公眾號:LiveVideoStack】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論