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

参考文献

视频文件格式 - 维基百科,自由的百科全书 音频编码格式的比较 - 维基百科,自由的百科全书

相关文章
相关标签/搜索