zoukankan      html  css  js  c++  java
  • HTTP Adaptive Streaming

    HTTP Adaptive Streaming简称HAS,中文名称为码流自适应。随着这几年移动终端对视频播放需求的增长,HAS技术慢慢火热起来。

    HAS技术中流媒体服务器端需要准备各种码率的媒体数据,然后对每种码率的媒体数据都进行切割分片,每个切片时长一直,大概2~10秒钟,每个切片由一个完整的GOP序列组成,一个GOP序列里面有1个或者多个I帧,GOP序列的第一个帧必须是I帧,并且每个切片都能单独的解码播放显示。切片时需要建立每种码率切片的索引文件,以便客户端定位播放。

    HAS技术中流媒体播放器需要根据自己的网络带宽选择不同码率的切片文件播放。播放器首先下载所有码率的切片索引信息,然后选择性的播放切片文件,如果中途带宽收紧,可随时切换到低码率的切片文件播放,因为流媒体服务器已经做好了不同码率切片文件的时间同步和图像同步,他们仅仅是码率和分辨率不同,所占用的网络传输带宽不同而已。

    HAS技术本质上是流媒体服务器准备各种码率的码流,所有的码流都是相同时段完全统一图像的视音频数据,客户端播放器根据网络带宽变化适时的调度不同的码流, 完成带宽变化时图像无卡顿无花屏的播放。HAS技术需要服务器端和客户端完美的配合才能展现其优势。

    HAS技术的实现方式现在有四种方案:Apple HTTP Live Streaming技术、Microsoft Smooth Streaming技术、Adobe HTTP Dynamic Streaming技术、MPEG DASH技术。

    传统的流媒体传输技术一般为RTP/RTSP/RTCP,而HAS是基于HTTP的,具有以下优势:

    1、HTTP协议的WEB服务器有很多,Lighttpd、Nginx、Apache和IIS,利用WEB服务器的代理缓存机制能做好高并发流媒体的分发;

    2、播放器根据网络带宽大小动态切换不同码率的媒体源,具有良好的兼容性;

    3、HAS技术都由技术实力强大的公司牵头制定标准,可靠实用。

    HAS技术由互联网视频技术发展而生,如果将其应用到传统行业,也会带来不错的效果。

    一、Apple HTTP Live Streaming (HLS)

    文件切片格式为TS;

    索引文件为M3U8;

    支持直播和时移;

    主要面向于iphone/ipad视频播放器,不过安卓平台也有播放器支持该协议,在PC上可直接用VLC测试;

    HLS协议比较简单,可自行在任何平台上实现。

    流媒体服务器中HLS协议切片文件:

    M3u8存储着TS文件列表,1.m3u8内容:
     

    playlist.m3u8存储1.m3u8和2.m3u8的切片码率,playlist.m3u8文件内容:

    HLS协议标准文档:

    http://tools.ietf.org/html/draft-pantos-http-live-streaming-11

     

    二、Microsoft Smooth Streaming

    文件切片格式为MP4;

    索引文件为ism/ismc;

    支持直播和时移;

    主要面向于WPhone视频播放器;

    需要IIS 7做WEB服务器,不过nginx 和Apache也有第三方模块支持该协议,播放器需要采用Silverlight技术。

     

    录像存储文件列表为:

    LiveSmoothStream.ism

    LiveSmoothStream.ismc

    stream101.isma

    stream201.ismv

    stream202.ismv

     

    LiveSmoothStream.ism文件内容为:

    <?xml version="1.0" encoding="utf-16"?>

    <smil xmlns="http://www.w3.org/2001/SMIL20/Language">

      <head>

        <meta name="clientManifestRelativePath" content="LiveSmoothStream.ismc" />

      </head>

      <body>

        <switch>

          <audio src="stream101.isma" systemBitrate="64000" systemLanguage="eng">

            <param name="manifestOutput" value="false" valuetype="data" />

            <param name="trackID" value="101" valuetype="data" />

            <param name="trackName" value="audio101_eng" valuetype="data" />

          </audio>

          <video src="stream201.ismv" systemBitrate="1200000" systemLanguage="und">

            <param name="manifestOutput" value="false" valuetype="data" />

            <param name="trackID" value="201" valuetype="data" />

            <param name="trackName" value="video" valuetype="data" />

          </video>

          <video src="stream202.ismv" systemBitrate="600000" systemLanguage="und">

            <param name="manifestOutput" value="false" valuetype="data" />

            <param name="trackID" value="202" valuetype="data" />

            <param name="trackName" value="video" valuetype="data" />

          </video>

        </switch>

      </body>

    </smil>

     

    三、Adobe HTTP Dynamic Streaming (HDS)

    文件切片格式为FLV/F4V/MP4;

    索引文件为 f4m(此时的f4m仅仅是上面流文件的索引,而每个流文件又可碎片化,得到更精确的碎片索引信息)

    支持直播和时移;

    录像存储文件列表为:

    hds_sample1_manifest.f4m

    sample1_150kbps.f4v

    sample1_700kbps.f4v

    sample1_1000kbps.f4v

    hds_sample1_manifest.f4m文件内容为:

    <manifest xmlns="http://ns.adobe.com/f4m/2.0">

    <media href="../hds-vod/sample1_150kbps.f4v.f4m" bitrate="150"/>

    <media href="../hds-vod/sample1_700kbps.f4v.f4m" bitrate="700"/>

    <media href="../hds-vod/sample1_1000kbps.f4v.f4m" bitrate="1000"/>

    </manifest>

     

    四、MPEG Dynamic Adaptive Streaming over HTTP(MPEG DASH)

    DASHEncoder: https://github.com/slederer/DASHEncoder

    DASHEncoder的依赖有x264,ffmpeg,mp4box和mysql client libraries

    播放协议 播放URL
    Microsoft Smooth Streaming http://www.example.com/LiveSmoothStream.isml/Manifest
    Apple HTTP Live Streaming http://www.example.com/video.m3u8
    Adobe HTTP Dynamic Streaming http://www.example.com/video.f4m
    MPEG DASH http://www.example.com/video.mpd
  • 相关阅读:
    在文本框按回车 表单自动提交的解决方法
    类型提示保障数据安全
    LastModified,ETag,CacheControl,Expires 设置页面过期策略
    Netstat 状态分析
    Web 开发与设计师速查手册大全(上)
    Google推出网页加速工具Page Speed
    最近关于twitter架构的一篇文章
    PHP cookie和session的分析(转)
    关于win10深度学习安装配置 CUDA9.0+VS2017+Cudnn7.4.1.5+Anaconda3(cupy安装包)+python3.7+pycharm
    Python命令行解析argparse常用语法使用简介
  • 原文地址:https://www.cnblogs.com/cmblogs/p/4187085.html
Copyright © 2011-2022 走看看