发现不少人对视频格式存在一些误解,以前写的一篇文章讲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。