1. 程式人生 > >視音訊常見問題總結

視音訊常見問題總結

1. 視訊編碼標準兩大系統是什麼?

視訊編碼標準有兩大系統:MPEG和ITU-T:
視訊編碼標準:
MPEG標準是由MPEG制定,MPEG-1,MPEG-2,MPEG-3,MPEG-4,MPEG-7,MPEG-21
ITU-T標準是由VCEG制定,H.261,H.262,H.263,H.263v2,H.2 64

什麼是音視訊編碼格式?什麼是音視訊封裝格式?

常見的AVI,RMVB,MKV,ASF,WMV,MP4,3GP,FLV等檔案其實只能算是一種封裝標準。
一個完成的視訊檔案是由音訊和視訊兩部分組成。H264,Xvid等就是視訊編碼格式,MP3,AAC等就是音訊編碼格式。
例如:將一個Xvid視訊編碼文化和MP3視訊編碼檔案按AVI封裝標準封裝以後,就得到一個AVI字尾的視訊檔案。

由於很多種視訊編碼檔案,音訊編碼檔案都符合AVI等著要求,則意味著即使是AVI字尾,也可能裡面的具體編碼格式不同,因此出現在一些裝置上,通識AVI字尾檔案,一些能正常播放,一些就無法播放。

同樣的情況也存在於其他容器格式。即使RMVB,WMV等也不例外,事實上,很多封裝容器對音訊編碼和視訊編碼的組合方式放的很開,如AVI還可以使用H.264+ACC組合。尤其是MKV封裝容器,基本無論什麼樣的組合都可以!但一般MKV用的最多的就是H.264+ACC組合,此組合檔案體積最小,清晰度最高。因此網上很多MKV視訊都是高清晰度。

因此,視訊轉換需要設定的本質就是:A,設定需要的視訊編碼;B,設定需要的音訊編碼;C,選擇需要的容器封裝;一個完成的視訊轉換設定都至少包括了上面3個步驟。

軟解碼和硬解碼,是什麼?

硬解就是硬體解碼,指利用GPU來部分替代CPU進行解碼,軟解就是軟體解碼,指利用軟體讓CPU進行解碼:

硬解碼:是將原來全部交給CPU來處理的視訊資料的一部分交給GPU來做,而GPU的並行運算能力要遠遠高於CPU。這樣可以大大的降低對CPU的負載,CPU的佔用率較低了之後就可以執行一些其他程式了,當然對於比較好的處理器來說,硬解和軟解的區別只是個人偏好了。

軟解碼:即通過軟體讓CPU來對視訊進行解碼處理;而硬解碼,指不借助與CPU,而通過專用的子卡裝置來獨立完成視訊解碼任務。增加的VCD/DVD解壓卡,視訊壓縮卡等都隸屬於硬解碼這個範疇。先如今,要完成高清解碼已經不再需要額外的子卡,因為硬解碼的模組已經被整合到顯示卡CPU的內部,所以目前主要的顯示卡都能夠支援硬解碼技術。

何為直播?何為點播?

直播:是一個三方互動(主播,伺服器,觀眾),這個互動實時的。儘管會根據選擇的協議不同而有一些延遲,但我們仍認為它直播是實時的:主播在本地傳送音訊給伺服器(推流),觀眾從伺服器實時解碼(拉流)收看收聽主播發送給伺服器的音視訊(直播容器)。

點播:首先要明確一點,點播不存在推流這一過程,因為你本身的流已經推給伺服器了,或者說應該是你的音視訊早就上傳到伺服器,觀眾只需要線上收看即可。

推流和拉流

推流:在直播中,一方向伺服器傳送請求,向伺服器推送自己正在實時直播的資料,而這些內容在推送到伺服器的這一過程中是以“流”的形式傳遞的,這就是推流,把音視訊資料以流的方法上傳到伺服器的過程。推流方的音視訊往往會很大,在推流的過程首先按照ACC音訊編碼和H.264視訊編碼的標準把推過來的音視訊壓縮,然後合併成MP4或者FLV格式,然後根據直播的封裝協議,最後傳給伺服器完成推流。

拉流:與推流正好相反。拉流是使用者從伺服器獲取推流方給伺服器的音視訊的過程。拉流首先用ACC音訊解碼和H.264視訊解碼,把推過來的音視訊解壓縮,然後合成MP4或者FLV格式,再解封裝,最後到我們的客戶端與觀眾進行互動。

常見的直播協議有三種:RTMP,HLS,FLV
  1. RTMP:實時傳輸協議,RTMP協議比較全能,即可以用來推送又可以用來直播,其核心理念是將大塊的視音訊和音訊幀“剁碎”,然後以小資料包的形式在網際網路上進行傳輸,而且支援加密,因此隱私性相對比較理想,但拆包組包的過程比較複雜,所以在海量併發時也容易出現一些不可預期的穩定性問題。
  2. FLV:FLV協議由Adobe公司主推,格式極其簡單,只是在大塊的視訊幀和音視訊頭部加入一些標記頭資訊,由於這種極致的簡潔,在延遲表現和大規模併發方面都很成熟。唯一的不足就是在手機瀏覽器上的支援非常有限,但是用作手機端APP直播協議卻異常合適。
  3. HLS:蘋果原生:HTTP Live Streaming,遵循的是 HTTP 超文字傳輸協議,埠號8080,將視訊分成5-10秒的視訊小分片,然後用m3u8索引表進行管理,由於客戶端下載到的視訊都是5-10秒的完整資料,故視訊的流暢性很好,但也同樣引入了很大的延遲(HLS的一般延遲在10-30s左右);
點播中常見的資料傳輸協議:

HLS,HTTP

m3u8構成是?直播中m3u8、ts如何實時更新?

是一個索引地址/播放列表,通過FFmpeg將本地的xxx.mp4進行切片處理,生成m3u8播放列表(索引檔案)和N多個 .ts檔案,並將其(m3u8、N個ts)放置在本地搭建好的webServer伺服器的指定目錄下,我就可以得到一個可以實時播放的網址,我們把這個m3u8地址複製到 VLC 上就可以實時觀看!
在 HLS 流下,本地視訊被分割成一個一個的小切片,一般10秒一個,這些個小切片被 m3u8管理,並且隨著終端的FFmpeg 向本地拉流的命令而實時更新,影片進度隨著拉流的進度而更新,播放過的片段不在本地儲存,自動刪除,直到該檔案播放完畢或停止,ts 切片會相應的被刪除,流停止,影片不會立即停止,影片播放會滯後於拉流一段時間

轉載自:https://blog.csdn.net/hejjunlin/article/details/54962205