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