在音視頻系統中,音視頻轉碼是比較消耗計算力的一個子系統,您可以通過函數計算和云工作流構建彈性高可用的Serverless音視頻處理系統。本文會從工程效率、運維、性能和成本方面介紹Serverless音視頻處理系統和傳統方案的差異。同時介紹如何搭建并體驗Serverless音視頻處理系統。
背景信息
針對音視頻轉碼,雖然您可以使用云上專門的轉碼服務,但在以下場景,您仍然會選擇自己搭建轉碼服務。
彈性伸縮訴求
需要更彈性的視頻處理服務。
例如,您已經在虛擬機或容器平臺上基于FFmpeg部署了一套視頻處理服務,但想在此基礎上實現更彈性、更高可用性的服務。
工程效率訴求
需要并行處理多個視頻文件。
需要批量快速處理多個超大的視頻。
例如,每周五定時產生幾百個4 GB以上1080P的大視頻,需要幾小時內處理完。
自定義處理訴求
需要處理更高級的自定義處理需求。
例如,視頻轉碼完成后,需要記錄轉碼詳情到數據庫,或自動將熱度很高的視頻預熱到CDN上以緩解源站壓力。
需要轉換音頻格式、自定義采樣率或音頻降噪等。
需要直接讀取源文件進行處理。
例如,當您的視頻源文件存放在NAS或ECS云盤上時,您需要自建服務直接讀取源文件進行處理,而不需要將其再次遷移至OSS。
需要將視頻轉換為其他格式,然后在此基礎上增加其他新的需求。
例如,將視頻進行轉碼、加水印和生成視頻首頁的GIF,然后在此基礎上增加新的需求,例如調整轉碼參數、發布新功能時對在線服務無影響。
成本訴求
需要簡單的轉碼或較輕量的需求時。
例如,獲取OSS上視頻前幾幀的GIF、獲取音視頻的時長,此時您自己搭建的成本會更低。
針對自己搭建轉碼服務的方案有傳統自建方案和Serverless方案,本文會介紹這兩類方案的差異及Serverless方案具體的操作流程。
解決方案
傳統自建方案
隨著計算機技術和網絡的發展,云計算廠商的產品在不斷成熟完善。如果想要搭建音視頻處理系統,可以直接上云購買ECS服務器部署服務,通過OSS、CDN等技術完成音視頻的存儲和音視頻的播放加速。
Serverless方案
視頻處理工作流系統
如果您需要加快大視頻的轉碼速度或者完成各種復雜的組合操作,可以通過云工作流編排函數實現功能強大的視頻處理系統。方案架構圖如下。
當用戶上傳一個MP4格式的視頻到OSS,OSS自動觸發云工作流流程執行,進行一種或多種格式的轉碼。通過該方案可以實現以下需求:
一個視頻文件可以同時被轉碼成各種格式和其他自定義處理,例如增加水印或在處理后更新信息到數據庫等。
當有多個文件同時上傳到OSS時,函數計算會自動伸縮,并行處理多個文件,同時將文件并行轉碼成多種格式。
結合NAS和視頻切片,可以解決超大視頻的轉碼。對于每個視頻,都需先進行切片處理,然后并行轉碼切片,最后合成。通過設置合理的切片時間,可以提高較大視頻的轉碼速度。
說明視頻切片是指將視頻流按指定的時間間隔切分成一系列分片文件,并生成一個索引文件,記錄分片文件的信息。
Serverless方案優勢
提高工程效率
對比項 | Serverless方案 | 傳統自建方案 |
基礎設施 | 無 | 需要您采購和管理。 |
開發效率 | 只需專注業務邏輯的開發,配合Serverless Devs編排和部署資源。 | 除了必要的業務邏輯開發,還需要您自己建立相同的線上運行環境,包括相關軟件的安裝、服務配置、安全更新等一系列問題。 |
并行和分布式視頻處理 | 通過云工作流資源編排即可實現多個視頻的并行處理和單個大視頻的分布式處理,穩定性和監控交由云平臺。 | 需要很強的開發能力和完善的監控系統來保證穩定性。 |
學習上手成本 | 會編寫對應語言的函數代碼和熟悉FFmpeg使用即可。 | 除了編程語言開發能力和熟悉FFmpeg外,可能還需要使用K8s和云服務器ECS,需要了解更多的產品、名詞和參數意義。 |
項目上線周期 | 預計3人天(開發調試2人天和壓測觀察1人天)。 | 在具體業務邏輯外耗費大量的時間和人力成本,保守估計大約30人天,包括硬件采購、軟件和環境配置、系統開發、測試、監控報警和灰度發布系統等。 |
彈性伸縮免運維
內容項 | Serverless方案 | 傳統自建方案 |
彈性高可用 | 函數計算系統具有毫秒級彈性伸縮,可以快速實現底層擴容以應對峰值壓力,免運維,轉碼性能優異。 | 需要自建負載均衡SLB,彈性伸縮、擴容縮容速度較函數計算慢。 |
監控報警查詢 | 提供更細粒度的云工作流流程執行和函數執行情況。同時,可以查詢每次函數執行的Latency和日志等,更加完善的報警監控機制。 | 彈性伸縮或容器級別的Metrics。 |
視頻處理工作流操作步驟
前提條件
開通服務并創建Bucket
函數計算:開通函數計算服務。
對象存儲OSS:控制臺創建存儲空間。
云工作流:開通云工作流服務。
文件存儲 NAS:開通文件存儲服務NAS。
專有網絡 VPC:開通專有網絡VPC。
Serverless Devs工具安裝及配置
操作步驟
該方案需要通過云工作流編排函數實現視頻處理系統,涉及到多個函數代碼和工作流的配置和編寫。本文使用Serverless Devs部署該系統。
單擊一鍵部署跳轉到函數計算的應用中心,開始快速部署應用。
在創建應用頁面,配置以下參數,然后單擊創建并部署默認環境。
重點參數配置如下,其余參數保持默認值即可。
參數名稱
參數說明
基礎信息
部署類型
選擇直接部署。
角色名稱
如果您使用的是阿里云賬號,第一次在應用中心創建應用,則需要單擊前往授權,跳轉至角色快捷創建頁面,創建
AliyunFCServerlessDevsRole
角色,然后單擊同意授權。如果您使用的是RAM用戶,請根據頁面提示,將復制的授權鏈接給到阿里云賬號進行授權。授權完成后,單擊已完成授權。
說明如果頁面提示無法獲取角色,請聯系對應的阿里云賬號給當前RAM用戶賦予
AliRAMReadOnlyAccess
、AliyunFCFullAccess
權限。具體操作,請參見通過阿里云賬號給RAM用戶授權。
高級配置
地域
選擇應用部署的地域。
工作流RAM角色的ARN
工作流執行使用的服務角色。請提前創建角色,并為其授予AliyunFCInvocationAccess權限策略。
函數計算Service角色
函數計算訪問其他云服務時使用的服務角色,如果沒有特殊要求,建議使用函數計算提供的默認服務角色AliyunFCDefaultRole。
對象存儲存儲桶名
填寫與工作流和函數相同地域下的Bucket名稱。
前綴
存放原始視頻的目錄前綴,本文示例為
src
。轉碼后的視頻保存目錄
轉碼后視頻存放目錄,本文實例為
dst
。OSS觸發器RAM角色ARN
推薦使用角色AliyunOSSEventNotificationRole,第一次使用的用戶,需單擊創建新的服務角色前往授權并創建該角色。
等待1~2分鐘后,應用部署成功,系統將自動創建5個函數以及對應的1個工作流
multimedia-process-flow-3oih
,您可以分別登錄函數計算控制臺和云工作流控制臺查看創建結果。5個函數的作用分別如下:oss-trigger-workflow:配置對應的觸發器,感知特定目錄的新視頻上傳內容,觸發工作流執行。
split:將特定視頻按照分段長度,在工作目錄中進行切分。
transcode:依照傳入的視頻格式,分別進行分段的視頻轉碼。
merge:將分段轉碼后的視頻拼接。
after-process:工作目錄清理。
驗證結果。
登錄云工作流控制臺,然后在頂部菜單欄,選擇地域。
在工作流列表,單擊目標工作流
multimedia-process-flow-3oih
,在工作流詳情頁面,單擊啟動執行執行工作流。在執行工作流面板,填寫執行名稱和執行輸入,輸入示例如下。{ "oss_bucket_name": "buckettestfnf", "video_key": "source/test.mov", "output_prefix": "outputs", "segment_time_seconds": 15, "dst_formats": [ "mp4", "flv" ] }
當執行狀態為已成功時,表示執行完成。
登錄對象存儲OSS控制臺,進入目標Bucket中,轉碼后視頻存放目錄
/outputs
,查看轉碼后的文件。當看到轉碼后的文件時,說明視頻處理系統的服務已正常運行。可以看到目標視頻格式已轉碼合并完成。
常見問題
有更高級的自定義處理需求,例如視頻轉碼完成后,需要記錄轉碼詳情到數據庫,或在轉碼完成后,自動將熱度很高的視頻預熱到CDN上,從而緩解源站壓力時,如何操作?
部署方案,請參見視頻處理工作流操作步驟。處理中可以做一些自定義的操作,或基于此流程再做一些額外處理等,例如再增加后續流程,或最開始增加預處理等。
自定義視頻處理流程中可能會有多種操作組合,例如轉碼、加水印和生成視頻首頁GIF。如果需要后續為視頻處理系統增加新需求,例如調整轉碼參數,并且希望新功能發布上線對在線服務無影響時,如何操作?
部署方案,請參見視頻處理工作流操作步驟。云工作流只負責編排調用函數,因此只需要更新相應的處理函數即可,同時函數有版本和別名功能,更好地控制灰度上線。更多信息,請參見版本。
只有簡單的轉碼需求,或是一些極其輕量的需求,例如需獲取OSS上視頻前幾幀的GIF、獲取音視頻的時長,自己搭建成本更低時,如何操作?
函數計算可以解決自定義問題,只需要在代碼中快速執行幾個FFmpeg的命令即可完成需求。典型示例工程,請參見fc-oss-ffmpeg。
視頻源文件存放在NAS或ECS云盤上,希望自建服務可以直接讀取源文件處理,而不需要將他們再遷移到OSS時,如何操作?
函數計算可以掛載NAS,直接處理NAS中的文件。更多信息,請參見配置NAS文件系統。