發現不少人對視頻格式存在一些誤解,以前寫的一篇文章講AVPlayer的支持格式也有一些問題,因此這裏單獨出一篇文章講一下,但願你們能明白。html
一個在線視頻可以播放,大體是通過了以下步驟: git
能夠總結爲:拉數據->解協議->解封裝->音視頻解碼->音視頻同步->播放。 下面就針對這幾個概念一一作下解釋: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 | 2013 | 研發中 | |
VP8 | 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支持的視頻編碼格式:
Video formats supported: HEVC, H.264, MPEG-4 Part 2, and Motion JPEG
HEVC 又叫H.265,iOS11+A9芯片纔開始對HEVC的支持,iPhone6s及之前的設備不支持HEVC解碼。 音頻格式用紅框標出來了,內容較多,可自行對比。
蘋果設備支持音視頻格式並非就表明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等。 若是想支持更多的視頻格式,可使用使用第三方的框架,經常使用的視頻編碼和解碼框架有VLC和ffmpeg。