電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 510|回復: 0
收起左側

投屏音視頻基礎知識

[復制鏈接]

317

主題

317

帖子

3149

積分

四級會員

Rank: 4

積分
3149
跳轉到指定樓層
樓主
發(fā)表于 2024-9-17 21:43:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
背景:
投屏屬于音視頻開發(fā)的一個細分領域知識體系,所以了解必備的音視頻基礎知識也是非常非常有必要的,本節(jié)就給大家講解投屏相關的必備音視頻基礎知識。

音頻1、聲音的基礎知識聲音的產(chǎn)生是由于物體的振動,造成空間內空氣的波動而共鳴發(fā)音,再由大氣的傳播,使人的聽覺神經(jīng)感受到的一種物理現(xiàn)象。
聲音的三要素是響度,音調和音色。
響度
和聲音震動的幅度有關,用的力越大,人的鼓膜震動幅度就越大,發(fā)出的聲音越響。
音調
主要是和頻率有關。聲波的頻率越高,音調也越高。
音色
在同樣的音調(頻率)和響度(振幅)下,鋼琴和小提琴的聲音聽起來是完全不相同的,因為它們的音色不同。
聲音傳播的介質是固體、液體、氣體,介質不同,傳播的速度也不同。真空的情況下聲音是無法傳播的。
2、數(shù)字音頻對自然界的聲音(模擬信號)進行采樣,采樣就是根據(jù)奈奎斯特定理在時間軸上對信號進行數(shù)字化信號,即按照一定時間間隔△t 在模擬信號 x(t)上逐點采取其瞬時值。采樣率越高,聲音的還原程度越高,質量就越好,同時占用空間會變大。
量化是用有限個幅度值近似原來連續(xù)變化的幅度值,把模擬信號的連續(xù)幅度變?yōu)橛邢迶?shù)量的有一定間隔的離散值。
編碼是按照一定的規(guī)律,把量化后的值用二進制數(shù)字表示,然后轉化成二值或多值的數(shù)字信號流。這樣得到的數(shù)字信號通過可以通過電纜,衛(wèi)星通道等數(shù)字線路傳輸。在接收端與上述模擬信號數(shù)字化過程相反,再經(jīng)過后置濾波再恢復成原來的模擬信號。
上面數(shù)字化的過程又叫做脈沖編碼調制,通常我們說的音頻的裸數(shù)據(jù)格式就是脈沖編碼調制(PCM)數(shù)據(jù)。
描述一段 PCM 數(shù)據(jù)需要幾個量化指標,常用的量化指標是采樣率,位深度,字節(jié)序,聲道數(shù)。
采樣率(Sample rate):每秒鐘采樣多少次,以 Hz 為單位。
位深度(Bit-depth):表示用多少個二進制位來描述采樣數(shù)據(jù),一般為 16bit。
字節(jié)序:表示音頻 PCM 數(shù)據(jù)存儲的字節(jié)序是大端存儲(big-endian)還是小端存儲(little-endian),為了數(shù)據(jù)處理效率的高效,通常為小端存儲。
首先明白字節(jié)序,字節(jié)序指占內存超過1個字節(jié)類型的數(shù)據(jù)在內存中存放順序,通常有大端和小端兩種順序:

在這里插入圖片描述

在這里插入圖片描述聲道數(shù)(channel number):指支持能不同發(fā)聲(注意是不同聲音)的音響的個數(shù);單聲道(1 個聲道),雙聲道(2 個聲道)等;
3、音頻壓縮編碼以
CD 音質來說,量化格式是 2 字節(jié),采樣率是 44100,聲道數(shù)是 2,這些信息就描述了 CD 的音質。那么 CD 的數(shù)據(jù)采樣率
=44100x16x2=1378.125kbps, 在 1 分鐘的時間里 ,需要占用的存儲空間=1378.125 *
60/8/1024=10.09MB。直接存儲這個大小音頻的話其實并不小。
壓縮算法包括有損壓縮和無損壓縮。
常用的音頻編碼方式有以下幾種:
MP3,MPEG-1 or MPEG-2 Audio Layer III,是曾經(jīng)非常流行的一種數(shù)字音頻編碼和有損壓縮格式 , 它被設計來大幅降低音頻數(shù)據(jù)量 。
AAC,Advanced
Audio Coding,是由 Fraunhofer IIS、杜比實驗室、AT&T、Sony 等公司共同開發(fā), 在 1997
年推出的基于 MPEG-2 的音頻編碼技術。AAC 比 MP3 有更高的壓縮比,同樣大小的音頻文件,AAC 的音質更高。
視頻相關視頻基本概念(1)根據(jù)視覺暫留原理,連續(xù)的圖像變化每秒超過24幀(Frame)畫面以上時,人眼無法辨別單幅的靜態(tài)畫面,看上去是平滑連續(xù)的視覺效果,這樣連續(xù)的圖像畫面構成即視頻。

在這里插入圖片描述(2)一個完整的視頻文件主要由音頻和視頻兩部分組成的,視頻編碼是為了壓縮視頻數(shù)據(jù)而做的一種壓縮算法,是音視頻質量的決定因素;視頻封裝格式也叫做容器

Container,它是將已經(jīng)編碼壓縮好的視頻流、音頻流以及元數(shù)據(jù)按照一定的結構規(guī)則編排放到一個文件中,不同封裝格式編排規(guī)則不一樣,應用場景和優(yōu)點也不同。視頻文件的播放流程

在這里插入圖片描述像素:屏幕顯示是把有效面積化為為很多個小格子,每個格子只顯示一種顏色,是成像的最小元素,因此就叫做“像素”。
分辨率:屏幕在長度和寬度這倆個方向上各有多少像素,就叫做分辨率,一般用 AXB 來表示。分辨率越高,每個像素的面積越小,顯示效果就越平滑細膩。
每一個像素點的 RGB 通道分別對應屏幕位置上的子像素點繪制到屏幕上,進而顯示整個圖像。
1、RGB 表示圖像
一張圖像是由每個像素點繪成的,那么一像素點的 RGB 又該如何表示呢?
浮點表示
歸一化表示,取值范圍 0.0~1.0,如 openGL 對每個子像素點的表示方式。
整數(shù)表示
取值范圍 0~255 或者 00~FF,8bit 表示一個子像素。
如圖像格式
RGBA_8888,表示 4*8bit 表示一個像素,而 RGB_565 用 5 + 6 + 5 bit 表示一個像素。一張 1280 *
720, RGBA_8888 格式的圖片的大小= 1280 * 720 * 32bit = 1280 * 720 * 32 / 8
byte,也是位圖在內存中占用 的大小。所以每一張圖像的裸數(shù)據(jù)都是很大的。
2、YUV 表示圖像
YUV (又稱為 YCbCr),一種亮度與色度分離的色彩格式;
Y : 亮度,即灰度值,除了表示亮度信號外,還含有較多的綠色通道量;
U : 藍色通道與亮度的差值;
V : 紅色通道與亮度的差值;
YUV 的優(yōu)勢,人眼對亮度敏感,對色度不敏感,因此減少部分 UV 的數(shù)據(jù)量,人眼無法感知,從而可以通過壓縮 UV 的分辨率, 在不影響觀感的前提下,減小視頻的體積;
視頻幀裸數(shù)據(jù)之所以采用
YUV 色彩空間,使用為亮度信號 Y 和色度信號 UV 是分離的。當無 UV 色度信號,只有 Y
亮度信號時,那么這樣表示的圖像就是黑白灰度圖像。彩色電視正是使用 YUV 空間使用 Y
亮度信號解決彩色電視與黑白電視的兼容問題、使黑白電視也能接收彩色電視信號。最常用的 YUV 都使用 8 個 字節(jié)來表示,所以取值范圍就是
0~255。
音頻最開始需要采樣,圖像也是一樣的,YUV 最常用的采樣格式是 4:2:0。
YUV 格式有兩大類:planar 和 packed
YUV420 Planar
YYYY
YYYY
UU
VVYUV 444 Packed
YUV YUV
YUV YUVYUV 碼流的存儲格式其實與其采樣的方式密切相關,主流的采樣方式有三種,YUV4:4:4,YUV4:2:2, YUV4:2:0。

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述YUV 4:4:4 采樣,每一個 Y 對應一組 UV 分量。YUV 4:2:2 采樣,每兩個 Y 共用一組 UV 分量。YUV 4:2:0 采樣,每四個 Y 共用一組 UV 分量。
3、YUV 和 RGB 轉化
凡是渲染到屏幕上的東西(文字、圖片或者其他),都要轉換為 RGB 的表示形式,那么 YUV 的表示形 式和 RGB 的表示形式之間是如何進行轉換的呢?
為了實現(xiàn)格式轉換,我們首先要明確待轉換格式和目標格式的特點和相互轉換關系,這是編程實現(xiàn)轉換的核心。對于
RGB 轉 YUV 的過程,我們要首先拿到 RGB 文件的數(shù)據(jù),再通過上圖的 YUV 計算公式對其做 運算,得到 YUV
數(shù)據(jù),從而實現(xiàn)轉換。而對于 YUV 轉 RGB 則要首先獲得 YUV 數(shù)據(jù),用第二組 RGB 公式計 算得到 RGB
數(shù)據(jù)。
在本實驗中,轉換公式如下。
Y = 0.298R + 0.612G + 0.117B;
U = -0.168R - 0.330G + 0.498B + 128;
V = 0.449R - 0.435G - 0.083B + 128;
R = Y + 1.4075( V - 128);
G = Y - 0.3455( U - 128) - 0.7169( V - 128);
B = Y + 1.779( U - 128);
視頻編碼視頻壓縮必要性以常見的1080P60的視頻計算一下沒有壓縮時數(shù)據(jù)量的大。ò醇t綠藍三原色各一個字節(jié)數(shù)據(jù)量計算)
一秒鐘數(shù)據(jù)量:
1920(寬)x 1080(高)x 60(每秒幀數(shù))x 3(像素3原色字節(jié))= 373.248MB = 2.98Gbs
一小時數(shù)據(jù)量:
373.248MB x 3600秒 = 13.43T字節(jié)/小時
這個數(shù)據(jù)量很大,近3G的原始數(shù)據(jù)量在任何常規(guī)網(wǎng)絡上都無法實現(xiàn)視頻的傳輸。因此我們就需要一種數(shù)據(jù)處理方式將海量的原始圖像數(shù)據(jù)壓縮到可在互聯(lián)網(wǎng)上傳輸?shù)臄?shù)據(jù)量,這個過程叫做視頻的編碼。
視頻壓縮原理幀內壓縮
(1)將幀畫面進行分層壓縮(Y層:亮度相關、cr層:顏色相關、cb層:顏色相關),人對黑白亮度非常敏感,對顏色不太敏感,所以Y層盡量減少壓縮,cr層、cb層多壓縮。
(2)宏塊壓縮:一幀畫面可以分很多方塊,相同的方塊可以壓縮,不同的保留
幀間壓縮
I幀:關鍵幀,記錄一幀完整的數(shù)據(jù)
P幀:前向幀,記錄本幀與前一幀不同的數(shù)據(jù)。
B幀:雙向幀,記錄本幀與前幀和下一幀不同的數(shù)據(jù)。

在這里插入圖片描述幀與幀率
幀,視頻的一個基本概念,表示一張畫面,一個視頻就是由許多幀組成的;
幀率,即單位時間內幀的數(shù)量,單位為 : 幀/秒 或 fps(frames per second),幀率越高則畫面越順滑過渡越自然;
硬解碼和軟解碼
軟解碼,指利用 CPU 的計算能力來解碼,通常若 CPU 的能力不是很強的時候,一則解碼速度會比較慢,二則手機可能出現(xiàn)發(fā)熱現(xiàn)象;但是, 由于使用統(tǒng)一的算法,兼容性會很好;
硬解碼,指的是利用專門的解碼芯片來加速解碼,通常硬解碼的解碼速度會快很多,但是由于硬解碼由各個廠家實現(xiàn),質量參差不齊,非常容易出現(xiàn)兼容性問題;
end

一口Linux

關注,回復【1024】海量Linux資料贈送
精彩文章合集
文章推薦
?【專輯】ARM?【專輯】粉絲問答?【專輯】所有原創(chuàng)?【專輯】linux入門?【專輯】計算機網(wǎng)絡?【專輯】Linux驅動?【干貨】嵌入式驅動工程師學習路線?【干貨】Linux嵌入式所有知識點-思維導圖
回復

使用道具 舉報

發(fā)表回復

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯(lián)系客服 關注微信 下載APP 返回頂部 返回列表