HTTP Adaptive Streaming

news/2024/7/10 20:46:03 标签: 运维, 数据库, ffmpeg

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 Streaminghttp://www.example.com/LiveSmoothStream.isml/Manifest
Apple HTTP Live Streaminghttp://www.example.com/video.m3u8
Adobe HTTP Dynamic Streaminghttp://www.example.com/video.f4m
MPEG DASHhttp://www.example.com/video.mpd

转载于:https://www.cnblogs.com/cmblogs/p/4187085.html


http://www.niftyadmin.cn/n/936182.html

相关文章

Android第三十一期 - 市面上所有引导页的效果

代码已经整理好&#xff0c;有十几种&#xff0c;自己选择用吧&#xff0c;效果如下&#xff1a; 地址&#xff1a;http://down.51cto.com/data/1981257 引导页ViewPageAll地址&#xff1a;http://down.51cto.com/data/1981261 引导页ViewPageSlidingIn地址&#xff1a;http…

使用Fastjson解析List对象时出现“$ref”:“$.data[0].children[0]”的问题

一、问题原因 2、原因&#xff1a;后台传过去的json数据用了阿里的fastjson转换&#xff0c;但是解析list中引用的数据时&#xff0c;jvm会自动将其处理为“循环引用”&#xff0c;因此&#xff0c;也就出现了问题{"ref":"ref":"ref":".da…

windbg sos版本不匹配问题解决

dumpheap 时提示&#xff1a; 0:105> !dumpheap -stat The garbage collector data structures are not in a valid state for traversal. It is either in the "plan phase," where objects are being moved around, or we are at the initialization or shutdow…

向List中添加map被覆盖,list中的值一直是map最后一个

一、问题 今天在写往list集合里面添加map的时候一直出现被覆盖的问题&#xff0c;就是list集合里面全是最后一个map的值&#xff0c;研究了好久发现map所指向的对象是一直是同一个,所以导致list数据全被覆盖。 我的问题是这样的&#xff1a; public static void main(String[]…

winform基础

1、winform应用程序是一种智能客户端技术&#xff0c;我们可以使用winform应用程序帮助我们获得信息或传输信息等。2、属性Name:在后台要获得前台的控件对象&#xff0c;需要使用Name属性。visible:指示一个控件是否可见。Enabled:指示一个控件是否可用。3、事件&#xff1a;发…

Design Pattern Chain of Reponsibility 责任链模式

本程序实现一个责任链模式查询人名的资料。 開始都是查询第一个人&#xff0c;问其是否有某人的资料&#xff0c;假设有就返回结果&#xff0c;假设没有第一个人就会询问第二个人&#xff0c;第二个人的行为和第一个人的行为一致的&#xff0c;然后一致传递下去&#xff0c;直到…

支付宝沙箱环境显示支付存在钓鱼风险

今天用沙箱环境测试支付宝的网站支付功能&#xff0c;结果给我提示存在钓鱼风险&#xff0c;给我整蒙逼了&#xff0c;然后通过搜索发现这个问题关闭掉你登录沙箱环境的网页就行了&#xff0c;我直接把浏览器所有打开的网页全部关掉&#xff0c;重新打开重新访问&#xff0c;结…

SQL Server 数据库DML触发器 【一】

今天学习SQL Server数据库中DML触发器&#xff08;DDL触发器以后有时间继续学习&#xff09;。 当删除一条创建有触发器的表中的内容时&#xff0c;触发器执行SQL语句。 1.首相先创建一张表&#xff0c;表名称是 [Test] &#xff0c; 内有三个字段&#xff0c;分别是 [Name], S…