4 HTML躬行記——Web音視頻基礎

公司目前的業務會接觸比較多的音視頻,所以有必要了解一些基本概念 。
文章涉及的一些源碼已上傳至 Github,可隨意下載 。
一、基礎概念本節音視頻的基礎概念摘自書籍《FFmpeg入門詳解 音視頻原理及應用》 。
1)音頻
聲音的三要素為頻率、振幅和波形,即聲音的音調、聲波的響度和聲音的音色 。
音頻是一種利用數字化手段對聲音進行錄制、存放、編輯、壓縮和播放的技術,相關概念包括采樣、量化、編碼、采樣率、聲道數和比特率等 。
采樣是指只在時間軸上對信號進行數字化 。
量化是指在幅度軸上對信號進行數字化 。
每個量化都是一個采樣,將這么多采樣進行存儲就叫做編碼 。
聲道數是指所支持的能發不同聲音的音響個數,常見的有單聲道、立體聲道等 。
比特率,也叫碼率(b/s)指一個數據流中每秒能通過的信息量 。
WebRTC 對音頻的噪聲抑制和回聲消除做了很好的處理 。
音頻格式是指要在計算機內播放或處理的音頻文件的格式,是對聲音文件進行數、模轉換的過程,常見的有 MP3、WAV、AAC 等 。
音頻信號能壓縮的依據包括聲音信號中存在大量的冗余度,以及人的聽覺具有強音能抑制同時存在的弱音現象 。
壓縮編碼原理是在壓縮掉冗余的信號,冗余信號是指不能被人耳感知到的信息,包括聽覺范圍之外以及被掩蔽掉的音頻信號,壓縮編碼分為 2 類 。

  1. 無損壓縮:熵編碼,包括哈夫曼、算術和行程等編碼 。
  2. 有損壓縮:波形、參數、混合等編碼,波形編碼包括 PCM、DPCM、ADPCM、子帶編碼、矢量量化等 。
2)視頻
視頻泛指將一系列靜態影像以電信號的方式加以捕捉、記錄、處理、存儲、傳送與重現的各種技術 。
?。‵rame)是視頻的一個基本概念,表示一副畫面,一段視頻由許多幀組成 。
視頻幀又分為 I 幀、P 幀和 B ?。?
  1. I 幀是幀內編碼幀,是一個完整都關鍵幀,無需輔助就能完整顯示畫面;
  2. P 幀是前向預測編碼幀,是一個非完整??,需要参坑洶脣?I 幀或 P幀生成畫面;
  3. B 幀是雙向預測編碼幀,需要參考前后圖像幀編碼生成 。
幀率(f/s 或 Hz)是單位時間內幀的數量,電視一般 1 秒 24 ?。÷試礁擼嬖攪鞒?、逼?。
碼率即比特率(b/s),指單位時間內播放連續媒體(如壓縮后的音頻或視頻)的比特數量,碼率越高帶寬消耗得就越多 。
視頻格式非常多,包括視頻文件格式、視頻封裝格式和視頻編碼格式等 。
視頻文件格式有 MP4、RMVB、MKV、FLV、TS、M3U8 等 。FLV 是一種流媒體格式,TS 廣泛應用于數字廣播系統 。
M3U8 是使用 HLS 協議格式的基礎,文件內容是一個播放列表(Playlist),采用 UTF-8 編碼,記錄了一些列媒體片段資源 , 順序播放片段即可完整展示資源,如下所示 。
#EXTM3U#EXT-X-STREAM-INF:BANDWIDTH=150000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"http://example.com/low/index.m3u8#EXT-X-STREAM-INF:BANDWIDTH=240000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"http://example.com/lo_mid/index.m3u8#EXTINF:15.16900094256c7244451f8fd_20221020113637199.ts#EXT-X-ENDLIST其中 codecs 參數提供解碼特定流所需的編解碼器的完整信息 。之所以使用 ts 格式的片段是為了可以無縫拼接 , 讓視頻連續 。
HLS(HTTP Live Steaming,HTTP 直播流協議)的工作原理是把整個流分成一個一個的基于 HTTP 的文件來下載,每次只下載部分 。
視頻封裝格式也叫容器,可以將已經編碼并壓縮好的視頻軌和音頻軌按照一定的格式放到一個文件中 。
視頻編碼格式能夠對數字視頻進行壓縮或解壓縮的程序或設備,也可以指通過特定的壓縮技術,將某種視頻格式轉換成另一種視頻格式 。
常見的視頻編碼格式有幾個大系列,包括 MPEG-X、H.26X 和 VPX 等 。
H.264(H.264/MPEG-4 或 AVC)是一種被廣泛使用的高精度視頻的錄制、壓縮和發布格式,H.265 是它的繼任者 。
一個原始視頻,若沒有編碼,則體積會非常大 。假設圖的分辨率是 1920*1080 , 幀率為 30,每像素占 24b,那沒張圖占 6.22MB左右,1 秒的視頻大小是 186.6MB左右,1 分鐘就是 11G了 。
對原始視頻進行壓縮的目的是去除冗余信息,這些信息包括:
  1. 空間冗余,在圖像數據中,像素間在行、列方向上都有很大的相關性 , 相鄰像素的值比較接近或者完全相同 。
  2. 時間冗余,在視頻圖像序列中 , 相鄰兩幀又許多共同的地方,可采用運動補償算法來去掉冗余 。

    推薦閱讀