• 关于直播几个视频格式的概念总结


    因为业务需要,这段时间一直在准备做一个新的HTML5播放器,涉及到一些底层的视频知识,这段时间到处搜索了解了一些相关信息,这里先做一个阶段性总结。

    MPEG

    MPEG(Moving Picture Experts Group,动态图像专家组)是ISO(International Standardization Organization,国际标准化组织)与IEC(International Electrotechnical Commission,国际电工委员会)于1988年成立的专门针对运动图像和语音压缩制定国际标准的组织。

    这一段我是直接从百度百科上粘下来的官方解释,总结下来就是这是一个专门制定视音频通用标准的一个组织,因为要让播放器能正确识别播放各种视频,所以需要一份视音频格式的业界标准。我也同找到了一个解答很清晰简单的回答。通常来讲,每一次制定一个版本的白皮书就是一次技术的革新。

    • 比如最开始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,还没出世就被抛弃了。

    • 后来随着手机的出现,因为手机的存储量有限,就要求更高的压缩率,比如原来一张DVD的存储量有4GB,而手机只有1G,这时候通过一些算法大牛们的努力,慢慢就有了MPEG4的协议制定。MPEG4协议中用了更高级的压缩算法,会比MPEG2有更高的压缩比。

    Container

    container就是指视频的格式,包括.mp4, .mov, .wmv, .m3u8, .flv等等,container作为容器主要包含了video数据、audio数据、metadata(用于检索视频payload格式等信息)。

    Codec

    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协议有很多部分,压缩方式是其中的一部分,还有一些部分定义了视频文件结构标准等)。就是现在工业界普遍在用的视频压缩方式。

    MediaSource Extension

    浏览器新提供的通过JavaScript生成媒体流来播放的API,通过window.URL.createObjectURL(MediaSource)接口可以在浏览器端生成一个可播放的blob链接,并设置给video标签

    HLS vs. RTMP

    这个基本可以链接我上一篇文章了,是当前比较通用的两个直播传输协议。其中HLS协议的直播视频格式是m3u8,RTMP的是flv。

    m3u8文件

    图片描述图片描述

    上面2张图片,左图是一个普通的m3u8文件打开的内容,其实m3u8文件是一个纯文本,可以用记事本直接打开的,是一个视频描述文件,里面描述了一个个.ts文件片段的地址(或相对地址)、时长及hls协议版本信息等。右图是一个可以有多码率自适应的m3u8描述文件,可以根据不同带宽选择不同的m3u8地址。其中ts文件才是真正的视频数据。

    ts文件

    410527-20160723143430029-744220516.jpg

    上图是我找的网上关于ts文件的详细文件结构,一个ts文件在传输过程中是以188byte大小的包传输的,每一个包包括一个header和payload。header中又有不同的字段,用来描述视频信息及payload所在的位置,payload即是有效负载,就是视频信息,是一个在通信领域的专用名词。具体的文件结构解析,打算在下一篇m3u8文件详细的文章中描述。

    fragmented mp4

    Center

    也就是fmp4,是适应于现代浏览器的一种流媒体格式。和mp4格式不同的是,以往的mp4格式化也分为header信息和payload信息,一个大的mp4就会有一个很大的头信息,不适合与现在的网络环境。所以新的fmp4格式就出现了,fmp4格式有一个带了metadata的头片段,及后面一序列的fragment,每个fragment都有各自的header信息,这样就把header信息也分成了一个个小的片段,更适合现在的应用场景。所以fmp4格式也就是用于MediaSource对象的SourceBuffer的格式,通过一个initSegment和一序列的segment塞给MediaSource对象来播放。

    本文转载于:猿2048→https://www.mk2048.com/blog/blog.php?id=hja1cbj1icb

  • 相关阅读:
    iOS-mac下 svn的使用
    iOS-Model-View-ViewModel & ReactiveCocoa
    iOS-通过实现一个TableView来理解iOS UI编程(转)
    iOS-细说 iOS 消息推送(转)
    【原创】O2O,你真的知道怎么玩吗?
    谷歌提升虚拟运营商逼格,传统电信运营商的好日子到头?
    【技术贴】大型发布会现场的WiFi网络应该如何搭建?
    千万别把WIFI玩坏了!关于WIFI的新鲜玩法和商业模式探讨
    【深度分享】千团大战:看今天商业WiFi乱局及其破解之道
    (转)迎接 Entity Framework 7
  • 原文地址:https://www.cnblogs.com/10manongit/p/12884218.html
Copyright © 2020-2023  润新知