AVPlayer支持的視頻格式

發現不少人對視頻格式存在一些誤解,以前寫的一篇文章講AVPlayer的支持格式也有一些問題,因此這裏單獨出一篇文章講一下,但願你們能明白。html

基本概念

一個在線視頻可以播放,大體是通過了以下步驟: git

video_play_progress.png

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

播放協議

通常點播採用HTTP,而直播的話,大部分仍是採用RTMP或者私有協議,緣由是延時會比較小,RTMP自己也是爲了直播設計的。常見的流媒體協議:swift

簡寫 全稱 推出機構 目前使用領域
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的流媒體傳輸協議: 優勢: 一、經過m3u8索引文件可實現針對當前瀏覽設備的智能選擇播放源, 二、經過m3u8索引文件可實現添加備份索引文件,防止服務器崩潰視頻播放失敗 三、和http視頻同樣 不須要太多服務器額外配置 缺點: 一、並不是真正實時視頻,30s左右時間差 二、須要視頻處理 三、由於須要請求索引文件(ts視頻文件)請求次數相對較多,對服務器負載較大app

視頻編碼

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

名稱 推出機構 推出時間 目前使用領域
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.264iphone

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

音頻編碼

和視頻編碼相似,音頻編碼的做用是減小音頻中的冗餘,同時在保證必定音頻質量的條件下做的壓縮處理。

名稱 推出機構 推出時間 目前使用領域
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支持的視頻編碼格式:

image.png

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.26四、HEVC(iPhone7及之後設備)、MPEG-4。 視頻格式(封裝格式):.mp四、.mov、.m4v、.3gp、.avi等。 若是想支持更多的視頻格式,可使用使用第三方的框架,經常使用的視頻編碼和解碼框架有VLCffmpeg

參考文獻

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

相關文章
相關標籤/搜索