在6月8日上海雲栖視訊專場中,阿裡視訊雲技術專家孫小軍進行了一場短視訊技術分享,解讀了短視訊非編架構和渲染技術架構的實作原理。阿裡雲短視訊SDK服務了1000多家企業使用者,遇到了不同垂直行業、不同業務場景的客戶。除了面臨多樣性需求的技術挑戰外,還面臨着擴充性、性能及相容性上的考量。

那麼,在基礎架構研發層面是如何解決這些問題呢?
阿裡雲的短視訊SDK從非線性編輯入手,主要目标是對音視訊素材做任意部分的随機存取、修改和處理。其次,阿裡雲短視訊SDK對渲染效果進行管道化處理,提供渲染底座,友善對接不同的視訊算法及組合複雜的渲染流程。
在傳統的非編場景中,當我們有編輯需求時,是這麼操作的。左上角有素材裁剪,導入或采集的視訊,要做裁剪、倒放、拉伸等等處理,下一步是添加一些濾鏡效果,如果有多段視訊,可以選擇不同方式的轉場。下面在整個視訊時間軸上存在不同軌道,每個軌道上可以在不同的時間段放不同的素材,每個素材可以拉伸時長、變速等。
一、短視訊的非編架構是怎樣的?
通過提煉,我們抽取了五層架構。最上面一層是産品級的DEMO,友善使用者快速修改釋出上線;第二層是成熟的、開源的UI控件,像時間軸空間、文字動圖編輯控件等,使用者可以直接使用也可以定制化;第三層是針對短視訊場景進行一些編排,包括錄制場景、視訊導入裁剪、多段拼接、編輯場景等;第四層是多媒體領域通用性的元件,包括渲染、音頻處理、編解碼等;最下層是多媒體分發架構,是對包括線程模型、時鐘機制、監控、狀态管理等跨平台的基礎能力的抽象。下面我們從幾個重點層級詳細展開。
多媒體分發架構
無論是音視訊編解碼、渲染等基礎元件,還是編輯、導入拼接等業務場景的編排元件,都是基于多媒體分發架構上實作的。多媒體分發架構包括線程模型、子產品間消息訂閱互發等基礎服務的封裝,通過Clock機制讓多個元件之間組合出多樣性的時鐘同步方案,并通過這些元件之間的統一狀态遷移和資料鍊路的狀态監控,可以友善業務編排層快速建構具體的業務場景。
多媒體通用元件
非編場景下的典型的時間軸和多軌道的技術,短視訊SDK是如何實作的呢?抽取了音視訊緩沖池處理,将素材做映射拉伸,比如對每一個素材做快放、倒放的效果,生成某一個軌道上的視訊片段,每個軌道上可以添加多個音頻、視訊、圖檔等素材。通過素材的絕對時戳、相對時戳以及與全局時戳的映射關系,就可以靈活組裝出各種非編效果。
短視訊場景編排層
在這一層上會實作短視訊場景下的各類編排方式。以編輯場景為例:預覽和合成效果上是有重疊的,在這一層中可以按下圖方式編排流程。
1、建立緩沖池、渲染、編排、封裝等元件,注冊到消息分發架構;
2、建立Clock注入元件,訂閱主從時鐘關系;
3、組裝資料流訂閱關系,渲染訂閱緩沖池流、編排訂閱渲染流、Muxer訂閱編碼等;
4、針對業務場景編排渲染節點;
5、編排層元件統一管理各元件狀态遷移Init->Prepared->Playing;
6、編排層可以Buffer監控、調整、上報;
二、複雜的渲染效果是如何實作的?
上圖是短視訊錄制渲染與編輯渲染的pipeline,可以看出錄制場景和編輯場景下渲染流程存在較大差異。在業務豐富度高的toB業務場景中,需要有靈活的渲染節點編排的能力和對接第三方渲染的能力,同時對于終端平台還存在多平台适配問題,需要統一接口并針對平台特性進行優化,來保證性能。
針對以上的問題,在渲染引擎上阿裡雲短視訊SDK抽離出四層概念。第一層是GPU抽象層,這一層是為了解決OpenGL、Mental等渲染适配的問題;第二層是解析和運作層,針對不同的pipeline節點編排,解析并生成鍊路,并按照驅動模式去運作;第三層是渲染服務層,可以實作狀态遷移和子產品間信令互動等;第四層是渲染業務編排層,根據不同業務場景來排版渲染的pipeline。
非編能力與渲染引擎能為使用者帶來什麼價值?
第一, 當使用者提出新的個性化需求的時候,如多濾鏡分屏顯示,隻需要編排能力就可以組裝出使用者需要的效果。後續将會開放渲染節點編排,使用者可以自行編排渲染節點,實作更符合自己業務特色的渲染效果。
第二, 內建了短視訊SDK後,後續将會開放定制動圖、濾鏡和MV素材。
第三, 針對某個素材,實作各種類型的時間特效,非線性疊加變換。
第四, 可擴充豐富的轉場效果,包括多邊形、淡入淡出、百葉窗等。
第五, 對非編全鍊路pipeline做了大量的性能優化,渲染引擎做了CPU到GPU性能優化,內建短視訊SDK後,使用者可以獲得更好的性能體驗。
作為基礎架構研發,孫小軍所在的團隊也遇到了一些坑點。如果要實作跨多段,全局時間重疊,并且要實作反複時間特效的時候,業内的玩法是預處理合成一個視訊,然後再針對這段視訊進行反複處理。但是我們也會遇到一些客戶的回報,在這個過程中預處理時,使用者的等待時間很長,失去了靈活性。那阿裡雲短視訊SDK做的改變是,在這條線上通過非編,将反複的時間段轉換成多個part段,通過part的反複來達到整體非編的效果。
短視訊V3.6版本上線
短視訊SDK近期剛剛釋出的V3.6版本就采用了非編架構和渲染引擎,在功能層面,除了原本的短視訊基礎能力之外,新增了特效濾鏡、時間特效等功能,可以快速實作類似“抖音”等當紅短視訊APP上的酷炫效果。
對業務感興趣的朋友,可以掃碼下載下傳DEMO,或者加入釘釘合作群與專家直接交流。