靳晶晶 劉海章 黃大池
(作者單位:四川省廣播電視科學(xué)技術(shù)研究所)
視頻編解碼是將數(shù)字視頻信號通過壓縮編碼技術(shù)轉(zhuǎn)換為可傳輸或存儲的格式,并在接收或播放端進行解碼還原為原始視頻信號的過程。視頻編解碼技術(shù)在很多應(yīng)用中被使用,如視頻通信、流媒體傳輸、數(shù)字電視、視頻監(jiān)控等。通過選擇適當(dāng)?shù)木幗獯a技術(shù),可以實現(xiàn)視頻高質(zhì)量傳輸和播放。
視頻編解碼主要目的是提高視頻壓縮效率,在視頻信號轉(zhuǎn)換為數(shù)字?jǐn)?shù)據(jù)(編碼)或?qū)?shù)字?jǐn)?shù)據(jù)轉(zhuǎn)換為視頻信號(解碼)的過程中通過剔除冗余信息,通過無感知損失壓縮方法,將視頻信號轉(zhuǎn)換為更小的數(shù)據(jù)量,從而提高視頻數(shù)據(jù)的傳輸速度和存儲效率,降低傳輸和存儲成本。
在視頻編碼中,首先將視頻信號劃分為連續(xù)的圖像幀,每一幀都是由像素組成的矩陣,通過壓縮編碼算法將每一幀壓縮為更小的數(shù)據(jù)量,以減少傳輸或存儲所需的帶寬或空間。視頻編碼的實現(xiàn),通常包括以下幾個步驟:
(1)預(yù)處理。視頻信號經(jīng)過采樣和量化,將連續(xù)的模擬信號(模擬信號是指在單位時間和信號幅度上都是連續(xù)變化的信號)轉(zhuǎn)換為離散的數(shù)字?jǐn)?shù)據(jù)。
(2)變換和量化。將離散的時間和信號幅度信息轉(zhuǎn)換為頻域信息,通常使用離散余弦變換(DCT)進行。然后將頻域信息進行量化,將較小的幅度變換系數(shù)保留,較大的幅度變換系數(shù)舍棄。
(3)運動估計和補償。對視頻中連續(xù)幀之間的運動進行估計,找出差別最小的參考幀。然后通過運動補償?shù)姆椒?,僅傳輸運動信息和殘差信息[1]。這樣可以有效減少冗余信息的傳輸量。
(4)編碼。將運動信息和殘差信息等轉(zhuǎn)換為二進制數(shù)據(jù)流,以便傳輸和存儲。
視頻解碼與編碼相反,是將編碼的視頻數(shù)據(jù)解壓為可視化的圖像序列的過程,也就是將數(shù)字信號重新轉(zhuǎn)換為視頻信號。解碼器讀取編碼的二進制數(shù)據(jù),并使用相應(yīng)的解碼算法將其還原為原始的圖像序列,并經(jīng)過解壓處理得到高質(zhì)量的視頻內(nèi)容。解碼器通常需要與編碼器使用相同的編碼標(biāo)準(zhǔn)和參數(shù)以保證正確解碼。在視頻解碼過程中,將逆序進行以上編碼的步驟,主要包括以下幾個步驟:
(1)解碼。將接收到的二進制數(shù)據(jù)流轉(zhuǎn)換為運動信息和殘差信息。
(2)運動補償和殘差恢復(fù)。根據(jù)接收到的運動信息,對參考幀進行補償,恢復(fù)出殘差信息。
(3)反量化和反變換。將恢復(fù)的殘差信息進行反量化,并通過離散余弦逆變換(IDCT)將頻域信息轉(zhuǎn)換為時域的數(shù)字信號。
(4)后處理。對解碼后的數(shù)字信號進行濾波、增強和重建等處理,以得到最終的視頻信號。
視頻編解碼標(biāo)準(zhǔn)是為了實現(xiàn)視頻的高效傳輸和存儲而制定的一組規(guī)范和算法。目前常用的視頻編解碼標(biāo)準(zhǔn)包括MPEG、H.264/AVC、H.265/HEVC等。不同的標(biāo)準(zhǔn)在壓縮效率、圖像質(zhì)量、實時性和智能化等方面具有不同特點,在不同的應(yīng)用場景下有著不同的優(yōu)勢和適用性,可以根據(jù)具體應(yīng)用需求選擇合適的編解碼標(biāo)準(zhǔn)。
MPEG(Moving Picture Experts Group,動態(tài)圖像專家組)是一套廣泛應(yīng)用的視頻編解碼標(biāo)準(zhǔn),用于將視頻信號壓縮為更小的數(shù)據(jù)量,并在解碼時還原出高質(zhì)量的視頻,目前廣泛使用以下幾種方式:
(1)MPEG-2。MPEG-2適用于廣播、電視、數(shù)字通用光盤和藍(lán)光光盤等高質(zhì)量視頻的編碼和解碼。MPEG-2在MPEG-1的基礎(chǔ)上進行了改進,增加了更高的分辨率和比特率支持,并引入了多通道音頻編碼。
(2)MPEG-4。MPEG-4是一種多媒體壓縮標(biāo)準(zhǔn),用于壓縮視頻、音頻和其他媒體數(shù)據(jù)。MPEG-4通過引入對象、場景和動畫的概念,提供更高的編碼效率和靈活性。MPEG-4還支持多種編碼技術(shù),如基于幀和基于對象的編碼,以適應(yīng)不同的應(yīng)用需求。主要用于網(wǎng)絡(luò)流媒體、移動通信等。
(3)MPEG-7。MPEG-7是一種描述和檢索音視頻內(nèi)容的標(biāo)準(zhǔn),用于處理和組織大規(guī)模的多媒體數(shù)據(jù)。MPEG-7提供了一套豐富的描述符和語義元數(shù)據(jù),使用戶可以進行高效的音視頻檢索和管理。
(4)MPEG-21。MPEG-21是一種多媒體框架標(biāo)準(zhǔn),旨在提供跨平臺和互操作性的多媒體應(yīng)用服務(wù)。MPEG-21包括一系列的技術(shù)規(guī)范和協(xié)議,如數(shù)字版權(quán)管理、內(nèi)容交換和交互、多媒體會話管理等[2]。
這些MPEG標(biāo)準(zhǔn)都使用了各種壓縮算法和技術(shù),如DCT、運動估計、量化、熵編碼、預(yù)測等,以實現(xiàn)高效的視頻編解碼。其中,MPEG-2和MPEG-4是應(yīng)用最廣泛的編解碼標(biāo)準(zhǔn),被廣泛用于廣播、媒體存儲和傳輸?shù)阮I(lǐng)域。
H.264是一種高效的視頻編解碼標(biāo)準(zhǔn),也被稱為AVC(Advanced Video Coding,高級視頻編碼)[3]。它采用高效的壓縮算法,能夠?qū)⒁曨l數(shù)據(jù)壓縮到相對較小的大小,同時保持較高的視覺質(zhì)量。H.264具有廣泛的應(yīng)用前景,它能夠進行高質(zhì)量的視頻傳輸和存儲,同時降低網(wǎng)絡(luò)傳輸和存儲成本,適用于網(wǎng)絡(luò)視頻流媒體、視頻會議、數(shù)字電視、藍(lán)光光盤、高清視頻等領(lǐng)域。H.264通過使用高級壓縮技術(shù)和更高的編碼效率,可以在相同的帶寬和存儲空間中提供更高質(zhì)量的視頻。它采用了以下幾種關(guān)鍵技術(shù)來增強壓縮性能。
(1)運動估計與補償。H.264使用運動估計來查找視頻序列中的運動區(qū)域,并根據(jù)這些運動信息進行運動補償,從而減少視頻序列的冗余數(shù)據(jù)量。
(2)變換與量化。H.264將每一幀分成多個塊,并對這些塊進行變換以降低空間冗余。然后,對變換系數(shù)進行量化來進一步減少數(shù)據(jù)量。變換與量化過程可以通過適應(yīng)性量化和場景感知量化來實現(xiàn)更好的編碼效果。
(3)熵編碼。H.264使用Huffman(哈夫曼)編碼和上下文自適應(yīng)二進制算術(shù)編碼(CABAC)對變換系數(shù)進行熵編碼。CABAC利用上下文模型進行自適應(yīng)編碼,提高了編碼效率。
(4)預(yù)測。H.264利用幀內(nèi)和幀間預(yù)測來進一步減少冗余。幀內(nèi)預(yù)測使用鄰近像素預(yù)測當(dāng)前像素的值,而幀間預(yù)測利用已編碼的參考幀來預(yù)測當(dāng)前幀的像素值。
通過這些技術(shù)的組合,H.264能夠提供更高的壓縮比和圖像質(zhì)量,同時在保持相同質(zhì)量的情況下減少帶寬和存儲需求。因此,H.264成為目前最主流和廣泛采用的視頻編解碼標(biāo)準(zhǔn)之一,為人們提供了更好的觀看體驗和更高效的視頻傳輸方案。
H.265是新一代的視頻編解碼標(biāo)準(zhǔn),也被稱為高效視頻編碼(High Efficiency Video Coding),是H.264的后繼者[4]。與H.264相比,HEVC在相同質(zhì)量下壓縮率更高,能夠提供更高的圖像質(zhì)量,適用于4K、8K等超高清視頻。主要特點有:
(1)H.265增加了一些新的編碼技術(shù),如更大的變換塊大小、更好的運動估計算法等,使得視頻編碼更加高效,從而實現(xiàn)了更高的壓縮比。
(2)H.265設(shè)計時考慮了高分辨率和高幀率的需求,可以更好地適應(yīng)現(xiàn)代視頻應(yīng)用,如4K和8K超高清視頻,以及高幀率視頻。
(3)H.265可以支持更廣泛的色彩空間,如YUV(一種顏色編碼方法) 4∶2 ∶0,4∶2∶2和4∶4∶4,使得它適用于各種顏色精度的視頻。
(4)H.265還提供了對HDR(高動態(tài)范圍)視頻的支持,可以保留更高的亮度和更大的顏色范圍,以提供更豐富的圖像細(xì)節(jié)和更真實的觀看體驗。
盡管H.265提供了更高的壓縮效率和圖像質(zhì)量,但它的編解碼復(fù)雜度也相對較高,對硬件的要求更高。然而,隨著技術(shù)的進步,越來越多的設(shè)備和平臺開始支持H.265,使得它在視頻領(lǐng)域中越來越受到廣泛的應(yīng)用。
ITX-3588J開發(fā)板,采用 Rockchip RK3588新一代旗艦級八核64位處理器,支持8K@60fps H.265/VP9/AVS2、8K@30fps H.264 AVC/MVC、4K@60fps AV1、1080P@60fps MPEG-2/-1/VC-1/VP8視頻解碼;8K@30fps H.265/H.264視頻編碼;支持同編同解;最高支持32路1080P@30fps解碼和16路1080P@30fps編碼,擁有豐富的接口。
RK3588集成的VPU(視頻處理單元)具有優(yōu)秀的視頻編解碼能力,Mpp(媒體處理軟件平臺)Rockchip為VPU提供的一套視頻編解碼的API(應(yīng)用程序編程接口)。同時,Rockchip還提供了一套GStreamer的編解碼插件。用戶可以根據(jù)自己的需求,基于GStreamer來做視頻編解碼的應(yīng)用,或者直接調(diào)用Mpp來實現(xiàn)硬件的編解碼加速。本實驗通過以下三種方式進行試驗驗證和開發(fā)應(yīng)用。
Rockchip提供了一套GStreamer的編解碼插件。GStreamer是一個開源的多媒體框架,可用于創(chuàng)建、處理和呈現(xiàn)各種類型的流媒體應(yīng)用程序[5]。它提供了一套廣泛的庫和工具,使開發(fā)者能夠在多種平臺上進行音頻和視頻處理、編碼、解碼、播放和流式傳輸。
3.1.1 視頻編碼測試
使用firefly用戶進入/usr/local/bin文件夾,執(zhí)行h264enc.sh腳本,h264enc.sh腳本中GStreamer視頻編碼命令如圖1所示,編碼執(zhí)行日志如圖2所示。
圖2 編碼執(zhí)行日志
在編碼命令中,參數(shù)filesink表示將其接收到的所有媒體寫入文件,使用location屬性指定文件名。該命令將分辨率是4 096×2 160、NV12格式的原始測試視頻使用H.264編碼,生成h264.ts視頻壓縮文件。
3.1.2 視頻解碼測試
使用firefly用戶進入/usr/local/bin文件夾,執(zhí)行h264dec.sh腳本,h264dec.sh腳本中GStreamer視頻解碼命令如圖3所示,解碼執(zhí)行日志如圖4所示。
圖3 GStreamer視頻解碼命令
圖4 解碼執(zhí)行日志
本實驗的測試文件是4K超高清視頻,文件路徑為/usr/local/4Ktest.mp4,文件分辨率是4 096×2 160、H.264編碼、MP4文件格式。在解碼命令中,參數(shù)demux后面可以指定流名稱,如demux.video_0、demux.audio_0,流名稱必須與文件中的流名稱對應(yīng)。xvimagesink表示使用XVideo extension輸出。該命令解碼并播放H.264視頻文件,同時播放音頻和視頻。
FFMedia是一套基于Rockchip Mpp/RGA開發(fā)的視頻編解碼框架,支持音頻aac(高級音頻編碼)編解碼。整個框架采用Productor/Consumer模型,將各個單元都抽象為ModuleMedia類。FFMedia一共包含以下單元,輸入單元VI、處理單元VP、輸出單元VO、pymodule.cpp,pymodule創(chuàng)建vi、vo、vp等的c++代碼的Python應(yīng)用,以提供python調(diào)用vi、vo、vp等c++模塊的python接口。視頻編解碼測試如下:
(1)安裝所需環(huán)境,安裝完成后進行編譯,圖5是安裝編譯完成后的build文件目錄。
圖5 編譯環(huán)境目錄
(2)在build文件目錄下運行demo,執(zhí)行解碼命令,-f參數(shù)表示解碼輸出文件,執(zhí)行結(jié)果是將h.264格式的壓縮文件解碼為原始NV12格式的文件。解碼執(zhí)行結(jié)果如圖6所示。
圖6 解碼測試結(jié)果
(3)在build文件目錄下運行demo,執(zhí)行編碼命令,參數(shù)-a NV12表示輸入的圖像類型是NV12(YUV)格式,參數(shù)-e H264表示使用的編碼類型是H.264,參數(shù)-m表示輸出編碼文件路徑。該命令將YUV原始視頻文件經(jīng)過H.264編碼,生成壓縮文件。編碼執(zhí)行結(jié)果如圖7所示。
圖7 編碼測試結(jié)果
Mpp是適用于瑞芯微芯片系列的通用媒體處理軟件平臺,Mpp提供支持H.265 /H.264/H.263/VP9/VP8/MPEG-4/MPEG-2/MPEG-1/VC1/MJPEG視頻解碼,及H.264/VP8/ MJPEG 視頻編碼、視頻處理的功能。在ITX-3588J開發(fā)板的Ubuntu20.04系統(tǒng)下,Mpp相關(guān)dev包都已經(jīng)安裝到系統(tǒng)中,下載編譯Mpp庫,編譯完成后可正常使用。視頻編解碼測試如下:
(1)調(diào)用mpi_dec_test,解碼視頻,將h.264格式的視頻解壓縮為yuv格式的視頻。參數(shù)-i表示輸入文件,-t表示視頻格式為h.264,-n表示解碼總幀數(shù),-o表示輸出解碼文件。原視頻分辨率1 920×1 080、fps30、總計600幀。解碼指令如圖8所示。開啟新終端,輸入查看日志命令tail -f /var/log/syslog,監(jiān)控輸出,查看日志解碼結(jié)果如圖9所示。
圖8 調(diào)用mpi_dec_test解碼指令
圖9 查看日志輸出解碼結(jié)果
(2)調(diào)用mpi_enc_test,編碼視頻,將上文解碼出的yuv格式的視頻轉(zhuǎn)為h.264格式的壓縮視頻,參數(shù)-t 7表示輸出編碼類型是h.264,原視頻分辨率1 920×1 080、fps30、總幀數(shù)600。編碼指令如圖10所示,開啟新終端,輸入查看日志命令tail -f /var/log/syslog,監(jiān)控輸出,查看日編碼結(jié)果如圖11所示。
圖10 調(diào)用mpi_enc_test編碼指令
圖11 查看日志輸出編碼結(jié)果
視頻編解碼技術(shù)將會隨著數(shù)字化進程和國產(chǎn)芯片的普及應(yīng)用進一步發(fā)展。智能時代,未來電視的智能編解碼技術(shù)將會呈現(xiàn)新的發(fā)展趨勢,本文基于RK3588處理器開展相關(guān)研究,旨在為今后視頻編解碼技術(shù)與5G網(wǎng)絡(luò)、云計算、人工智能、物聯(lián)網(wǎng)等新技術(shù)融合應(yīng)用打好基礎(chǔ),為電視廣播、智慧安防等行業(yè)場景應(yīng)用提供全新產(chǎn)品和解決方案。