如果要從事編解碼多媒體的工作,需要準備哪些更為基礎的內容,這里幫你總結完。
因為數據類型不同所以編解碼算法不同,分為圖像、視頻和音頻三大類;因為流程不同,可以分為編碼和解碼兩部分;因為編碼器實現不同,分為硬編碼和軟編碼;因為編解碼硬件位置不同,可以分為片內、片外和獨立編解碼模塊三類;軟件常用的框架ffmpeg。
音視頻編解碼(Audio-Video Coding)是指將音頻和視頻信號進行壓縮編碼以及解碼還原的過程。
算法通過去除圖像中的冗余信息,實現圖像的壓縮存儲和傳輸。在解碼過程中,這些算法將壓縮的圖像數據恢復為原始的圖像信號。
編解碼的應用流程:先對原始圖像進行壓縮編碼,然后進行存儲和傳輸,最后在使用或者后處理時再進行解碼。
0. 基本原理和概念
音視頻編解碼的基本原理是利用人的感知系統特性的特點,對音視頻信號進行數據壓縮,從而便于傳輸和存儲。
編碼過程中是將信號轉換為數字形式,并應用壓縮算法來減少數據量。
解碼是編碼的逆過程,是將壓縮后的數據重新恢復為原始的音視頻信號。
編碼的一般流程為:采樣、量化、壓縮、打包。
解碼的一般流程為:解包、解碼、反量化和數模轉換,最終恢復為模擬音視頻信號。
編碼器壓縮兩要素:圖像相關性、人眼敏感性。
軟編碼和硬編碼
硬編碼是指利用顯卡GPU、專用的DSP、FPGA、ASIC芯片等硬件進行編碼,性能高;軟編碼是使用CPU進行編碼,軟件實現直接、簡單,參數調整方便,升級易,但性能較硬編碼低。
H264軟件編碼器有JM官方編碼實現X264,提供了豐富的視頻編碼函數庫。
H264硬件編碼器IP比如LC1860就有芯原Hautro H1,可以直接通過控制硬件實現硬編碼。
H264圖像序列實現幀間預測
每個序列以一個關鍵幀(I幀)開始,隨后跟著若干個參考前面的幀生成的差別幀(P幀),以及參考前后的幀生成的差別幀(B幀),這種減少I幀數量的方式進一步提高了壓縮效率。
以下是音視頻編解碼的具體過程:
目的 | 音頻 | 視頻 | |
---|---|---|---|
采樣 | 將模擬信號通過采樣轉換成數字信號 | 連續的模擬音頻信號轉換為離散的數字信號 | 連續的模擬視頻信號轉換為離散的數字信號 |
量化 | 減小數據量 | 將采樣后的音頻信號量化 | 對采樣后的視頻信號量化,再進行預處理,包括去噪、濾波、顏色空間轉換等 |
壓縮 | 將信號表示為更緊湊的形式 | 對量化后的音頻信號進行編碼 | 對預處理后的視頻進行壓縮編碼,包括運動估計、變換編碼等 |
打包 | 便于傳輸和存儲 | 將編碼后的音頻數據組織為數據包 | 將編碼后的視頻數據組織為數據包 |
1. 圖像編解碼算法
圖像編解碼算法主要包括無損編碼、有損編碼兩個類,顧名思義,無需解釋。
無損壓縮原理:通過預測編碼、霍夫曼編碼等技術,減少數據的冗余度同時保持圖像信息的完整性。
有損編碼原理:通過離散余弦變換(DCT)編碼、小波變換編碼等技術,利用人眼對圖像的感知特性,去除對圖像影響較小的信息。
常見的圖像壓縮算法
圖像壓縮算法 | 原理 | 應用 |
---|---|---|
JPEG | 將圖像分割成8x8像素方塊,DCT變換到頻域,再量化以減少數據量 | 網頁圖片、數碼相機 |
HEIF | HEVC(H.265)視頻編碼技術實現高效壓縮 | 智能手機攝像頭拍攝的照片 |
PNG | 采用LZ77壓縮算法和哈夫曼編碼等技術實現無損壓縮 | 圖標、徽標 |
使用時需要對壓縮后的圖像數據進行解碼處理以還原為原始圖像,恢復出壓縮前的圖像數據進行后處理和顯示等。
解碼過程包括熵解碼、逆量化和逆DCT變換等過程。
2. 視頻編解碼算法
視頻編碼通過將視頻信號分解成一系列的圖像幀,并對這些圖像幀進行壓縮處理,以減少數據量并提高傳輸效率。常見的視頻編碼標準有H.264/AVC、HEVC/H.265、prores(apple)、VP9等。
視頻編碼方式主要包括幀內壓縮(prores)、幀間壓縮(H264. H265)。
常見的視頻壓縮方法
視頻壓縮算法 | 原理 | 應用 |
---|---|---|
H264|AVC | 通過減少冗余信息和利用圖像特性實現壓縮 | 廣泛應用于各種視頻應用 |
H265|HEVC | 比264更高的壓縮效率 | 在相同碼率下提供更好的視覺質量,在高清視頻逐漸應用 |
ProRes | 通過變換編碼、運動補償、DCT實現壓縮 | 蘋果開發的一種高質量、無損和可編輯的視頻編解碼器 |
3. 音頻編解碼算法
常見的音頻編碼標準有MP3、AAC等。這些標準采用了一系列復雜的算法和技術來實現高效的音頻壓縮。在編碼過程中,音頻信號被轉換為數字形式,并應用特定的壓縮算法來減少數據量。解碼過程則是將壓縮后的音頻數據恢復為原始的音頻信號。
音頻編碼的過程也是包括:模擬信號采樣,采樣后的信號量化,之后進行編碼得到數字音頻信號。
音頻解碼的過程包括:加盟其首先對音頻進行解包提取音頻數據,然后將使用編碼時對應的解碼算法進行解碼獲得原始信號,然后通過反量化操作恢復為連續的近似值,最后通過重構把之前的信號換換成模擬音頻信號。
音頻輸入輸出的實際流程:
播放應用從存儲中讀取音頻封裝格式的文件(比如mp3),播放器調用解碼模型進行解碼成PCM數據,最終送到音頻驅動去播放。
而在錄音時,音頻驅動接收采樣獲得的PCM數據,給到應用程序,應用調用編碼模型進行編碼,再調用存儲模型進行存儲。
常見的音頻壓縮方法
音頻壓縮方式 | 原理 | 應用 |
---|---|---|
PCM脈沖編碼調制 | 將模擬音頻信號轉換為數字信號的技術,是一種未壓縮的音頻原始數據流。 | 可以理解為音頻中類似“視頻中的YUV",實際播放的音頻原始數據。 |
MP3 | 利用心理聲學模型去除人耳察覺不到的音頻成分,編碼過程在量化后增加聲學分析以及霍爾曼編碼等步驟。 | 廣泛應用音頻文件如音樂歌曲等。 |
AAC(Advanced Audio Codin) | 使用預測編碼和變換變化技術,實現了更高效的音頻編碼。 | 廣泛應用于廣播和流媒體等。 |
音頻編解碼還需要考慮音頻的質量、采樣率、比特率和聲道數等因素。這些因素直接影響音頻的聽覺效果和傳輸效率。
4. codec片外芯片硬件
CODEC作用
Codec負責音頻信號的模擬/數字轉換(A/D和D/A轉換),以及音頻信號的編碼和解碼。
CODEC芯片的選擇,決定了模擬音頻輸入輸出質量的好壞,在音頻加速器模塊中,決定數字信號質量的好壞。
示例
以音頻芯片CODEC ALC5640為例,ALC5640芯片使用i2c1接口的控制總線,數據傳輸通過i2s0接口。
5. 獨立編解碼器
以上為常見的芯片內編解碼模塊的方案,但是也會有一類是獨立的編解碼器,通過外部接口的方式實現音視頻編解碼,從而擴展主板的能力,提高硬件適應性。
在這里插入圖片描述
海康威視DS-6700HUH音視頻編碼器為例。
支持HDTVI、HDCVI、CVBS和AHD的攝像頭輸入信號,采用H.265或者H.264標準視頻編碼,可同時對四路1080p分辨率的視頻信號進行實時編碼,支持豐富的網絡協議,可以通過網口,把視頻流傳送到網絡設備上。
網絡另一端的Android終端通過網絡終端接收視頻信號,并把接收視頻顯示在Android終端的屏幕上,默認顯示音視頻編碼器視頻流的方式,通過瀏覽器輸入默認地址192.168.1.64,并根據提示下載插件,即可實現遠程攝像頭視頻的實時顯示。
音視頻編解碼器的具體使用步驟如下:
\1. 給音視頻編碼器和操控端上電,音視頻編碼器網口與操控端網口相連,編碼器視頻口與模擬攝像頭相連。
\2. 設置操控端IP與音視頻編碼器默認的IP在同一網段,DS-6700HUH默認的IPv4地址是192.168.1.64。
\3. 在Android操控端的瀏覽器中輸入DS-6700HUH的默認地址192.168.1.64。
\4. 在激活界面輸入默認的管理員賬號,用戶名是admin,并創建登錄密碼,首次登錄要根據提示信息安裝瀏覽器插件。
\5. 在設置界面中選擇“配置->網絡->基本設置->TCP/IP”,可實現對音視頻編碼器的網絡進行設置。
\6. 最后進入預覽界面,單擊界面的預覽框即可打開或者關閉預覽圖像。
6. ffmpeg軟件框架
通過ffmpeg實現編解碼和所有軟件操作。
FFmpeg是一個開源的多媒體框架,使用廣泛,幾乎能夠解碼、編碼、轉碼、mux、demux、過濾和播放所有已知格式的音視頻文件。(之后獨立總結一章,這個很重要)
系列收官之作,最近陸續把一些camera相關驅動崗位的基礎整理完畢,希望對你有所幫助。
計劃2025多做整理,比2024翻倍的內容在路上,您點贊和支持,就是繼續優化的動力,拜謝!
最后祝您2025新年快樂!
END
其他你可能感興趣的驅動基礎:
攝像頭camera驅動開發基礎-MIPI和V4L2
攝像頭camera驅動開發基礎-USB和UVC
影像顯示驅動基礎-MIPI和I2C
視頻語音驅動基礎-I2S和tinyALSA