王晨,顏金堯,蔡洋
(中國傳媒大學(xué)媒體融合與傳播國家重點(diǎn)實(shí)驗(yàn)室,北京 100024)
對(duì)于超高清(4K、8K)專業(yè)媒體流信號(hào)域的實(shí)時(shí)制作播出,傳統(tǒng)SDI 架構(gòu)局限性大,傳輸速率較低,需要的電纜數(shù)量多且維護(hù)成本高,一根電纜僅可承載一路SDI;SDI信號(hào)傳輸距離有限;可替代性弱。不同于發(fā)展緩慢、成本較高的SDI 技術(shù),以太網(wǎng)帶寬和交換能力發(fā)展迅速,目前已經(jīng)發(fā)展到400Gbps 以上,具有傳輸速度快、結(jié)構(gòu)簡單、傳輸距離遠(yuǎn)、成本低、兼容性強(qiáng)、覆蓋范圍大、管理便捷、充分利用IP 網(wǎng)絡(luò)等多個(gè)優(yōu)點(diǎn)[1]。
因而廣電制播系統(tǒng)的采集、制作、播出等從傳統(tǒng)的SDI 架構(gòu)逐漸向全I(xiàn)P 化架構(gòu)遷移。為促進(jìn)IP 技術(shù)在實(shí)時(shí)視音頻領(lǐng)域的應(yīng)用,目前行業(yè)內(nèi)基本達(dá)成共識(shí)采用SMPTE 2019 年發(fā)布的ST 2110 標(biāo)準(zhǔn)系列。ST 2110 系列標(biāo)準(zhǔn)定義了視頻、音頻、其他數(shù)據(jù)在IP 網(wǎng)絡(luò)中的單獨(dú)封裝、分發(fā)。研究專業(yè)媒體流IP化的意義重大,可打破現(xiàn)有網(wǎng)絡(luò)中媒體制作播出的技術(shù)壁壘,充分利用IP 的特點(diǎn),將所有信號(hào)接入IP 中心矩陣,建立IP資源池,實(shí)現(xiàn)大帶寬、多格式、跨域協(xié)同、遠(yuǎn)程制作,為未來的全文件共享、云化做準(zhǔn)備。
2014 年,ESPN 建立了世界上第一個(gè)廣播電視直播IP 中心系統(tǒng)[2],該系統(tǒng)最初采用ST 2022-6 及ASPEN 的IP 信號(hào)標(biāo)準(zhǔn)。2020 年,BBC 威爾士新中央廣場總部使用Grass Valley 的技術(shù)支持全球最大的SMPTE 2110 IP 工作流[3]。截止到2020 年底,全球范圍內(nèi)已知規(guī)模最大的IP 系統(tǒng)是由NBC 部署的Telemundo 超大型IP 化數(shù)據(jù)中心。CNN 新總部大樓實(shí)現(xiàn)IP 化,成為全世界首個(gè)完全基于SMPTE 2110 IP 網(wǎng)絡(luò)的重要廣播基地[4]。
在國內(nèi)2018 年廣東臺(tái)建設(shè)了一個(gè)4K 頻道IP 總控系統(tǒng)[5]。2018 年愛奇藝創(chuàng)意制作中心建成IP ST 2110 總控系統(tǒng)。2018 年中央廣播電視總臺(tái)建設(shè)了2條完整的4K 生產(chǎn)線(其中1 條為全I(xiàn)P 化4K 生產(chǎn)線)。2019 年總臺(tái)首次在國慶活動(dòng)采用全I(xiàn)P 方式實(shí)現(xiàn)超大規(guī)模4K 和高清信號(hào)的無損高質(zhì)量回傳和信號(hào)分發(fā)。2019 年中國第一輛符合ST 2110 標(biāo)準(zhǔn)的單流4K 超高清全媒體轉(zhuǎn)播車在貴州臺(tái)交付[6]。2021 年中央廣播電視總臺(tái)在春晚期間建設(shè)全I(xiàn)P 化8K 信號(hào)制播生產(chǎn)環(huán)境,實(shí)現(xiàn)了4K、8K 和高清的并行直播。2021 年第十四屆全運(yùn)會(huì)期間,總臺(tái)轉(zhuǎn)播系統(tǒng)的核心業(yè)務(wù)調(diào)度系統(tǒng)實(shí)現(xiàn)全I(xiàn)P 架構(gòu),畫分和控制調(diào)度系統(tǒng)也實(shí)現(xiàn)全I(xiàn)P 化。
在整體IP制播系統(tǒng)環(huán)境下,諸多國外廠家和研究人員不斷研發(fā)相關(guān)IP 硬件設(shè)備和技術(shù)來促進(jìn)廣播行業(yè)的全I(xiàn)P 化。在視頻信號(hào)IP 化、解析播放視頻IP 信號(hào)等方面的設(shè)備類型多樣。 SONY NXLKIP50YNXLK-IP51Y 網(wǎng)關(guān)、GV 網(wǎng)關(guān)、ROSS Raptor 網(wǎng)關(guān)等國外設(shè)備以及僅有的國產(chǎn)網(wǎng)關(guān)格非IPGate 均可實(shí)現(xiàn)將SDI信號(hào)根據(jù)ST 2110標(biāo)準(zhǔn)封裝為IP流來通過網(wǎng)絡(luò)傳輸。Imagine SNP、LAWO 畫面分割器、SONY切換臺(tái)等均可接收解析IP信號(hào),并通過顯示器進(jìn)行視頻畫面觀看。視頻監(jiān)測分析方面,目前僅有Tektronix(泰克)公司的PRISM 示波器提供IP 工作流媒體技術(shù)指標(biāo)分析功能,可以詳細(xì)診斷ST 2110 流量問題。此外,N. Ranasinghe 提出了一個(gè)可擴(kuò)展的FPGA 架構(gòu),用于ST 2110 端到端的專業(yè)視頻解決方案,是第一個(gè)公開發(fā)布的此類硬件架構(gòu)[7]。
現(xiàn)階段電視臺(tái)和各大廠家主要通過硬件網(wǎng)關(guān)來實(shí)現(xiàn)SDI視頻的IP化和IP視頻信號(hào)監(jiān)看,盡管硬件功能較為齊全,但這些國外的硬件設(shè)備價(jià)格昂貴,連線復(fù)雜,采用硬件板卡燒制固定程序,通用性和靈活性不夠。
本文面向ST 2110-20 標(biāo)準(zhǔn),實(shí)現(xiàn)了基于RTP 流的未壓縮基帶視頻在IP 網(wǎng)絡(luò)中的解析播放、監(jiān)測分析的軟件系統(tǒng);設(shè)計(jì)了一套可以運(yùn)行在高性能通用計(jì)算機(jī)上的實(shí)時(shí)IP 解析監(jiān)測的軟件系統(tǒng)裝置,大大提高了性價(jià)比,打破了硬件和價(jià)格壁壘,更利于靈活研究IP 視頻信號(hào)。在IP 視頻解析方面,本文提出設(shè)計(jì)了緩存算法阻塞隊(duì)列長度設(shè)計(jì)和多線程并發(fā)來實(shí)現(xiàn)視頻解析播放。在IP 視頻監(jiān)測分析方面,本系統(tǒng)監(jiān)測分析丟包率、幀頻分布、幀間隔分布、首包處理時(shí)延、端到端時(shí)延5 個(gè)技術(shù)指標(biāo)和主觀觀看畫面效果。通過技術(shù)指標(biāo)和主觀效果的對(duì)比分析,本系統(tǒng)的系統(tǒng)設(shè)計(jì)及實(shí)現(xiàn)效果,在一定程度上可對(duì)比國外專用設(shè)備PRISM 示波器的視頻信號(hào)分析功能,在制播IP 化設(shè)備國產(chǎn)化和通用化方面,同時(shí)對(duì)融入電視制作域內(nèi)的整體監(jiān)控系統(tǒng),多流監(jiān)測方面有重要意義。實(shí)驗(yàn)結(jié)果分析證實(shí)本文創(chuàng)新提出的IP 視頻阻塞隊(duì)列長度設(shè)計(jì)算法是有效的。
一套完整的基于ST 2110標(biāo)準(zhǔn)的IP化視頻流采集解析監(jiān)測系統(tǒng)設(shè)計(jì)框架如圖1所示。視頻信號(hào)源產(chǎn)生專業(yè)媒體視頻,封裝成ST 2110 標(biāo)準(zhǔn)的IP 流并通過網(wǎng)絡(luò)進(jìn)行傳輸。本系統(tǒng)利用網(wǎng)卡接收IP視頻流信號(hào),根據(jù)自主設(shè)計(jì)的阻塞隊(duì)列長度算法,使用阻塞隊(duì)列實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)緩存及處理機(jī)制可控制化,采用多線程并發(fā)的方式,低門檻與低成本實(shí)現(xiàn)了IP基帶視頻流的實(shí)時(shí)解析與系統(tǒng)監(jiān)測,解決IP視頻系統(tǒng)的數(shù)據(jù)處理透明可控制化、視頻流解析技術(shù)通用化的問題。
圖1 系統(tǒng)設(shè)計(jì)框架
在實(shí)驗(yàn)系統(tǒng)設(shè)計(jì)中,數(shù)據(jù)包的存儲(chǔ)采用了阻塞隊(duì)列實(shí)時(shí)緩存而非直接寫入本地文件,節(jié)約了大量的寫入和讀取磁盤的時(shí)間。阻塞隊(duì)列采用先進(jìn)先出模式,當(dāng)隊(duì)列已滿時(shí)會(huì)等待隊(duì)列中的數(shù)據(jù)消耗,當(dāng)隊(duì)列為空時(shí)則等待數(shù)據(jù)填充,可以解決某個(gè)時(shí)間段內(nèi)產(chǎn)生數(shù)據(jù)的線程與消耗數(shù)據(jù)的線程之間速度不匹配的問題。
存儲(chǔ)數(shù)據(jù)包的阻塞隊(duì)列1長度的大小和視頻監(jiān)測系統(tǒng)的丟包率、端到端時(shí)延的大小密切相關(guān)。隊(duì)列越長,幀均丟包率越小,時(shí)延越大;隊(duì)列越短,幀均丟包率越大,時(shí)延越小。
針對(duì)隊(duì)列長度,本文自主設(shè)計(jì)一種算法,根據(jù)不同視頻流格式在網(wǎng)絡(luò)條件下的輸入輸出速率變化,設(shè)計(jì)相應(yīng)的隊(duì)列長度,來得到低丟包率和低時(shí)延。該算法適應(yīng)于高清、超高清等不同清晰度的視頻格式,但在超高清格式中只有逐行掃描格式。
阻塞隊(duì)列的輸入速率λ是指每秒采集經(jīng)網(wǎng)絡(luò)傳輸后到達(dá)隊(duì)列的視頻數(shù)據(jù)包的速率,可由計(jì)算機(jī)根據(jù)一段時(shí)間內(nèi)接收的數(shù)據(jù)包個(gè)數(shù)n_input除以相應(yīng)時(shí)間t_input得到;輸出速率μ是指視頻播放時(shí)每秒解析數(shù)據(jù)包的速率,同樣可由一段時(shí)間內(nèi)解析的數(shù)據(jù)包n_onput除以相應(yīng)時(shí)間t_onput得到。在實(shí)際網(wǎng)絡(luò)情況中,網(wǎng)絡(luò)狀態(tài)變化復(fù)雜,需根據(jù)隊(duì)列長度算法調(diào)整隊(duì)列長度,來保證較低的丟包率和時(shí)延。
當(dāng)輸入速率大于輸出速率時(shí),隊(duì)列長度L1 等于視頻流輸入速率λ與輸出速率μ的差乘實(shí)時(shí)視頻時(shí)長duration:
當(dāng)輸入速率小于等于輸出速率時(shí),隊(duì)列長度L2等于抖動(dòng)jitter。抖動(dòng)是指數(shù)據(jù)包延遲的變化程度,變化具備隨機(jī)性,隊(duì)列的輸入和輸出都有抖動(dòng)。因此本算法采用一種最佳抖動(dòng)時(shí)延處理,通過實(shí)際測量無限長隊(duì)列長度情況下,在系統(tǒng)穩(wěn)定時(shí)的最大抖動(dòng)隊(duì)列長度jitter,并選擇該jitter作為阻塞隊(duì)列長度。本文實(shí)驗(yàn)中采取此方法確定隊(duì)列長度。
算法偽代碼如下:
算法1:阻塞隊(duì)列長度算法輸入:輸入速率和輸出速率1.If μ<λ:2. L = |n_input ÷ t_input - n_output÷t_output|*duration 3.else if μ>=λ:4. L = jitter 5.end;輸出:阻塞隊(duì)列長度L
如圖1 系統(tǒng)設(shè)計(jì)框架所示,該部分可在VS 2019開發(fā)環(huán)境下編寫C++程序完成。
經(jīng)多次實(shí)驗(yàn)發(fā)現(xiàn),采集、解析、播放幾項(xiàng)操作均需耗費(fèi)較多時(shí)間,如果按順序依次執(zhí)行,則最終呈現(xiàn)的視頻播放效果差,畫面切換緩慢。因此需采用多線程并發(fā)的形式來提升程序的運(yùn)行速率,并通過阻塞隊(duì)列共享數(shù)據(jù),進(jìn)行線程間通信。程序中視頻數(shù)據(jù)包的采集緩存、緩存取出、解析、播放與監(jiān)測可以分成5 個(gè)并行任務(wù),因而采用5個(gè)線程形式實(shí)現(xiàn),提高程序運(yùn)行效率。線程1 和線程2、3 共享阻塞隊(duì)列1 中數(shù)據(jù)包。線程3和線程4共享阻塞隊(duì)列2中完整幀像素?cái)?shù)據(jù)。
線程1 可利用Winpcap 嗅探網(wǎng)卡捕獲視頻IP 數(shù)據(jù)包。Winpcap是Windows系統(tǒng)下捕獲和過濾底層網(wǎng)絡(luò)數(shù)據(jù)包、發(fā)送原始數(shù)據(jù)包到網(wǎng)絡(luò)上、收集網(wǎng)絡(luò)流量與網(wǎng)絡(luò)狀態(tài)的統(tǒng)計(jì)信息的一個(gè)開發(fā)庫[8]。捕獲數(shù)據(jù)包的主要步驟為:首先創(chuàng)建一個(gè)網(wǎng)絡(luò)設(shè)備鏈表以獲取本機(jī)的適配器,找到并打開網(wǎng)卡來捕獲完整數(shù)據(jù)包;設(shè)置混雜模式、內(nèi)核緩存區(qū)和用戶緩存區(qū),以解決抓包時(shí)的丟包漏包;調(diào)用回調(diào)函數(shù)不斷地捕獲數(shù)據(jù)包,并在回調(diào)函數(shù)中不斷將數(shù)據(jù)包存入阻塞隊(duì)列1中。
線程2 取出視頻IP 數(shù)據(jù)包。首先根據(jù)IP 數(shù)據(jù)包類型初始化。初始化后,線程2 按存入順序不斷地從阻塞隊(duì)列1中取出以太網(wǎng)數(shù)據(jù)包,進(jìn)行結(jié)構(gòu)體賦值。
線程3進(jìn)行數(shù)據(jù)處理,提取數(shù)據(jù)包中的視頻信息,拼接出視頻幀的像素信息。首先根據(jù)視頻內(nèi)容設(shè)置視頻的幀率、寬高、色度采樣等參數(shù),新建一幀圖像緩存區(qū)(例如采樣格式為4:2:2 的高清緩存區(qū)大小為1920*1080*2)。然后根據(jù)ST 2110-20 協(xié)議讀取數(shù)據(jù)包SRD 字段中的F、SRD Row Number、C、Offset 的值[9],讀取方式為數(shù)組偏移,偏移量由字段所在的字節(jié)位置距數(shù)據(jù)包包頭的距離決定。數(shù)據(jù)包從外到內(nèi)的封裝依次為以太網(wǎng)/IP/UDP/RTP/ST 2110-20 有效載荷頭/視頻像素?cái)?shù)據(jù)。若數(shù)據(jù)包的首字節(jié)用pkt[0]表示,第一個(gè)SRD F位于ST 2110-20有效載荷頭的第5個(gè)字節(jié)中的第一位,即數(shù)據(jù)包的第58 個(gè)字節(jié)(58=14+20+8+12+4),即pkt[58]中的第一位。當(dāng)以上SRD 字段全為0時(shí),為圖像起始行;若不是,繼續(xù)讀取數(shù)據(jù)包,直至全為0。當(dāng)圖像起始行的數(shù)據(jù)包確定后,根據(jù)序列號(hào)依次讀取同一幀圖像的所有數(shù)據(jù)包中的像素信息,直到數(shù)據(jù)包標(biāo)志位M 為1,通過相鄰字節(jié)拼接恢復(fù)出相應(yīng)比特(例10bit)的原始取樣像素值元組,再結(jié)合SDL 顯示圖像的特性對(duì)像素值數(shù)據(jù)進(jìn)行處理,以方便圖像顯示。最后根據(jù)采樣結(jié)構(gòu)將上述得到的圖像對(duì)應(yīng)像素信息Y、Cb、Cr 按照SRD 頭部樣本行中的Row Number、Offset、Length 位置信息進(jìn)行相應(yīng)賦值,直到一幀圖像緩存區(qū)完全被填滿,即得到一幀完整圖像,并將一幀完整圖像數(shù)據(jù)存入阻塞隊(duì)列2中。重復(fù)這個(gè)過程,不斷將圖像緩存區(qū)的新圖像存入阻塞隊(duì)列2。
線程4 播放視頻SDL(Simple DirectMedia Layer),SDL 是一套開放源代碼的跨平臺(tái)多媒體開發(fā)庫,它提供了豐富的控制圖像、聲音、輸入輸出的函數(shù)[10]。SDL 顯示視頻的流程主要可以分成兩大部分:初始化和循環(huán)顯示畫面。首先按照順序創(chuàng)建SDL 窗口、渲染器、紋理進(jìn)行初始化,之后重復(fù)從阻塞隊(duì)列2中獲取一幀圖像數(shù)據(jù)來紋理更新、渲染器渲染、視頻顯示。
線程5為輸出監(jiān)測信息,含阻塞隊(duì)列實(shí)時(shí)長度、隊(duì)列輸入輸出包間隔、丟包數(shù)、總包數(shù)、幀頻、幀解析、播放及總間隔。
實(shí)驗(yàn)過程中的物理拓?fù)淙鐖D2 所示,視頻源由小米盒子和格式轉(zhuǎn)換器BlackMagic 組成,SDI-IP 網(wǎng)關(guān)為ROSS Raptor、通過華三交換機(jī)和光纖實(shí)現(xiàn)數(shù)據(jù)包網(wǎng)絡(luò)上的轉(zhuǎn)發(fā)。小米盒子傳輸出含時(shí)間碼內(nèi)容的視頻作為視頻源,通過HDMI 線纜發(fā)送到BlackMagic。BlackMagic 可輸出1920*1080 50p,4:2:2,10bit 的高清視頻及3840*2160 50p, 4:2:2,10bit的4K 超高清視頻。視頻數(shù)據(jù)經(jīng)SDI 同軸線纜傳輸?shù)絉OSS Raptor 網(wǎng)關(guān),網(wǎng)關(guān)根據(jù)ST 2110-20 標(biāo)準(zhǔn)封裝成在IP 網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)包,數(shù)據(jù)包大小均為1262 字節(jié),一幀高清4320 個(gè)數(shù)據(jù)包。數(shù)據(jù)包繼而經(jīng)由光纖和交換機(jī)在網(wǎng)絡(luò)中靈活傳播。高性能PC捕獲數(shù)據(jù)包進(jìn)行解析監(jiān)測。
圖2 實(shí)驗(yàn)物理拓?fù)?/p>
在超高清視頻系統(tǒng)建設(shè)過程中,最開始主流方案是將一幀4K 完整圖像分割成4 個(gè)子圖像通過4 路3G-SDI 信號(hào)來傳輸,主要有2SI(2 Sample Interleave)和SQD(Square Division)兩種傳輸模式[4],現(xiàn)電視臺(tái)多用1路4K。為便于理解和減少實(shí)驗(yàn)復(fù)雜度,本文僅選取超高清4路中的1路無壓縮高清視頻IP流來進(jìn)行實(shí)驗(yàn)。不同清晰度視頻IP 化實(shí)現(xiàn)的原理同本實(shí)驗(yàn)相同,但當(dāng)需要4路高清視頻合成時(shí),必須按照傳輸方式將4路3G-SDI鏈路的信號(hào)綁定在一起,且嚴(yán)格區(qū)分兩端序號(hào)對(duì)應(yīng)關(guān)系。
數(shù)據(jù)包包間隔指兩個(gè)連續(xù)數(shù)據(jù)包進(jìn)入或離開阻塞隊(duì)列的間隔。網(wǎng)絡(luò)傳輸中,因?yàn)榫W(wǎng)絡(luò)鏈路、擁塞情況、抖動(dòng)、系統(tǒng)處理方式等因素,數(shù)據(jù)包到達(dá)和離開隊(duì)列的間隔不一。圖3展示了系統(tǒng)穩(wěn)定運(yùn)行后100萬個(gè)數(shù)據(jù)包隊(duì)列輸入和輸出的包間隔變化,可以看出隊(duì)列的輸入輸出均有抖動(dòng),輸入的抖動(dòng)明顯大于輸出的抖動(dòng),說明數(shù)據(jù)流從網(wǎng)絡(luò)到達(dá)系統(tǒng)阻塞隊(duì)列的緩存后,抖動(dòng)可以明顯下降,證明了阻塞隊(duì)列的必要性,通過阻塞隊(duì)列的緩存可以使系統(tǒng)平穩(wěn)地解析播放視頻。隊(duì)列輸入和輸出的包間隔平均值分別為4620ns和4611ns,與數(shù)據(jù)包生產(chǎn)時(shí)間間隔相當(dāng)(4629ns),說明系統(tǒng)采集和處理數(shù)據(jù)包的性能足夠。
圖3 阻塞隊(duì)列輸入輸出包間隔抖動(dòng)
實(shí)驗(yàn)中采用的視頻源和網(wǎng)關(guān)平均20ms發(fā)送一幀視頻信號(hào),一定程度代表了輸入速率。為簡單測試本系統(tǒng)性能,實(shí)驗(yàn)時(shí)先緩存50幀視頻內(nèi)容,然后再進(jìn)行視頻解析播放,經(jīng)測試系統(tǒng)可以平均14.5ms解析一幀視頻,相對(duì)應(yīng)代表輸出速率,遠(yuǎn)小于20ms,說明系統(tǒng)性能足夠好。但輸入速率是前提,即使系統(tǒng)性能再高,輸出速率也會(huì)受到輸入速率的限制,由此得出本系統(tǒng)的輸出速率大于等于輸入速率。因此,阻塞隊(duì)列長度采用公式2。
阻塞隊(duì)列實(shí)時(shí)長度指在系統(tǒng)運(yùn)行時(shí)阻塞隊(duì)列1中的數(shù)據(jù)包個(gè)數(shù)。圖4展示了在阻塞隊(duì)列無限長的情況下,系統(tǒng)開始運(yùn)行20s內(nèi),阻塞隊(duì)列實(shí)時(shí)長度的變化。系統(tǒng)運(yùn)行初始不穩(wěn)定,隊(duì)列長度大,最大值小于10000,平均值為1164.13。8s后,系統(tǒng)已經(jīng)穩(wěn)定運(yùn)行,圖5描述了8s-20s內(nèi)系統(tǒng)平穩(wěn)運(yùn)行時(shí)的阻塞隊(duì)列長度頻數(shù),圖5中可以看出隊(duì)列長度最大值小于2000,頻數(shù)主要集中在0~800,800~2000時(shí)逐漸下降。因此,結(jié)合圖4和圖5,我們選擇了1100、1500、2000、10000、無限長5個(gè)隊(duì)列長度,來分別測試系統(tǒng)性能指標(biāo),選出合適的隊(duì)列長度,并證明2.2節(jié)中阻塞隊(duì)列長度算法的準(zhǔn)確性。
圖4 阻塞隊(duì)列實(shí)時(shí)長度變化
圖5 阻塞隊(duì)列長度頻數(shù)圖
為更全面地衡量超高清IP化視頻采集解析及監(jiān)測的性能,從系統(tǒng)效率、數(shù)據(jù)完整性、傳輸穩(wěn)定性、實(shí)時(shí)性幾個(gè)方面提出了以下5個(gè)指標(biāo):丟包率、幀頻分布、幀間隔分布、首包處理時(shí)延、端到端時(shí)延。通過5種阻塞隊(duì)列長度的5個(gè)指標(biāo)分析對(duì)比,確定當(dāng)輸出速率大于等于輸入速率時(shí)阻塞隊(duì)列長度的大小。
(1)丟包率
從系統(tǒng)開始運(yùn)行后,由于網(wǎng)卡抓包或系統(tǒng)解析錯(cuò)誤導(dǎo)致丟失的數(shù)據(jù)包數(shù),與數(shù)據(jù)包總數(shù)的百分比值,稱為丟包率。
圖6描述了系統(tǒng)運(yùn)行1分鐘時(shí),5種隊(duì)列長度的丟包率。當(dāng)隊(duì)列長度大于等于2000時(shí),丟包率為0。2000為系統(tǒng)穩(wěn)定運(yùn)行時(shí)隊(duì)列長度的最大值,該值為1分鐘內(nèi)系統(tǒng)不丟包的5種隊(duì)列長度的最小值。經(jīng)測試發(fā)現(xiàn),當(dāng)系統(tǒng)運(yùn)行時(shí)間更長時(shí),隊(duì)列長度2000、10000、無限長也會(huì)發(fā)生丟包,零丟包率持續(xù)時(shí)間隨著隊(duì)列長度增長而增加,但均在丟包較少時(shí)不影響觀看效果。
圖6 丟包率對(duì)比
當(dāng)隊(duì)列輸入的抖動(dòng)過大,數(shù)據(jù)不斷堆積,當(dāng)隊(duì)列被堆積數(shù)據(jù)填滿時(shí),數(shù)據(jù)寫入線程休眠,線程休眠期間不再接收新數(shù)據(jù)。當(dāng)阻塞隊(duì)列中的數(shù)據(jù)被消耗一些后,寫入線程重新工作,此時(shí)接收的數(shù)據(jù)與先前填入的數(shù)據(jù)便有了斷層,休眠期間本應(yīng)接收的數(shù)據(jù)丟失了,因而產(chǎn)生了丟包。當(dāng)阻塞隊(duì)列長度越長時(shí),阻塞隊(duì)列可容納的數(shù)據(jù)包越多,允許的突發(fā)抖動(dòng)也更大,從而丟包率小。
(2)幀頻分布
在系統(tǒng)開始運(yùn)行后,每秒視頻播放幀數(shù)的分布情況稱為幀頻分布。
圖7中描述了系統(tǒng)開始運(yùn)行后20s內(nèi)幀頻的變化。除隊(duì)列長度1100和1500外,各阻塞隊(duì)列長度在視頻開始第1s,系統(tǒng)不穩(wěn)定,幀頻均不等于50,第2s及之后幀頻穩(wěn)定在50,系統(tǒng)達(dá)到穩(wěn)定。隊(duì)列長度1100和1500幀頻均一直未達(dá)到穩(wěn)定,在49上下變化,產(chǎn)生此的原因與系統(tǒng)丟包導(dǎo)致的丟幀密切相關(guān)。
圖7 幀頻對(duì)比
(3)幀間隔分布
在系統(tǒng)平穩(wěn)運(yùn)行狀態(tài)下,即幀頻穩(wěn)定在50時(shí),當(dāng)前幀解析完畢與上一幀解析完畢之間的時(shí)間間隔為幀解析間隔。
當(dāng)前幀播放完畢與上一幀播放完畢之間的時(shí)間間隔為幀播放間隔。
當(dāng)前幀解析播放完畢和上一幀解析播放完畢間的時(shí)間間隔為幀全間隔分布。
幀全間隔分布和隊(duì)列長度關(guān)系較小,只與數(shù)據(jù)解析播放線程本身的效率有關(guān)。因此,在研究幀的解析、播放和全時(shí)間間隔之間的關(guān)系時(shí),僅采取了隊(duì)列長度10000時(shí)的幀間隔數(shù)據(jù)。
圖8描述了系統(tǒng)穩(wěn)定運(yùn)行后60幀的幀全間隔、解析間隔、播放間隔的數(shù)值變化,平均值依次為19.48ms、19.4ms、4ms。其中需要注意的是,在3.2中指出系統(tǒng)平均14.5ms解析一幀視頻,但是在本實(shí)驗(yàn)中幀解析間隔平均19.4ms,這是因?yàn)橐曨l源本身為50p,每幀20ms生成的速率限制了更快的幀解析時(shí)間。全間隔包括解析和播放兩步,全間隔的平均值小于解析和播放間隔之和,這說明加入阻塞隊(duì)列2實(shí)現(xiàn)解析和播放線程分離,在不同的CPU上同時(shí)運(yùn)行后,系統(tǒng)運(yùn)行的時(shí)間只取決于運(yùn)行時(shí)間長的線程,即解析線程,縮短了解析和播放順序運(yùn)行的時(shí)間,提高了程序運(yùn)行效率。在圖8中全間隔和解析間隔變化趨勢(shì)相同,全間隔比解析間隔變化慢1幀,兩者均值僅差0.08ms,從數(shù)據(jù)上也驗(yàn)證了系統(tǒng)運(yùn)行時(shí)間主要依賴于耗時(shí)最多解析線程的變化。
圖8 幀間隔對(duì)比
(4)首包處理時(shí)延
在系統(tǒng)網(wǎng)絡(luò)拓?fù)浞€(wěn)定的前提下,系統(tǒng)開始運(yùn)行后抓取到第一個(gè)數(shù)據(jù)包與第一個(gè)數(shù)據(jù)包所屬視頻幀解析完畢之間的時(shí)間間隔,首包處理時(shí)延可以在一定程度上反映系統(tǒng)初始化效率以及數(shù)據(jù)解析效率。
首包處理時(shí)延=首幀解析完畢時(shí)間-首包捕獲時(shí)間。
圖9表示5種隊(duì)列長度各20次實(shí)驗(yàn)的首包處理平均時(shí)延,從圖9中可以看出首包處理時(shí)延整體趨勢(shì)隨著隊(duì)列增長而增大,從隊(duì)列長度2000開始,首包處理時(shí)延增加明顯。由圖4可知,在系統(tǒng)初始化時(shí),隊(duì)列里的長度最長,系統(tǒng)初始化時(shí)隊(duì)列長度最大到10000。當(dāng)阻塞隊(duì)列長度為2000時(shí),系統(tǒng)初始化時(shí)隊(duì)列長度最大到1999。因此設(shè)置隊(duì)列長度越長,在系統(tǒng)初始化時(shí)阻塞隊(duì)列里的數(shù)據(jù)包就會(huì)越多,系統(tǒng)未及時(shí)處理,進(jìn)而導(dǎo)致首包處理時(shí)延增大,而在系統(tǒng)穩(wěn)定后,各阻塞隊(duì)列長度中的實(shí)時(shí)隊(duì)列長度則一直在0到某個(gè)范圍穩(wěn)定變化。
圖9 首包處理時(shí)延變化
(5)端到端時(shí)延
在系統(tǒng)平穩(wěn)運(yùn)行狀態(tài)下,端到端時(shí)延為視頻數(shù)據(jù)源端與視頻播放端二者之間的實(shí)時(shí)時(shí)間差,通過該指標(biāo)的分布情況可以看出整個(gè)系統(tǒng)層面的整體運(yùn)行效率。
端到端時(shí)延=發(fā)送時(shí)延+傳輸時(shí)延+處理時(shí)延。
圖10為各隊(duì)列長度在系統(tǒng)開始運(yùn)行1分鐘內(nèi)20次的端到端時(shí)延對(duì)比,平均值依次為0.72s、0.61s、0.13s、0.15s、0.14s。隊(duì)列長度1100和1500的平均端到端時(shí)延過大的原因和丟包率大密切相關(guān)。隊(duì)列長度大于等于2000時(shí),端到端時(shí)延相差不大。在系統(tǒng)穩(wěn)定后,實(shí)時(shí)隊(duì)列長度(最大值2000)小于設(shè)置的阻塞隊(duì)列長度時(shí),系統(tǒng)的處理性能足夠,可以實(shí)時(shí)處理完阻塞隊(duì)列中的數(shù)據(jù)包,故而端到端時(shí)延相差不大。
圖10 端到端時(shí)延對(duì)比
(6)綜合指標(biāo)分析
通過以上分析,各阻塞隊(duì)列長度可得出表1 的信息,其中數(shù)字1-5 代表該指標(biāo)在幾個(gè)隊(duì)列長度中的系統(tǒng)性能分?jǐn)?shù),數(shù)字越大,系統(tǒng)性能越好。
表1 各隊(duì)列長度指標(biāo)性能比較
在5 種隊(duì)列長度中,1100 和1500 因?yàn)楫a(chǎn)生丟包,除首包處理時(shí)延外,其他指標(biāo)均表現(xiàn)較差,可首先排除這兩個(gè)長度。剩余的三個(gè)隊(duì)列長度在幀頻分布上性能一樣;在丟包率上,1分鐘內(nèi),三者一樣好,但持續(xù)時(shí)間更長的情況下,無限長最好;在首包處理時(shí)延和端到端時(shí)延上,2000表現(xiàn)最好,且綜合得分最高。
因此,在考慮系統(tǒng)初始化快并且實(shí)時(shí)性高時(shí),阻塞隊(duì)列長度最佳為2000,即jitter為2000。僅考慮系統(tǒng)在長時(shí)間內(nèi)(大于1 分鐘時(shí))的丟包率性能,阻塞隊(duì)列長度最佳為無限長。而從實(shí)際出發(fā),隊(duì)列無限長即為電腦內(nèi)存,存在著不定性,阻塞隊(duì)列長度越大,占用的內(nèi)存資源也越大,且如果阻塞隊(duì)列消耗速率在一段時(shí)間內(nèi)持續(xù)小于放入速率,端到端時(shí)延將越來越大。因此,在本實(shí)驗(yàn)環(huán)境下,阻塞隊(duì)列的輸入小于等于輸出速率時(shí)的阻塞隊(duì)列長度確定為2000 最好,即L=2000。
(7)視頻解析監(jiān)測結(jié)果
在阻塞隊(duì)列長度為L=2000 的情況下,實(shí)驗(yàn)結(jié)果視頻播放畫面截圖如圖11 所示,畫面顯示完整,播放流暢無卡頓、畫面與視頻源相比得到良好的還原。
圖11 實(shí)驗(yàn)播放效果圖
制播全I(xiàn)P化符合廣電和媒體行業(yè)未來發(fā)展方向。本文在通用計(jì)算機(jī)環(huán)境下設(shè)計(jì)和實(shí)現(xiàn)了ST 2110-20標(biāo)準(zhǔn)IP視頻信號(hào)的采集、解析、播放和監(jiān)測分析,大幅度提高了系統(tǒng)的工作效率。實(shí)現(xiàn)中共采用5 個(gè)線程:Winpcap 采集視頻流數(shù)據(jù)包,并存儲(chǔ)在阻塞隊(duì)列1;從阻塞隊(duì)列1 獲取數(shù)據(jù)包;解析數(shù)據(jù)包獲取完整圖像像素信息,存儲(chǔ)在阻塞隊(duì)列2中;從阻塞隊(duì)列2獲取整幀圖像像素信息,利用SDL 實(shí)現(xiàn)視頻播放;輸出監(jiān)測信息。
本文設(shè)計(jì)了多線程并發(fā)和阻塞隊(duì)列長度緩存算法,根據(jù)阻塞隊(duì)列長度算法獲得阻塞隊(duì)列長度可以為整個(gè)IP系統(tǒng)得到低丟包率、低延時(shí)。在阻塞隊(duì)列的輸入速率小于等于輸出速率時(shí),通過5 種隊(duì)列長度在丟包率、幀頻分布、幀間隔分布、首包處理時(shí)延、端到端時(shí)延5 個(gè)監(jiān)測技術(shù)指標(biāo)下的性能對(duì)比,確定了本實(shí)驗(yàn)的阻塞隊(duì)列長度為2000,該隊(duì)列長度在5 個(gè)監(jiān)測技術(shù)指標(biāo)中整體性能良好。由此我們也可得出在無限長阻塞隊(duì)列前提下,系統(tǒng)穩(wěn)定運(yùn)行后的最大抖動(dòng)隊(duì)列長度即為可設(shè)置的最佳隊(duì)列長度,2.2 節(jié)的阻塞隊(duì)列長度算法得證。