Android平臺(tái)上基于H.265的視頻測(cè)評(píng)軟件開(kāi)發(fā)
摘要:針對(duì)全新編解碼技術(shù)H.265,研究并實(shí)現(xiàn)了基于Android平臺(tái)的視頻質(zhì)量評(píng)估軟件開(kāi)發(fā)。首先通過(guò)分析H.265編解碼標(biāo)準(zhǔn)的特點(diǎn)和VLC多媒體播放器的解碼方式,獲取了VLC播放器解碼后的YUV數(shù)據(jù)。再針對(duì)YUV數(shù)據(jù)進(jìn)行了分辨率、幀率、清晰度、亮度、色度等五個(gè)方面的評(píng)估分析,并結(jié)合主觀分析對(duì)該五項(xiàng)建立了合理的視頻評(píng)分體系。最后基于簡(jiǎn)潔明了的UI界面設(shè)計(jì),為用戶(hù)清晰地展示了評(píng)分結(jié)果。
本文引用地址:http://butianyuan.cn/article/277717.htm引言
隨著H.265視頻壓縮標(biāo)準(zhǔn)的出現(xiàn),其壓縮效率與錯(cuò)誤恢復(fù)能力的提高,以及實(shí)時(shí)的時(shí)延和信道獲取時(shí)間的減少等特點(diǎn),為互聯(lián)網(wǎng)高清視頻帶來(lái)了巨大變化。同時(shí)4G網(wǎng)絡(luò)的逐漸覆蓋使得移動(dòng)客戶(hù)端上的視頻載入率日漸提高,因此流媒體視頻評(píng)測(cè)軟件的開(kāi)發(fā)具有意義重大。
本文基于如今用戶(hù)群最大的Android平臺(tái)實(shí)現(xiàn)流媒體視頻評(píng)測(cè)軟件的開(kāi)發(fā),軟件主要從分辨率和幀率兩方面來(lái)測(cè)評(píng)視頻流暢度,同時(shí)從視頻質(zhì)量的亮度、色度和清晰度三個(gè)方面來(lái)評(píng)估視頻畫(huà)質(zhì),并將評(píng)估結(jié)果以分?jǐn)?shù)的形式直觀呈現(xiàn)于手機(jī)上。此結(jié)果方便用戶(hù)選擇視頻質(zhì)量更好的流媒體,同時(shí)也方便運(yùn)營(yíng)商針對(duì)視頻存在的問(wèn)題進(jìn)行測(cè)評(píng)維修,這將推動(dòng)整個(gè)流媒體服務(wù)器的發(fā)展。
1 技術(shù)平臺(tái)介紹
1.1 H.265發(fā)展優(yōu)勢(shì)
H.265標(biāo)準(zhǔn)圍繞著現(xiàn)有的視頻編碼標(biāo)準(zhǔn)H.264,保留原來(lái)的某些技術(shù),同時(shí)對(duì)一些相關(guān)的技術(shù)加以改進(jìn)。新技術(shù)使用先進(jìn)的技術(shù)用以改善碼流、編碼質(zhì)量、延時(shí)和算法復(fù)雜度之間的關(guān)系,達(dá)到最優(yōu)化設(shè)置。具體的研究?jī)?nèi)容包括:提高壓縮效率、提高魯棒性和錯(cuò)誤恢復(fù)能力、減少實(shí)時(shí)的時(shí)延、減少信道獲取時(shí)間和隨機(jī)接入時(shí)延、降低復(fù)雜度等[1]。
H.265的技術(shù)亮點(diǎn)包括以下幾點(diǎn):第一,靈活的編碼結(jié)構(gòu),在H.265中將宏塊的大小從H.264的16×16擴(kuò)展到了64×64,以便于高分辨率視頻的壓縮。同時(shí),采用了更加靈活的編碼結(jié)構(gòu)來(lái)提高編碼效率,包括編碼單元、預(yù)測(cè)單元和變換單元;第二,使用新的MV(運(yùn)動(dòng)矢量)預(yù)測(cè)方式,區(qū)別于H.264基于空間域的運(yùn)動(dòng)矢量預(yù)測(cè)方式,H.265擴(kuò)充更加多的方向進(jìn)行幀內(nèi)預(yù)測(cè),同時(shí)將預(yù)測(cè)塊的集合由原來(lái)的空間域擴(kuò)展到時(shí)間域及空時(shí)混合域,通過(guò)率失真準(zhǔn)則計(jì)算后選擇最佳的預(yù)測(cè)塊;第三,更低的碼流,多項(xiàng)質(zhì)量比較測(cè)試已經(jīng)表明,在相同的圖像質(zhì)量下,相比于H.264,通過(guò)H.265編碼的視頻碼流大小比H.264減少大約39%-44%。通過(guò)主觀視覺(jué)測(cè)試得出的數(shù)據(jù)顯示,在碼率減少51%-74%的情況下,H.265編碼視頻的質(zhì)量還能與H.264編碼視頻近似甚至更好,其本質(zhì)上說(shuō)是比預(yù)期的信噪比(PSNR)要好。
1.2 Android平臺(tái)開(kāi)發(fā)的優(yōu)越性
廣泛使用性:Android軟件擁有廣泛且穩(wěn)定的使用人群。
開(kāi)放性:Android具有開(kāi)源系統(tǒng)可供用戶(hù)自行設(shè)計(jì)更改。
豐富的硬件選擇:從性能一般的低端機(jī)到高配置的高端機(jī)一應(yīng)俱全,可滿(mǎn)足不同階層用戶(hù)的不同需求。
不受限制的軟件開(kāi)發(fā):Android平臺(tái)開(kāi)發(fā)周期短,應(yīng)用的發(fā)布簡(jiǎn)單,只需要通過(guò)Eclipse引導(dǎo)簽署開(kāi)發(fā)出的應(yīng)用,開(kāi)發(fā)者即擁有一個(gè)可以在任何Android平臺(tái)運(yùn)行的APK文件。將這個(gè)APK文件發(fā)布到各種平臺(tái)上進(jìn)行推廣,用戶(hù)安裝即可使用。如果應(yīng)用在使用中出現(xiàn)了問(wèn)題,出現(xiàn)代碼錯(cuò)誤,開(kāi)發(fā)者也能立刻上傳修復(fù)的版本供用戶(hù)下載。
1.3 方案總述
選擇Android平臺(tái)上基于H.265進(jìn)行視頻測(cè)評(píng)。具體方案流程圖如圖1所示。
首先利用VLC流媒體播放器接收流媒體數(shù)據(jù)流,再在 Linux環(huán)境下使用 Android NDK 將 HM10.0的解碼庫(kù)進(jìn)行移植,與VLC各模塊共同封裝成SO庫(kù)移植到 Android 平臺(tái)上,再通過(guò)JNI本地調(diào)用的方式在 Java 層調(diào)用來(lái)完成對(duì)HEVC 碼流的解析。在播放視頻的第三階段通過(guò)C語(yǔ)言來(lái)編寫(xiě)解碼模塊,由之解出的碼流分為兩路,其中一路按照正常播放流程由播放器輸出以實(shí)現(xiàn)正常播放的功能。另外一路則先導(dǎo)出至sdcard中,當(dāng)視頻播放結(jié)束后重新讀入YUV數(shù)據(jù)并利用Opencv設(shè)計(jì)算法進(jìn)行分析,最終結(jié)果以txt文本的形式存儲(chǔ)至sdcard中。
2 視頻流暢度測(cè)評(píng)
2.1 分辨率測(cè)評(píng)
2.1.1 分辨率簡(jiǎn)介
視頻分辨率指視頻的高/寬像素值,用來(lái)度量圖像內(nèi)數(shù)據(jù)量。通常將分辨率表示成ppi(每英寸像素Pixel per inch),一般說(shuō)的分辨率指圖像的高/寬像素值,嚴(yán)格意義上的分辨率是指單位長(zhǎng)度內(nèi)的有效像素值ppi。如圖2所示,分別是分辨率為72ppi和300ppi的圖像示例。
2.1.2 分辨率算法
本測(cè)評(píng)軟件采用一般定義,即視頻的高/寬像素值。
(1)首先利用Android自帶功能遍歷手機(jī)SD卡中的所有視頻,為視頻測(cè)評(píng)做準(zhǔn)備。
(2)通過(guò)搜索視頻媒體自帶的信息,獲取手機(jī)視頻的分辨率,并且根據(jù)獲取的分辨率為視頻評(píng)分。
(3)依據(jù)手機(jī)分辨率的屏幕參數(shù),我們選取480×270作為標(biāo)定值。高于此值,則分辨率這一項(xiàng)為滿(mǎn)分;反之,則為零分。
2.2 幀率
2.2.1 幀率簡(jiǎn)介
幀率是用來(lái)測(cè)量顯示幀數(shù)的量度,單位一般為fps(frames per second),表示圖形處理去處理場(chǎng)景時(shí)每秒鐘能夠更新的次數(shù)。高的幀率可以得到更流暢、更逼真的動(dòng)畫(huà)。根據(jù)人眼的特殊生理結(jié)構(gòu),如果所看畫(huà)面幀率高于16fps,則會(huì)認(rèn)為畫(huà)面連續(xù)。然而當(dāng)幀率超過(guò)屏幕刷新率時(shí),只會(huì)浪費(fèi)圖像處理能力。一般最合適的人眼接受幀率為25fps。
同時(shí),幀率影響畫(huà)面流暢度,與畫(huà)面流暢度成正比。幀率越大,畫(huà)面越流暢;幀率越小,畫(huà)面越有跳動(dòng)感。
2.2.2 幀率評(píng)分標(biāo)定
本項(xiàng)目采用一邊播放視頻一邊導(dǎo)出視頻轉(zhuǎn)換成YUV文件形式,再利用YUV文件的大小以及每一幀圖像的分辨率大小,計(jì)算出一段視頻的平均幀率。由于采用的是YUV420的形式,所以每一幀圖像的大小為length*width*1.5 bit,由此得出平均幀率計(jì)算公式如下:
幀率 = 一段時(shí)間內(nèi)YUV文件大小/length*width*1.5 bit*時(shí)間 (1)
具體實(shí)現(xiàn)函數(shù)如下:
(fram/(mVideoHeight*mVideoWidth*1.5*times))
由于人眼最適合的幀率為25fps,本文選取幀率大于20fps為流暢,即為滿(mǎn)分;選取小于5fps的幀率為不合格,即為零分。具體評(píng)分準(zhǔn)則如表1。
3 視頻畫(huà)質(zhì)測(cè)評(píng)
3.1 清晰度
3.1.1 清晰度研究背景
隨著各類(lèi)數(shù)字成像技術(shù)的飛速發(fā)展,數(shù)字圖像的清晰度日益成為衡量數(shù)字成像系統(tǒng)優(yōu)劣的重要指標(biāo)。一幅數(shù)字圖像質(zhì)量的好壞與其清晰度直接相關(guān),清晰度也指模糊度或粗糙度,是指人眼能感覺(jué)出的相鄰影像間的明顯程度[2]。導(dǎo)致圖像清晰度下降的原因是圖像模糊,在圖像采集、傳輸、壓縮等處理過(guò)程中都有可能產(chǎn)生模糊。
目前,對(duì)數(shù)字圖像清晰度的評(píng)價(jià)方法主要有空域參數(shù)方差、熵、以及頻域調(diào)制傳遞函數(shù)等,但由于這些方法各有優(yōu)缺點(diǎn),如空域參數(shù)雖評(píng)價(jià)簡(jiǎn)潔、快速,但對(duì)圖像清晰度的細(xì)小變化不敏感;頻域參數(shù)雖對(duì)圖像清晰度變化敏感,但計(jì)算較慢,不依程序運(yùn)算的自動(dòng)化[3 。
本項(xiàng)目通過(guò)對(duì)圖像進(jìn)行邊緣提取,計(jì)算其梯度數(shù)據(jù),建立清晰度評(píng)判標(biāo)準(zhǔn),從而進(jìn)行單幀圖像的清晰度判定。
3.1.2 圖像邊緣特征
圖像邊緣是指其周?chē)袼鼗叶扔须A躍性變化或屋頂型變化的像素的集合,是圖像最基本的特征之一,可以反映目標(biāo)的清晰度[4]。
一條理想的邊緣具有如圖3所示(a)模型的特征,這個(gè)模型生成的理想邊緣是一組相連像素的集合,每個(gè)像素都處在灰度級(jí)躍變的一個(gè)垂直臺(tái)階上。實(shí)際系統(tǒng)中,由于各種原因?qū)е聢D像模糊后,實(shí)際邊緣如3所示,(b)是一個(gè)過(guò)度的斜面。
從人眼視覺(jué)特性上,觀測(cè)目標(biāo)是否清晰,關(guān)鍵在于目標(biāo)與背景的邊緣上,如果邊緣銳利,圖像就比較清晰;如果邊緣過(guò)渡平緩,圖像就模糊。
3.1.3 清晰度算法
(1)先將圖片轉(zhuǎn)換為灰度圖,并申明為IplImage對(duì)象。核心代碼如下:
cvtColor(Input,gray,CV_BGR2GRAY);
IplImage tmp_image= IplImage(gray);
IplImage *img = &tmp_image;
(2)求梯度
公式及算法思路:
令:平均梯度為X,位寬為s,總梯度為Y,總像素點(diǎn)為N。
則:
(2)
(3)
(3)分析數(shù)據(jù)可知,過(guò)渡區(qū)上的最大梯度值,與圖像的清晰度呈正比關(guān)系。并且,梯度的陡峭程度與清晰度呈正比關(guān)系[5]。
(4)清晰度評(píng)價(jià)算法
評(píng)論