AVPlayer支持的視頻格式

發(fā)現(xiàn)很多人對(duì)視頻格式存在一些誤解,之前寫(xiě)的一篇文章講AVPlayer的支持格式也有一些問(wèn)題,所以這里單獨(dú)出一篇文章講一下,希望大家能明白。

基本概念

一個(gè)在線視頻能夠播放,大致是經(jīng)過(guò)了如下步驟:


video_play_progress.png

可以總結(jié)為:拉數(shù)據(jù)->解協(xié)議->解封裝->音視頻解碼->音視頻同步->播放。
下面就針對(duì)這幾個(gè)概念一一做下解釋:

播放協(xié)議

一般點(diǎn)播采用HTTP,而直播的話,大部分還是采用RTMP或者私有協(xié)議,原因是延時(shí)會(huì)比較小,RTMP本身也是為了直播設(shè)計(jì)的。常見(jiàn)的流媒體協(xié)議:

簡(jiǎn)寫(xiě) 全稱 推出機(jī)構(gòu) 目前使用領(lǐng)域
HLS HTTP Live Streaming 蘋(píng)果 多應(yīng)用于蘋(píng)果
RTP 實(shí)時(shí)傳輸協(xié)議 IETF 范圍較廣
RTCP 實(shí)時(shí)傳輸控制協(xié)議 IETF 范圍較廣
RTSP 實(shí)時(shí)串流協(xié)議 RealNetworks等 范圍較廣
RTMP 實(shí)時(shí)消息協(xié)議 Adobe 較流行
MMS 串流媒體協(xié)議 Microsoft 范圍較廣

RTP/RTSP/RTCP的區(qū)別

RTSP發(fā)起/終結(jié)流媒體、RTP傳輸流媒體數(shù)據(jù) 、RTCP對(duì)RTP進(jìn)行控制,同步。

HLS(Http Live Streaming)
HLS是蘋(píng)果推出,實(shí)現(xiàn)的基于HTTP的流媒體傳輸協(xié)議:
優(yōu)點(diǎn):
1、通過(guò)m3u8索引文件可實(shí)現(xiàn)針對(duì)當(dāng)前瀏覽設(shè)備的智能選擇播放源,
2、通過(guò)m3u8索引文件可實(shí)現(xiàn)添加備份索引文件,防止服務(wù)器崩潰視頻播放失敗
3、和http視頻一樣 不需要太多服務(wù)器額外配置
缺點(diǎn):
1、并非真正實(shí)時(shí)視頻,30s左右時(shí)間差
2、需要視頻處理
3、因?yàn)樾枰?qǐng)求索引文件(ts視頻文件)請(qǐng)求次數(shù)相對(duì)較多,對(duì)服務(wù)器負(fù)載較大

視頻編碼

所謂視頻編碼方式就是指通過(guò)特定的壓縮技術(shù),將某個(gè)視頻格式的文件轉(zhuǎn)換成另一種視頻格式文件的方式。它是一種為了減少視頻體積,同時(shí)保證畫(huà)面質(zhì)量的壓縮技術(shù),常見(jiàn)的視頻編碼有:

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

H.264

H.264又叫AVC,是國(guó)際標(biāo)準(zhǔn)化組織(ISO)和國(guó)際電信聯(lián)盟(ITU)共同提出的繼MPEG4之后的新一代數(shù)字視頻壓縮格式,它集合了H.263和MPEG4的優(yōu)點(diǎn),擁有更高的數(shù)據(jù)壓縮比。在同等的圖像質(zhì)量條件下,H.264的數(shù)據(jù)壓縮比能比H.263高2倍,比MPEG-4高1.5倍。
也是目前蘋(píng)果支持最好的編碼格式。

音頻編碼

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

名稱 推出機(jī)構(gòu) 推出時(shí)間 目前使用領(lǐng)域
AAC MPEG 1997 流媒體
AC-3 Dolby Inc. 1992 DVD, 數(shù)字電視
MP3 MPEG 1993 各個(gè)領(lǐng)域(舊)
WMA Microsoft Inc. 1999 Windows

AAC
AAC(高級(jí)音頻編碼技術(shù) Advanced Audio Coding),出現(xiàn)于1997年,是基于MPEG-2的音頻編碼技術(shù)。由Fraunhofer IIS、杜比、蘋(píng)果、AT&T、索尼等公司共同開(kāi)發(fā),以取代mp3格式。2000年,MPEG-4標(biāo)準(zhǔn)出臺(tái),AAC從新整合了其特性,故現(xiàn)又稱MPEG-4 AAC,即m4a。
蘋(píng)果的CoreAudio對(duì)AAC有較好的支持。

封裝格式

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

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

MP4
mp4格式是H.264編碼指定使用的標(biāo)準(zhǔn)封裝格式,3GP是MP4格式的一種簡(jiǎn)化版本,減少了儲(chǔ)存空間和較低的頻寬需求,讓手機(jī)上有限的儲(chǔ)存空間可以使用。

實(shí)際上這些封裝格式對(duì)應(yīng)的音頻視頻編碼格式也不是固定的,就拿MP4來(lái)說(shuō),常見(jiàn)的MP4是由H.264+AAC封裝,但是也由Xvid+AAC編碼的可能。如果解碼器不支持Xvid,則可能會(huì)出現(xiàn)無(wú)法播放,或者播放播放過(guò)程有聲音無(wú)畫(huà)面的情況。

蘋(píng)果支持哪些音視頻編碼格式

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

這里我們可以找到對(duì)應(yīng)iPhone7支持的視頻編碼格式:


image.png

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

HEVC
又叫H.265,iOS11+A9芯片才開(kāi)始對(duì)HEVC的支持,iPhone6s及以前的設(shè)備不支持HEVC解碼。
音頻格式用紅框標(biāo)出來(lái)了,內(nèi)容較多,可自行對(duì)比。

AVPlayer支持哪些視頻格式

蘋(píng)果設(shè)備支持音視頻格式并不是就代表AVPlayer也支持那么多格式,確定AVPlayer的支持格式,我們可以查看AVKit中的一個(gè)API:

//展示當(dāng)前支持的音視頻格式
let asset = AVURLAsset.audiovisualTypes()
//打印asset可以得到(已經(jīng)轉(zhuǎn)過(guò)展示格式)
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"
)

還有一個(gè)方式用來(lái)判斷當(dāng)前格式是否可播:

//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

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

參考文獻(xiàn)

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容