[0165] 頓率分類層次;15,9, 5, 3,1
[0166] 所有分類層次均只開啟1/2像素的運動估計及16x16到8x8的編碼塊結(jié)構(gòu),1/4像 素及8x4,4x8與4x4編碼塊結(jié)構(gòu)不開啟。
[0167] 對于每一個運行谷歌安卓系統(tǒng)的不同型號終端,根據(jù)獲取的CPU主頻及核數(shù)映射 到相應(yīng)的IOS系統(tǒng)的對應(yīng)型號,映射關(guān)系如下:
[016引 安卓CPU〉= 4核且主頻〉1. 2G 《-》IP冊肥_5S
[0169] 安卓CPU〉= 4核且主頻< =1. 2G 《-》IP冊肥_5
[0170] 安卓CPU〉= 2核,<4核且主頻〉1. 2G《-》IP冊肥_4S
[0171] 安卓 CPIK2 核或主頻 < =1. 2G 《-))IPH0NE_4
[0172] 步驟202,在啟動視頻通話時檢測網(wǎng)絡(luò)帶寬與對端畫面的寬高比,根據(jù)所獲得的信 息設(shè)置適應(yīng)于編碼器的初始編碼分辨率與頓率,其中,所獲得的信息包括網(wǎng)絡(luò)帶寬和CPU 能力,并且所述CPU能力取各通訊端中能力最小者的值Vmin。
[0173] 進一步地,所述根據(jù)所獲得的信息設(shè)置適應(yīng)于編碼器的初始編碼分辨率與頓率 (步驟202),可W包括;按表二方式設(shè)置網(wǎng)絡(luò)帶寬及智能終端的CPU能力與推薦分辨率與頓 率之間的對應(yīng)關(guān)系。
[0174] 表二
[0176] 例如,網(wǎng)絡(luò)帶寬及終端CPU能力與推薦分辨率與頓率之間的對應(yīng)關(guān)系為:
[0177] 帶寬〉=128化ps, CPU_Capacity> = IPH0NE_4S,編碼分辨率為 320x240,頓率為 15,編碼層級為8 ;
[0178] 帶寬〉=128kbps, CPU_Capacit}<IP冊肥_4S,編碼分辨率為 240x160,頓率為 15, 編碼層級為7 ;
[0179] 128化ps>帶寬〉=64化PS,對所有終端,編碼分辨率為240x160,頓率為15,編碼 層級為7 ;
[0180] 64化PS〉帶寬〉=32化PS,對所有終端,編碼分辨率為160x120,頓率為5,編碼層 級為4 ;
[0181] 帶寬<32化PS,對所有終端,編碼分辨率為80x60,頓率為3,編碼層級為1。
[0182] 進一步地,所述根據(jù)得到的推薦分辨率W及對端屏幕的寬高比,裁剪出和對端寬 高比接近的分辨率進行編碼(步驟203),可W包括:
[0183] 設(shè)各項參數(shù)如表H所示:
[0184] 表 H
[0185]
[0186] 確定寬高比的方法如下:
[0187] 女口果,recomm_width〉recomm_hei邑ht*tar邑et_aspect
[0188] 貝[|,new_width = recomm_hei邑ht*tar邑et_aspect
[0189] new_hei邑ht = recomm_hei邑ht
[0190] 否則,new_wi化h = recomm_width
[0191] new_hei邑ht = recomm-width/target-aspect
[0192] 如果上述計算得到的寬高不是16的整數(shù)倍,則裁剪為16的倍數(shù)。
[0193] 進一步地,所述根據(jù)更新后的編碼分辨率與頓率進行隨后的視頻編碼(步驟 102),還可W包括;步驟204,當檢測到網(wǎng)絡(luò)帶寬發(fā)生改變并超過闊值范圍時,對編碼的分 辨率W及相關(guān)的編碼層級進行更新,W適應(yīng)新的網(wǎng)絡(luò)狀況。
[0194] 作為一種實施方式,所述步驟204包括:
[0195] 按表四對編碼層級進行分類
[0196] 表四
[0197]
[019引設(shè)各項參數(shù)如表五所示:
[0199] 表五
[0201] 確定帶寬的變化層級的方法如下:
[0202] bitrate_change_level = log(curr_bitrate/prev_bitrate)/log(2.0)
[0203] 如果,bitrate_change_level〉0
[0204] 則,bitrate_change_level 二 bitrate_change_level*0. 8
[020引 否則,bitrate_change_level = bitrate_change_level巧.0
[0206] 確定新的編碼層級的方法如下:
[0207] curr_encoding_level = prev_encoding_level+bitrate_change_level
[020引在得到新的編碼層級后,根據(jù)新得到的編碼層級所對應(yīng)的分辨率和頓率來進行編 碼。
[0209] 進一步地,所述根據(jù)檢測出的之前一段時間的視頻的平均誤差,來自適應(yīng)的調(diào)節(jié) 此時的編碼分辨率與頓率(步驟103),可W包括;步驟205,在網(wǎng)絡(luò)狀況沒有變化,或者變化 較小時,視頻編碼的層級仍根據(jù)視頻畫面的情況不斷自適應(yīng)調(diào)節(jié):
[0210] 計算視頻編碼在當前帶寬所編碼的分辨率與頓率時前3砂的量化值QP的平均值, 并進行如下判斷:
[0211] 當平均值小于 24 時,編碼層級州;r;r_encoding_level = prev_encoding_ level+1 ;
[021 引 當平均值大于 32 時,編碼層級 cu;r;r_encoding_level = prev_encoding_level - I ;
[021引其中,當計算得到的編碼層級cu;r;r_encoding_level大于10時,設(shè)置CiirL encoding-level 為 10 ;
[0214] 當計算得到的編碼層級cu;r;r_encoding_level小于0時,最小設(shè)置CiirL encoding-level 為 0。
[0215] 優(yōu)選地,網(wǎng)絡(luò)狀況變化較小一般是指網(wǎng)絡(luò)帶寬相對于當前值的變化在10% W下。 例如,用戶可W自定義網(wǎng)絡(luò)狀況變化的區(qū)間范圍。又例如,系統(tǒng)可W根據(jù)網(wǎng)絡(luò)狀況按照自定 義方式設(shè)置網(wǎng)絡(luò)狀況變化的區(qū)間范圍。
[0216] 本發(fā)明公開的基于視頻通話場景的自適應(yīng)視頻編碼方法能夠在不斷變化的網(wǎng)絡(luò) 環(huán)境及視頻畫面內(nèi)容情況下進行視頻編碼并實現(xiàn)較好的視頻清晰度與流暢度。
[0217] 為了解決上述技術(shù)問題,本發(fā)明還公開了一種基于視頻通話場景的自適應(yīng)視頻編 碼裝置,包括:
[021引檢測模塊、控制模塊和編碼模塊,其中:
[0219] 所述檢測模塊,用于對網(wǎng)絡(luò)情況及畫面情況進行檢測;
[0220] 所述控制模塊,用于根據(jù)檢測模塊檢測到的網(wǎng)絡(luò)情況及畫面情況對編碼分辨率與 頓率進行計算;
[0221] 所述編碼模塊,根據(jù)控制模塊計算出的編碼分辨率與頓率對視頻進行編碼;
[0222] 其中:
[0223] 對于在特定網(wǎng)絡(luò)環(huán)境下開啟的視頻通話,所述檢測模塊檢測初始的帶寬,所述控 制模塊根據(jù)檢測到的網(wǎng)絡(luò)帶寬設(shè)置一個初始的經(jīng)驗編碼分辨率與頓率,
[0224] 當所述檢測模塊檢測到網(wǎng)絡(luò)情況發(fā)生改變時,所述控制模塊根據(jù)所述檢測模塊新 檢測得到的帶寬及之前帶寬所采用的視頻編碼分辨率與頓率,計算出一個新的編碼分辨率 和頓率,所述編碼模塊根據(jù)新的編碼分辨率和頓率來進行接下來的編碼,
[0225] 所述檢測模塊檢測出的之前一段時間的視頻的平均誤差,所述控制模塊根據(jù)該平 均誤差來自適應(yīng)的調(diào)節(jié)此時的編碼分辨率與頓率,誤差大于闊值則調(diào)降編碼分辨率與頓 率,誤差小于闊值則調(diào)升編碼率與頓率。
[0226] 進一步地,所述控制模塊進一步根據(jù)移動設(shè)備的CPU能力及所使用的編碼器來設(shè) 定視頻通話編碼的分類等級層次;在啟動視頻通話時,所述檢測模塊檢測網(wǎng)絡(luò)帶寬與對端 畫面的寬高比,所述控制模塊根據(jù)所獲得的信息設(shè)置適應(yīng)于編碼器的初始編碼分辨率與頓 率,其中:所獲得的信息包括網(wǎng)絡(luò)帶寬和CPU能力,并且所述CPU能力取各通訊端中能力最 小者的值Vmin ;所述控制模塊根據(jù)得到的推薦分辨率W及對端的終端屏幕的寬高比,裁剪 出和對端寬高比接近的分辨率,編碼模塊根據(jù)該分辨率進行編碼;當所述檢測模塊檢測到 網(wǎng)絡(luò)帶寬發(fā)生改變并超過闊值范圍時,所述控制模塊對編碼的分辨率W及相關(guān)的編碼層級 進行更新,W適應(yīng)新的網(wǎng)絡(luò)狀況,在網(wǎng)絡(luò)狀況沒有變化,或者變化較小時,所述控制模塊根 據(jù)視頻畫面的情況對視頻編碼的層級不斷自適應(yīng)調(diào)節(jié)。
[0227] 進一步地,所述控制模塊包括:如表一所示的配置參數(shù),并根據(jù)表一的配置參數(shù)進 行如下操作:
[022引將運行蘋果IOS操作系統(tǒng)的智能終端的CPU能力及所使用的經(jīng)過優(yōu)化的H. 264編 碼器的分類層次按表一方式進行設(shè)置,
[0229] 將運行谷歌An化Oid操作系統(tǒng)的智能終端的CPU能力按表一方式映射到對應(yīng)型號 的運行蘋果IOS操作系統(tǒng)的智能終端的CPU能力,
[0230] 表一
[0234] 。作為一種實施方式,控制模塊根據(jù)移動設(shè)備的CPU能力及所使用的編碼器來設(shè) 定視頻通話編碼的分類等級層次;
[0235] 例如,對于蘋果IOS系統(tǒng)的不同型號終端的CPU能力及所使用的經(jīng)過優(yōu)化的H. 264 編碼器,分類層次如下:
[0236] CPU_Capacity> = IPH0NE_5S
[0237] 分辨率分類層次;640x480,480x320, 320x240, 240x160,160x120,120x80,80x60 [023引頓率分類層次;15,9, 5, 3,1
[0239] 所有分類層次均開啟1/4分數(shù)像素的運動估計及16x16到4x4的所有編碼塊結(jié) 構(gòu)。
[0240] CPU-Capacity == IPHONE-S
[0241] 分辨率分類層次;640x480,480x320, 320x240, 240x160,160x120,120x80,80x60
[0242] 頓率分類層次;15,9, 5, 3,1
[0243] 對于640x480分辨率,頓率為15時,只開啟1/2像素的運動估計及16x16到8x8 的編碼塊結(jié)構(gòu),1/4像素及8x4,4x8與4x4編碼塊結(jié)構(gòu)不開啟;
[0244] 其它分類層次均開啟1/4分數(shù)像素的運動估計及16x16到4x4的所有編碼塊結(jié) 構(gòu)。
[0245] CPU-Capacity == IPH0NE_4S
[0246] 分辨率分類層次;480x320, 320x240, 240x160,160x120,120x80,80x60
[0247] 頓率分類層次;15,9, 5, 3,1
[024引對于480x320分辨率,頓率為15時,只開啟1/2像素的運動估計及16x16到8x8 的編碼塊結(jié)構(gòu),1/4像素及8x4,4x8與4x4編碼塊結(jié)構(gòu)不開啟;
[0249] 其它分類層次均開啟1/4分數(shù)像素的運動估計及16x16到4x4的所有編碼塊結(jié) 構(gòu)。
[0 巧 0] CPU-Capac i = IPH0NE_4
[0巧 1]分辨率分類層次;240xl60,160x120,120x80,80x60
[0巧2] 頓率分類層次;15,9, 5, 3,1
[0巧引所有分類層次均只開啟1/2像素的運動估計及16x16到8x8的編碼塊結(jié)構(gòu),1/4像 素及8x4,4x8與4x4編碼塊結(jié)構(gòu)不開啟。
[0巧4] 對于每一個運行谷歌安卓系統(tǒng)的不同型號終端,根據(jù)獲取的CPU主頻及核數(shù)映射 到相應(yīng)的IOS系統(tǒng)的對應(yīng)型號,映射關(guān)系如下:
[0巧引 安卓CPU〉= 4核且主頻〉1. 2G 《-》IP冊肥_5S
[0巧6] 安卓CPU〉= 4核且主頻< =1. 2G 《-》IP冊肥_5
[0巧7] 安卓CPU〉= 2核,<4核且主頻〉1. 2G《-》IP冊肥_4S
[0巧引 安卓CPIK2核或主頻< =1. 2G 《-》