一. 背景與目標(biāo)
1.1 視頻審核背景
現(xiàn)有視頻審核系統(tǒng)由于歷史原因,針對(duì)不同的業(yè)務(wù)調(diào)用方和業(yè)務(wù)場(chǎng)景提供了多套視頻審核技術(shù)方案和服務(wù),且在審核時(shí)效、支持的協(xié)議完整性等方面存在一定的不足;同時(shí),多套系統(tǒng)并存一直存在較高的運(yùn)維成本的情況。
由此,需要設(shè)計(jì)一套統(tǒng)一的視頻審核系統(tǒng)架構(gòu),將多套服務(wù)合并為一套服務(wù),提供統(tǒng)一標(biāo)準(zhǔn)視頻審核服務(wù),大幅降低運(yùn)維成本的同時(shí),提供完整的接口協(xié)議支持和更高的審核時(shí)效。
?
1.2 設(shè)計(jì)目標(biāo)
?審核時(shí)效優(yōu)化:
?流式完成下載、拆幀、推理、通知四階段處理;使得整個(gè)審核過程為:邊下邊拆邊推邊響應(yīng)。
?每階段內(nèi)并行處理,提高審核時(shí)效。
最終目標(biāo):審核時(shí)長 = MAX(并行下載、并行拆幀、并行推理)。
?
?完整的接口協(xié)議,應(yīng)對(duì)未來不同需求場(chǎng)景:
?短視頻同步:提供時(shí)長1~2分內(nèi)、100MB內(nèi)的視頻,達(dá)成3秒內(nèi)審核完成的目標(biāo);且以同步阻塞接口提供服務(wù),簡(jiǎn)化業(yè)務(wù)方調(diào)用、交互過程。
?長視頻異步:支持10小時(shí)甚至更長視頻的異步審核能力,按調(diào)用方需求提供實(shí)時(shí)響應(yīng)開關(guān)。
?實(shí)時(shí)直播視頻流:針對(duì)實(shí)時(shí)直播流,提供邊拉流、邊審核、邊響應(yīng)的實(shí)時(shí)流式響應(yīng)能力。
?
二. 拆幀技術(shù)方案選型
2.1 ffmpeg簡(jiǎn)要介紹
針對(duì)不同的編碼器、封裝協(xié)議、傳輸協(xié)議,提供統(tǒng)一的音視頻處理接口。
跨平臺(tái),兼容200多種編碼、180多種封裝格式、20多種傳輸協(xié)議。世界上90%以上的音視頻開發(fā)基于FFmpeg。
?
2.2 API vs 命令行
?基于API
FFmpeg提供了一整套的音視頻處理庫,以統(tǒng)一的API分別完成音視頻處理過程中的主要階段,包括:
采集、解封裝、解碼、處理&轉(zhuǎn)換、編碼、封裝、傳輸?shù)取?/p>
其中,各個(gè)庫提供的API粒度較細(xì),非常適合對(duì)音頻、圖片幀做業(yè)務(wù)細(xì)粒度的自定義加工的場(chǎng)景。
ffmpeg庫 | 簡(jiǎn)介 |
libavcodec | 封裝絕大部分編碼解碼器,提供統(tǒng)一API。 |
libavformat | 封裝絕大部分封裝格式,針對(duì)不同封裝格式提供統(tǒng)一API。 |
libswscale | 圖片像素格式轉(zhuǎn)換工具庫。 |
libswresample | 音頻采樣格式轉(zhuǎn)換、重采樣工具庫。 |
libavfilter | 音視頻濾鏡庫。 |
libavutil | 音視頻開發(fā)過程中的工具函數(shù)大全。 |
libavdevice | 攝像頭、麥克風(fēng)等外部設(shè)備數(shù)據(jù)采集API。 |
?
?基于命令行
基于上述庫,F(xiàn)Fmpeg提供了可執(zhí)行命令行工具:FFmpeg。
FFmpeg命令行以組合大量選項(xiàng)、參數(shù)的方式完成常規(guī)的音視頻處理工作,且其本身以c語音實(shí)現(xiàn),為常規(guī)音視頻處理需求,提供了簡(jiǎn)單、穩(wěn)定、高效的支撐;通過高級(jí)命令行參數(shù)可達(dá)成設(shè)計(jì)目標(biāo) :
流式下載:支持Http/flv流等傳輸協(xié)議作為輸入,實(shí)現(xiàn)邊下載邊解碼。
分段并行:利用ss、to等選項(xiàng),其內(nèi)部基于http range seek特性,完成并行多段處理。
自定義音視頻參數(shù):利用codec/afilter/vfilter等編解碼、濾鏡參數(shù)可完成輸出圖片自定義幀率、音頻采樣、聲道等目標(biāo)。
?
綜合考慮視頻審核業(yè)務(wù)特點(diǎn),對(duì)音視頻處理過程本身并不復(fù)雜,單純、核心的目標(biāo)就是將音頻、圖片幀從視頻中拆分出來,并不存在過多的針對(duì)音視頻幀的加工處理過程,因此,視頻審核架構(gòu)采用FFmpeg命令行工具完成基礎(chǔ)的視頻拆幀工作。
?
三.框架描述
3.1 流式處理框架
任務(wù)處理器是視頻審核服務(wù)的核心組件,一個(gè)任務(wù)處理器實(shí)例包括三個(gè)子組件:拆幀引擎、任務(wù)驅(qū)動(dòng)器、審核業(yè)務(wù)對(duì)象。通過任務(wù)驅(qū)動(dòng)器的調(diào)度過程,協(xié)調(diào)拆幀引擎和審核業(yè)務(wù)對(duì)象兩個(gè)對(duì)象實(shí)例完成一個(gè)視頻任務(wù)的下載、拆幀、推理、響應(yīng)四階段流式、并行處理過程。
一個(gè)視頻審核服務(wù)內(nèi)根據(jù)容器cpu資源、配置情況,允許多個(gè)處理器實(shí)例并行完成多個(gè)視頻處理任務(wù)。
?
3.1.1 拆幀引擎
拆幀引擎:圖片拆幀邏輯圖、音頻拆幀邏輯圖,目標(biāo)均是流式生產(chǎn)數(shù)據(jù)。
?
圖片拆幀
單一視頻任務(wù)中,為了完成流式、并行處理目標(biāo),圖片拆幀模塊由兩個(gè)主任務(wù)并行完成:
一是根據(jù)視頻時(shí)間、業(yè)務(wù)策略,啟動(dòng)多個(gè)ffmpeg進(jìn)程,利用ffmepg的seek機(jī)制將視頻拆分為多段完成并行下載、拆幀。
二是收集任務(wù),根據(jù)拆分出的圖片幀時(shí)間戳信息生成圖片幀信息,供后續(xù)推理讀取。
?
音頻拆幀
針對(duì)音頻拆幀存在兩種目標(biāo):
針對(duì)視頻文件:采用單一命令完成整個(gè)音頻文件的拆分,供后續(xù)asr、音頻審核使用。
針對(duì)視頻流:相對(duì)于視頻文件,視頻流具有連續(xù)性,時(shí)間比為1:1,為了達(dá)成邊拆邊推理邊響應(yīng)目標(biāo),需要在直播過程中動(dòng)態(tài)切分音頻段,完成實(shí)時(shí)處理和實(shí)時(shí)響應(yīng)。
視頻流中的音頻處理部分涉及幾個(gè)主要步驟:
拆段:利用segments機(jī)制,完成固定時(shí)間段的音頻切分。
VAD:基于webrtc VAD模塊,遍歷PCM文件采樣數(shù)據(jù),完成有聲段音頻的拼接&切割。
編碼:將原始PCM音頻編碼為mp3,大幅降低文件尺寸便于傳輸。
收集:負(fù)責(zé)收集編碼后的mp3文件,生產(chǎn)音頻段信息,用于后續(xù)推理讀取。
?
3.1.2 審核業(yè)務(wù)模塊
審核業(yè)務(wù)對(duì)象與任務(wù)處理器、調(diào)用算法服務(wù)進(jìn)行交互,完成流式、并行的幀(圖片、音頻)審核業(yè)務(wù)過程。
審核業(yè)務(wù)對(duì)象內(nèi)部由單線程驅(qū)動(dòng),循環(huán)檢測(cè)幀隊(duì)列、異步推理響應(yīng)、異步上傳響應(yīng)三個(gè)狀態(tài),并根據(jù)推理、上傳結(jié)果,在業(yè)務(wù)策略開啟實(shí)時(shí)響應(yīng)開關(guān)時(shí),動(dòng)態(tài)發(fā)送部分響應(yīng)數(shù)據(jù)至實(shí)時(shí)結(jié)果隊(duì)列完成實(shí)時(shí)響應(yīng)。
?
3.1.3 任務(wù)調(diào)度器
拆幀引擎和業(yè)務(wù)對(duì)象對(duì)外部提供了標(biāo)準(zhǔn)的非阻塞狀態(tài)查詢及命令處理接口,圍繞這些接口,任務(wù)調(diào)度器內(nèi)部由單線程驅(qū)動(dòng),與拆幀引擎和業(yè)務(wù)對(duì)象進(jìn)行流式調(diào)用交互,這個(gè)過程中,拆幀引擎作為幀生產(chǎn)者、業(yè)務(wù)對(duì)象作為幀消費(fèi)者,任務(wù)驅(qū)動(dòng)器將兩者進(jìn)行銜接,從任務(wù)處理的角度驅(qū)動(dòng)兩者共同完成視頻審核過程。
?
?
至此,三者整體完成了核心目標(biāo):
下載、拆幀、推理三階段,每階段內(nèi)并行加速。
下載、拆幀、推理、實(shí)時(shí)通知四階段流式處理。
?
3.1.4 多業(yè)務(wù)場(chǎng)景
得益于核心組件間的標(biāo)準(zhǔn)接口交互,整個(gè)系統(tǒng)可以針對(duì)不同的業(yè)務(wù)場(chǎng)景、需求,將業(yè)務(wù)對(duì)象從主服務(wù)中剝離出去,由內(nèi)部函數(shù)調(diào)用改為遠(yuǎn)程RPC調(diào)用,并進(jìn)行分布式部署;使得所有業(yè)務(wù)在統(tǒng)一的流式、并行框架下,高效完成各種場(chǎng)景需求。
?
3.1.5 同步&異步處理流程
視頻拆幀過程屬cpu密集型業(yè)務(wù),其任務(wù)處理的服務(wù)節(jié)點(diǎn)優(yōu)先從cpu負(fù)載角度出發(fā),而不是接收請(qǐng)求的節(jié)點(diǎn)進(jìn)行處理;因此,在接收請(qǐng)求后,會(huì)將其派發(fā)到MQ任務(wù)隊(duì)列中,由cpu閑置的節(jié)點(diǎn)通過手動(dòng)pull方法完成任務(wù)獲取并處理。
同步與異步不同的點(diǎn)在于,異步任務(wù)處理完成后,直接將響應(yīng)發(fā)送到結(jié)果隊(duì)列中,由調(diào)用發(fā)接收;而同步模式下,需要將結(jié)果通過回調(diào)的方式,將響應(yīng)返回到請(qǐng)求接收節(jié)點(diǎn),再由請(qǐng)求接收節(jié)點(diǎn)進(jìn)行同步響應(yīng)給調(diào)用方,內(nèi)部通過同步對(duì)象、超時(shí)等機(jī)制完成同步調(diào)用協(xié)議。
?
3.2 結(jié)果服務(wù)
結(jié)果服務(wù)與主服務(wù)配套,從MQ接收主服務(wù)處理過程中發(fā)送的各種事件并保存,主要完成幾個(gè)功能:
?請(qǐng)求處理審計(jì):保留一個(gè)月的細(xì)節(jié)結(jié)果,供后臺(tái)查詢、分析視頻拆幀、審核過程的有效性、及時(shí)、快速、方便的審計(jì)問題。
?提供主動(dòng)查詢接口:調(diào)用發(fā)發(fā)起異步請(qǐng)求后,對(duì)比mq接收結(jié)果,另一種常見的方式是通過主動(dòng)調(diào)用查詢接口進(jìn)行定時(shí)檢查的方式獲取響應(yīng),結(jié)果服務(wù)提供get接口供調(diào)用方主動(dòng)進(jìn)行結(jié)果查詢。
?全局重試:主服務(wù)所在宿主機(jī)、容器宕機(jī)時(shí),結(jié)果服務(wù)內(nèi)部實(shí)現(xiàn)了定時(shí)檢查機(jī)制,當(dāng)發(fā)現(xiàn)視頻任務(wù)開始處理后,且在一定時(shí)間內(nèi)未響應(yīng)的情況下,會(huì)調(diào)用主服務(wù)完成任務(wù)的重試處理過程,確保視頻任務(wù)不丟失。
?
四. 策略配置
系統(tǒng)針對(duì)單一視頻的整個(gè)處理過程中,涉及不同的策略可以進(jìn)行配置&設(shè)置,包括兩個(gè)方面:
一是框架處理過程,二是審核業(yè)務(wù)策略,根據(jù)不同業(yè)務(wù)需求,可以進(jìn)行完成的處理過程配置;
業(yè)務(wù)方通過輸入業(yè)務(wù)token+策略ID進(jìn)行服務(wù)調(diào)用,以完成業(yè)務(wù)方特定需求,具體可配置策略包含如下:
框架行為策略 | 業(yè)務(wù)策略 |
是否開啟中間結(jié)果實(shí)時(shí)通知 | 審核疑似閾值 |
分段并行策略 {開始、結(jié)束時(shí)間、FPS} | 審核能力列表 |
是否并行拆圖片幀 |
? |
是否預(yù)下載,默認(rèn)邊下邊解 |
? |
? |
? |
下載超時(shí), 僅開啟預(yù)下載時(shí)有效 |
? |
拆幀超時(shí) |
? |
業(yè)務(wù)結(jié)果等待超時(shí) |
? |
? |
? |
視頻最大限制,默認(rèn)4GB。 |
? |
視頻最長限制,默認(rèn)倆小時(shí)。 |
? |
?
?不同模式部署
16c機(jī)器情況下,針對(duì)不同協(xié)議場(chǎng)景,完成集群配置:
集群 | 目標(biāo) | Processor 實(shí)例數(shù)量 | Image公共池并行數(shù) | 圖片拆幀是否拆段并行 |
短視頻同步 | 速度優(yōu)先,避免 多任務(wù)CPU資源沖突 | 1 | 4 | 是 |
長視頻異步 | 充分利用資源,允許任務(wù)排隊(duì) | 4 | 4 | 是 |
RTMP視頻流 | 實(shí)時(shí)流無法拆段并行 | 16 | 16 | 否 |
?
五. 測(cè)試驗(yàn)證
經(jīng)測(cè)試驗(yàn)證,在16C容器下達(dá)成設(shè)計(jì)目標(biāo):
?1分鐘、100MB內(nèi)視頻,2秒內(nèi)可完成審核。
?長視頻異步模式下,對(duì)比舊版服務(wù)審核時(shí)效平均提升5倍。
?優(yōu)雅退出+全局重試保障任務(wù)不丟失。
?標(biāo)準(zhǔn)模塊接口為未來擴(kuò)展為多場(chǎng)景通用分布式系統(tǒng)打下基礎(chǔ)。
?審核編輯 黃宇
-
接口
+關(guān)注
關(guān)注
33文章
8586瀏覽量
151084 -
ffmpeg
+關(guān)注
關(guān)注
0文章
46瀏覽量
7398
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論