AVPlayer支持的視頻格式

發現很多人對視頻格式存在一些誤解,之前寫的一篇文章講AVPlayer的支持格式也有一些問題,所以這裏單獨出一篇文章講一下,希望大家能明白。

基本概念

一個在線視頻能夠播放,大致是經過了如下步驟:

可以總結爲:拉數據->解協議->解封裝->音視頻解碼->音視頻同步->播放。 下面就針對這幾個概念一一做下解釋:

播放協議

一般點播採用HTTP,而直播的話,大部分還是採用RTMP或者私有協議,原因是延時會比較小,RTMP本身也是爲了直播設計的。常見的流媒體協議:

簡寫 全稱 推出機構 目前使用領域
HLS HTTP Live Streaming 蘋果 多應用於蘋果
RTP 實時傳輸協議 IETF 範圍較廣
RTCP 實時傳輸控制協議 IETF 範圍較廣
RTSP 實時串流協議 RealNetworks等 範圍較廣
RTMP 實時消息協議 Adobe 較流行
MMS 串流媒體協議 Microsoft 範圍較廣

RTP/RTSP/RTCP的區別

RTSP發起/終結流媒體、RTP傳輸流媒體數據 、RTCP對RTP進行控制,同步。

HLS(Http Live Streaming) HLS是蘋果推出,實現的基於HTTP的流媒體傳輸協議: 優點: 1、通過m3u8索引文件可實現針對當前瀏覽設備的智能選擇播放源, 2、通過m3u8索引文件可實現添加備份索引文件,防止服務器崩潰視頻播放失敗 3、和http視頻一樣 不需要太多服務器額外配置 缺點: 1、並非真正實時視頻,30s左右時間差 2、需要視頻處理 3、因爲需要請求索引文件(ts視頻文件)請求次數相對較多,對服務器負載較大

視頻編碼

所謂視頻編碼方式就是指通過特定的壓縮技術,將某個視頻格式的文件轉換成另一種視頻格式文件的方式。它是一種爲了減少視頻體積,同時保證畫面質量的壓縮技術,常見的視頻編碼有:

名稱 推出機構 推出時間 目前使用領域
HEVC(H.265) MPEG/ITU-T 2013 研發中
H.264 MPEG/ITU-T 2003 各個領域
MPEG4 MPEG 2001 不溫不火
MPEG2 MPEG 1994 數字電視
XviD OpenDivX 2002 流行
VP9 Google 2013 研發中
VP8 Google 2008 不普及
VC-1 Microsoft Inc. 2006 微軟

H.264

H.264又叫AVC,是國際標準化組織(ISO)和國際電信聯盟(ITU)共同提出的繼MPEG4之後的新一代數字視頻壓縮格式,它集合了H.263和MPEG4的優點,擁有更高的數據壓縮比。在同等的圖像質量條件下,H.264的數據壓縮比能比H.263高2倍,比MPEG-4高1.5倍。 也是目前蘋果支持最好的編碼格式。

音頻編碼

和視頻編碼類似,音頻編碼的作用是減少音頻中的冗餘,同時在保證一定音頻質量的條件下作的壓縮處理。

名稱 推出機構 推出時間 目前使用領域
AAC MPEG 1997 流媒體
AC-3 Dolby Inc. 1992 DVD, 數字電視
MP3 MPEG 1993 各個領域(舊)
WMA Microsoft Inc. 1999 Windows

AAC AAC(高級音頻編碼技術 Advanced Audio Coding),出現於1997年,是基於MPEG-2的音頻編碼技術。由Fraunhofer IIS、杜比、蘋果、AT&T、索尼等公司共同開發,以取代mp3格式。2000年,MPEG-4標準出臺,AAC從新整合了其特性,故現又稱MPEG-4 AAC,即m4a。 蘋果的CoreAudio對AAC有較好的支持。

封裝格式

我們常見的視頻格式MP4, AVI, RMVB, 3GP, MKV都是指視頻的封裝格式,大部分情況就是視頻文件的後綴。常見的組合方式有:

名稱 簡介 常用編碼格式 擴展名
Flash Video 由Adobe Flash延伸出來的的一種流行網絡視頻封裝格式。隨着視頻網站的豐富,這個格式已經非常普及。 H.264+MP3 flv
AVI(Audio Video Interleave) 比較早的AVI是微軟開發的。其含義是Audio Video Interactive,就是把視頻和音頻編碼混合在一起存儲。AVI也是最長壽的格式,已經存在10餘年了,雖然發佈過改版(V2.0於1996年發佈),但已顯老態。AVI格式上限制比較多,只能有一個視頻軌道和一個音頻軌道(現在有非標準插件可加入最多兩個音頻軌道),還可以有一些附加軌道,如文字等。AVI格式不提供任何控制功能。 Xvid+MP3 avi
WMV(Windows Media Video) 同樣是微軟開發的一組數字視頻編解碼格式的通稱,ASF(Advanced Systems Format)是其封裝格式。ASF封裝的WMV檔具有“數字版權保護”功能。 VC-1+WMA wmv/asf
MPEG(Moving Picture Experts Group) 是一個國際標準化組織(ISO)認可的媒體封裝形式,受到大部分機器的支持。其存儲方式多樣,可以適應不同的應用環境。MPEG-4檔的檔容器格式在Part 1(mux)、14(asp)、15(avc)等中規定。MPEG的控制功能豐富,可以有多個視頻(即角度)、音軌、字幕(位圖字幕)等等。MPEG的一個簡化版本3GP還廣泛的用於準3G手機上。 H.264+AAC,H263+AAC dat(VCD),vob(DVD), mp4, 3gp
Matroska 是一種新的多媒體封裝格式,這個封裝格式可把多種不同編碼的視頻及16條或以上不同格式的音頻和語言不同的字幕封裝到一個Matroska Media檔內。它也是其中一種開放源代碼的多媒體封裝格式。Matroska同時還可以提供非常好的交互功能,而且比MPEG更方便、強大。 各種編碼格式的組合 mkv
Real Video Real Media(RM) 是由RealNetworks開發的一種檔容器。它通常只能容納Real Video和Real Audio編碼的媒體。該檔帶有一定的交互功能,允許編寫腳本以控制播放。RM,尤其是可變比特率的RMVB格式,沒有複雜的Profile/Level,製作起來較H.264視頻格式簡單,非常受到網絡上傳者的歡迎。此外很多人仍有RMVB體積小高質量的錯誤認知,這個不太正確的觀念也導致很多人傾向使用rmvb,事實上在相同碼率下,rmvb編碼和H.264這個高度壓縮的視頻編碼相比,體積會較大。 RealVideo+RealAudio rm/rmvb
QuickTime File Format 是由蘋果公司開發的容器。1998年2月11日,國際標準化組織(ISO)認可QuickTime文件格式作爲MPEG-4標準的基礎。QuickTime可存儲的內容相當豐富,除了視頻、音頻以外還可支持圖片、文字(文本字幕)等。 H.264+AAC mov, qt

MP4 mp4格式是H.264編碼指定使用的標準封裝格式,3GP是MP4格式的一種簡化版本,減少了儲存空間和較低的頻寬需求,讓手機上有限的儲存空間可以使用。

實際上這些封裝格式對應的音頻視頻編碼格式也不是固定的,就拿MP4來說,常見的MP4是由H.264+AAC封裝,但是也由Xvid+AAC編碼的可能。如果解碼器不支持Xvid,則可能會出現無法播放,或者播放播放過程有聲音無畫面的情況。

蘋果支持哪些音視頻編碼格式

我們可以在手機介紹界面,找到手機支持的視頻格式iPhone - Compare Models - Apple

這裏我們可以找到對應iPhone7支持的視頻編碼格式:

Video formats supported: HEVC, H.264, MPEG-4 Part 2, and Motion JPEG

HEVC 又叫H.265,iOS11+A9芯片纔開始對HEVC的支持,iPhone6s及以前的設備不支持HEVC解碼。 音頻格式用紅框標出來了,內容較多,可自行對比。

AVPlayer支持哪些視頻格式

蘋果設備支持音視頻格式並不是就代表AVPlayer也支持那麼多格式,確定AVPlayer的支持格式,我們可以查看AVKit中的一個API:

//展示當前支持的音視頻格式
let asset = AVURLAsset.audiovisualTypes()
//打印asset可以得到(已經轉過展示格式)
asset type (
    "audio/aacp",
    "video/3gpp2",
    "audio/mpeg3",
    "audio/mp3",
    "audio/x-caf",
    "audio/mpeg",
    "video/quicktime",
    "audio/x-mpeg3",
    "video/mp4",
    "audio/wav",
    "video/avi",
    "audio/scpls",
    "audio/mp4",
    "audio/x-mpg",
    "video/x-m4v",
    "audio/x-wav",
    "audio/x-aiff",
    "application/vnd.apple.mpegurl",
    "video/3gpp",
    "text/vtt",
    "audio/x-mpeg",
    "audio/wave",
    "audio/x-m4r",
    "audio/x-mp3",
    "audio/AMR",
    "audio/aiff",
    "audio/3gpp2",
    "audio/aac",
    "audio/mpg",
    "audio/mpegurl",
    "audio/x-m4b",
    "application/mp4",
    "audio/x-m4p",
    "audio/x-scpls",
    "audio/x-mpegurl",
    "audio/x-aac",
    "audio/3gpp",
    "audio/basic",
    "audio/x-m4a",
    "application/x-mpegurl"
)
複製代碼

還有一個方式用來判斷當前格式是否可播:

//An extended MIME type string such as video/3gpp2; codecs="mp4v.20.9, mp4a.E1" or audio/aac; codecs="mp4a.E1".
let playable: Bool = AVURLAsset.isPlayableExtendedMIMEType("video/3gpp2; codecs=\"mp4v.20.9, mp4a.E1\"")
複製代碼

這裏的MIMEType可以在這裏找到 System-Declared Uniform Type Identifiers

總結 由此我們可以下一個總結,AVPlayer支持的: 視頻編碼格式:H.264、HEVC(iPhone7及以後設備)、MPEG-4。 視頻格式(封裝格式):.mp4、.mov、.m4v、.3gp、.avi等。 如果想支持更多的視頻格式,可以使用使用第三方的框架,常用的視頻編碼和解碼框架有VLCffmpeg

參考文獻

視頻文件格式 - 維基百科,自由的百科全書 音頻編碼格式的比較 - 維基百科,自由的百科全書

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章