編者按:MeshCloud通過與GCP合作為中國出海企業提供強大的全球基礎架構。今天LiveVideoStack公開課通過MeshCloud邀請到了谷歌云的于有志老師,為我們介紹如何借助谷歌云在高效視頻轉碼和分發方面的技術與能力,實現海外音視頻業務的快速與高質量部署。
文/于有志
整理/LiveVideoStack
大家好,我是來自谷歌云的于有志,主要幫助出海客戶的業務在海外落地。我很感謝LiveVideoStack能提供這個平臺,讓我可以和大家交流。做過出海相關業務的同學對谷歌云應該不會陌生,谷歌云是全球排名前三的云廠商,在全球有35個數據中心區域,有一百多個可用區。很多同學主要對其網絡虛擬機、容器方面的產品比較熟悉,但我今天主要介紹其在音視頻領域里的服務。
今天主要介紹與轉碼相關的服務以及如何使用轉碼配合存儲實現內容的分發。轉碼是無運維的、全托管的服務,其主要利用谷歌自主研發的轉碼、容器等技術來幫助用戶實現高效且高速轉碼。提到轉碼技術,大家比較熟悉的是FFmpeg,可以自己編寫轉碼的格式,但是使用這種全托管、無服務器的服務能讓大家更快速地實現業務的落地,并且這種服務還有功能上、成本上和性能上的優勢,之后會具體展開講解。這類服務主要按照轉碼的內容的時長來收費。
接下來,介紹轉碼的服務支持哪些具體的格式,這也是大家比較關心的問題。首先,在音視頻領域,支持的輸入格式比較多,包括手機拍攝的視頻、各種錄制設備拍攝的視頻、音頻、字幕文件等。然后,在輸出格式方面,在視頻編碼中可以比較好地支持H.264、H.265和VP9等編碼格式,現在大家也可能會關注新的、免費的編碼格式。VP9是谷歌在YouTube等業務里使用較多的編碼格式,在一些場景下,與H.264等編碼格式相比,VP9可以做到50%的流量節省,特別是在一些發展中區域(非洲、中東、南美等),這可以讓用戶使用更低的帶寬更流暢地觀看視頻,使用戶有更好的體驗。除了VP9,谷歌也參與了AV1編碼格式的制定,該格式將來也會加入到支持的輸出格式里。在音頻、字幕方面,也有很多支持的輸出編碼格式。此外,我們也支持圖片的輸出,之后會介紹一個相關場景案例,說明在編碼視頻時為何需要做到圖片的輸出。
該服務的一個比較大的優勢是幫助客戶在出海時增加視頻版權管理的功能。視頻在海外落地時,版權方會有一些要求,比如對視頻加密或使用版權管理的標準。現在全球有三大標準,包括蘋果的FairPlay、谷歌的Widevine和微軟的PlayReady。此外,蘋果還制作了免費版本的AES-128的加密標準。在轉碼時,可以添加配置以上提到的標準,以此幫助大家根據要求來更好地做到內容的版權管理和保護,這也是轉碼服務里非常方便應用的一個功能。
谷歌的轉碼服務有一個特殊的技術優勢,即可以使用谷歌的視頻分析和容器化的服務來幫助用戶在短時間內完成長視頻的轉碼。當收到一個長視頻時,首先對其進行內容分析,然后對其自動切片,分成不同片段后使用并行的方式部署轉碼/編碼任務,再然后用大的集群并行地完成視頻內容的轉碼,這使得長視頻的轉碼時長是固定的(基本在3至5分鐘內),而不隨視頻內容時長增長而增長。
該服務還有一些高級功能。視頻內容可能包含很多的音軌、視軌和字幕軌道,我們首先使用不同的對象管理方式在模板里定義出元素級別的內容流(包括音頻、視頻和字幕),然后對其進行任意的組合,比如高碼率的視頻可以和高碼率的音頻組合,低碼率的視頻可以和低碼率的音頻組合。組合完成后得到復合流,然后可以定義輸出的流媒體,在定義的媒介里引用復合流。同時,將其定義成在不同的客戶端碼率的情況下,多碼率適配的選用方式,使得可以根據客戶端的實時碼率來自動地選擇不同的復合流,實現碼率的自動適配。上述功能可以方便地在配置模板里實現。
另外,視頻有時需要進行編輯,此時沒有必要采購或安裝視頻的編輯工具,因為我們的轉碼工具就可以做到視頻內容的拆分或拼接。舉個例子,假設有4個輸入的視頻文件,我們想從每個視頻文件中選取一部分組成最終的視頻文件。從圖中可以發現,使用轉碼的配置就可以做到上述效果,即可以按照任意順序組合選取的任意長度的視頻切片,從而得到最終的視頻文件。這類功能適用于嵌入片頭和片尾的廣告,因為廣告可能有固定時長、固定位置(片頭、片中或片尾)。同時,這類功能也適用于制作體育比賽的集錦,經過視頻內容分析后,通過拆條將視頻拆分為多個片段,可以將與進球有關的或高質量的片段作為輸入放入模板里,并對其進行最后的組合,得到集錦片段。
剛才提到的功能可以在轉碼模板里定義。這里沒有采取界面等可視化的方式,這是因為,雖然在很多時候采取可視化的編輯方式可以方便地實現一些功能,但若要實現復雜的、定制化的轉碼的配置,使用配置文件會更方便。這里有兩種配置文件的使用方式,一種是對每個任務進行完整的配置,可以定義所有的輸入、輸出和中間的流的組合。另一種方式是,將使用相同方式轉碼的配置寫成一個模板,在創建任務時使用該模板,對輸入的內容的文件名進行不同的替換。那么,在創建任務時只需定義文件名和輸出的位置即可,這樣可以更方便地實現轉碼任務的自動化。
接下來舉一個例子,說明如何用轉碼的服務生成DASH流媒體。目前,在線觀看流媒體的用戶比較多(使用平板或手機觀看)。在海外常用的格式不是國內常用的FLV1格式,而是HLS格式和MPEG-DASH格式。在谷歌云的轉碼服務里,針對這兩種流媒體格式進行了很多優化。在這個例子中,在流媒體的輸出中定義了三個不同的碼率:400kbps、750kbps和僅有音頻的碼率(最低碼率)。這三種碼率格式可以按照規定進行轉碼輸出,確保最后輸出的不同碼率和定義的播放碼率是相匹配的。同時,也會自動生成MPD文件和視頻或音頻流的M4S文件,可以在移動設備上觀看這些文件。同理,HLS格式的轉碼過程與上述過程類似。
接下來介紹另一個有意思的場景。如果輸入視頻里有多個不同的音軌,比如多語言音軌,在輸出文件中,要根據不同的推廣國家選擇不同的音軌,那么可以用轉碼來進行選擇和定義。具體地,可以引用輸入文件里的某一個音軌或channel,然后在輸出時在不同的文件里加入不同的語言的音軌,使得最后的輸出文件可以根據不同的市場完成不同的定制。因此,針對海外不同國家和不同市場的業務,可以實現靈活地應用。
之前提到,有時在視頻轉碼時會生成圖片,接下來介紹其中的一個例子。在轉碼時,可以規定其按照固定間隔抽幀生成圖片,比如規定每一分鐘生成一張圖片,或者在一個時長為一小時的影片中,規定總共生成十張圖片,那么就會自動按照九個相同的間隔生成十張圖片。最后,可以選取質量較好的圖片作為視頻的封面。
另外,還可以指定輸出圖片的長寬比。有的視頻比例是16:9,有的視頻比例是4:3,因此可以選擇輸出圖片的不同的長寬比來適配視頻本身的長寬比,做到不變形。同樣,可以選擇一張圖片作為視頻的封面,提升用戶體驗。
剛才主要介紹了一些基本的功能和特色,接下來介紹如何使用轉碼服務。首先,要進行視頻內部的分析,了解輸入視頻的格式、時長和編碼特點,掌握輸入視頻包含哪些音頻和字幕軌。然后,要定義輸出的格式,即針對不同的場景,比如wifi播放、手機播放等,定義期望的輸出格式。接著,根據輸入和輸出的定義,完成轉碼的配置的編寫。其中,可以參考文檔中的示例和模板,我們谷歌云的同事也可以幫助客戶進行調試。調試好的配置可以在云上進行使用,每次創建任務后,可以選擇特定的配置的模板。最后輸出的視頻文件可以在不同的播放器上播放、測試,然后可以固化達到預期的測試效果的配置,以供后續使用。以上就是一個大概的流程。
為了實現這個流程的自動化,我們設計了一個方案。在這個方案里,我們使用了谷歌云無服務器托管的服務,幫助大家在免運維的模式下生成視頻制作的工作流。首先,在谷歌云的對象存儲里創建存儲的目錄,將所有的原視頻放在目錄里。然后,每當有新視頻上傳時,就會觸發云函數,由云函數來啟動轉碼任務,其可以根據視頻特點引用相應的轉碼配置。完成轉碼任務后,會向消息隊列投遞一個消息,消息隊列根據接收到的消息觸發另一個云函數,由其進行輸出文件的管理。輸出文件有幾種類型,一種是任務失敗,那就要把輸入/輸出文件放在失敗的隊列的存儲位置。另一種是任務成功,那么就將其放在發布的存儲位置。還可以使用相應的代碼實現內容的catalog管理,將視頻內容的轉碼結果放到數據庫里。這樣的完全自動化的流水線適用于業務繁忙的、轉碼任務較多的場景。
至此,我已經介紹完了轉碼服務。轉碼服務的完成是第一步,接下來要考慮如何讓用戶看到視頻,這里我們建議使用谷歌云的技術服務——CDN。完成轉碼服務的視頻可以放在對象存儲里,讓對象存儲作為視頻的源站。對象存儲可以對其進行名稱定義、目錄劃分和生命周期管理。同時,將視頻放在對象存儲里的最主要的目的是實現高效的內容的分發。因此,可以利用谷歌云的CDN接入GCS,將對象存儲作為源站,讓用戶可以更高速地下載視頻。舉個例子,谷歌云在全球有較多的網絡部署,也有一百多個CDN節點,這些節點與全球上千家主流運營商有直連。因此,在大部分國家和區域,用戶經過ASN的一跳就可以訪問CDN的緩存,可以高效地觀看或下載視頻。一些小的運營商的用戶經過ASN的兩跳或三跳也可以訪問CDN的緩存,然后可以高效下載內容。
接下來,給大家介紹谷歌云的CDN網絡和源站的對象存儲的部署情況。可以看到,在全球的一些熱點地區,比如美國、歐洲等,部署是比較密集的,可以幫助出海用戶實現快速高效的視頻業務的部署。目前,很多出海客戶使用谷歌云的CDN不僅實現了視頻的下載,還實現了應用、游戲的下載。這是因為,使用谷歌云的轉碼服務和CDN可以以無縫的方式實現視頻業務的部署。
最后,展示一下谷歌云CDN的性能報告。相比于其他CDN的平臺,由于在全球建立了很多骨干網,所以谷歌云的CDN有網絡的優勢,可以幫助用戶以更低的延時下載內容,而且吞吐也較高。
以上就是我今天分享的內容,感謝大家的傾聽。