由于业务须要,这段时间一直在准备作一个新的HTML5播放器,涉及到一些底层的视频知识,这段时间处处搜索了解了一些相关信息,这里先作一个阶段性总结。html
MPEG(Moving Picture Experts Group,动态图像专家组)是ISO(International Standardization Organization,国际标准化组织)与IEC(International Electrotechnical Commission,国际电工委员会)于1988年成立的专门针对运动图像和语音压缩制定国际标准的组织。算法
这一段我是直接从百度百科上粘下来的官方解释,总结下来就是这是一个专门制定视音频通用标准的一个组织,由于要让播放器能正确识别播放各类视频,因此须要一份视音频格式的业界标准。我也同找到了一个解答很清晰简单的回答。一般来说,每一次制定一个版本的白皮书就是一次技术的革新。segmentfault
好比最开始MPEG1就是针对VCD制定的音频压缩标准(其中咱们所熟知及最近正在被渐渐废弃的mp3格式就是指MPEG-1 audio layer 3)浏览器
MPEG2开始针对DVD制定视频+音频的压缩标准,视频其实能够看做是图片帧序列,好比一张通过压缩的jpg图片的大小是100KB,对于一个每秒24帧的1分钟的视频来讲,一个视频可能就有100KB * 24 * 60 ≈ 14G的大小,这样确定不行。MPEG2协议中就定义了一些业界的视频压缩标准。网络
MPEG3其实和mp3不一样,原本MPEG3是针对HDTV广播视频而制定的协议,可是因为MPEG-2的出色性能表现,已能适用于HDTV,使得原打算为HDTV设计的MPEG-3,还没出世就被抛弃了。ide
后来随着手机的出现,由于手机的存储量有限,就要求更高的压缩率,好比原来一张DVD的存储量有4GB,而手机只有1G,这时候经过一些算法大牛们的努力,慢慢就有了MPEG4的协议制定。MPEG4协议中用了更高级的压缩算法,会比MPEG2有更高的压缩比。性能
container就是指视频的格式,包括.mp4, .mov, .wmv, .m3u8, .flv等等,container做为容器主要包含了video数据、audio数据、metadata(用于检索视频payload格式等信息)。编码
COmpress and DECompress,是指视音频的压缩方式,包括H.265/MPEG-H HEVC, H.264/MPEG-4 AVC, H.263/MPEG-4 Part 2, H.262/MPEG-2等等。能够分为intraframe codec和interframe codec。其中H.264/AVC,也称为MPEG-4 高级视频编码(Advanced Video Coding,AVC),而且它将成为MPEG-4标准的第10部分(MPEG协议有不少部分,压缩方式是其中的一部分,还有一些部分定义了视频文件结构标准等)。就是如今工业界广泛在用的视频压缩方式。spa
浏览器新提供的经过JavaScript生成媒体流来播放的API,经过window.URL.createObjectURL(MediaSource)接口能够在浏览器端生成一个可播放的blob连接,并设置给video标签.net
这个基本能够连接我上一篇文章了,是当前比较通用的两个直播传输协议。其中HLS协议的直播视频格式是m3u8,RTMP的是flv。
上面2张图片,左图是一个普通的m3u8文件打开的内容,其实m3u8文件是一个纯文本,能够用记事本直接打开的,是一个视频描述文件,里面描述了一个个.ts文件片断的地址(或相对地址)、时长及hls协议版本信息等。右图是一个能够有多码率自适应的m3u8描述文件,能够根据不一样带宽选择不一样的m3u8地址。其中ts文件才是真正的视频数据。
上图是我找的网上关于ts文件的详细文件结构,一个ts文件在传输过程当中是以188byte大小的包传输的,每个包包括一个header和payload。header中又有不一样的字段,用来描述视频信息及payload所在的位置,payload便是有效负载,就是视频信息,是一个在通讯领域的专用名词。具体的文件结构解析,打算在下一篇m3u8文件详细的文章中描述。
也就是fmp4,是适应于现代浏览器的一种流媒体格式。和mp4格式不一样的是,以往的mp4格式化也分为header信息和payload信息,一个大的mp4就会有一个很大的头信息,不适合与如今的网络环境。因此新的fmp4格式就出现了,fmp4格式有一个带了metadata的头片断,及后面一序列的fragment,每一个fragment都有各自的header信息,这样就把header信息也分红了一个个小的片断,更适合如今的应用场景。因此fmp4格式也就是用于MediaSource对象的SourceBuffer的格式,经过一个initSegment和一序列的segment塞给MediaSource对象来播放。