Adaptive Streaming 学习笔记之一

有了时间就打算做点事情。打算在这里记录自己在学习多媒体信息系统方面的一些点滴,希望能够在将来能够对自己的这也生涯有所裨益。从今天开始,我准备介绍如何从零开始掌握主流的Adaptive Streaming技术的系列学习笔记。

首先给出几个有用的链接:

http://www.zhihu.com/question/20621558

http://www.garymcgath.com/streamingprotocols.html

http://www.streamingmedia.com/Articles/Editorial/What-Is-.../What-Is-a-Streaming-Media-Protocol-84496.aspx

http://www.streamingmedia.com/Articles/Editorial/What-Is-.../What-is-Adaptive-Streaming-75195.aspx

以上的链接对从各个时期的主流streaming协议进行了简要的介绍以及大致的比较,能够给大家一些比较核心的认识。streaming技术从发展的渊源来看主要分为两大流派:基于网络协议并需要对应的多媒体服务器支持的RTSP、微软的MMS以及Adobe的RTMP;基于HTTP的streaming方案诸如Apple的HLS、微软的MSS、Adobe新推出的HDS以及成为国际标准的MPEG DASH。虽然基于网络协议的方案(如RTMP)仍收到广泛的使用与支持,但是毫无疑问基于HTTP的steaming方案由于其得天独厚的优势是未来的发展趋势。当然,还注意到利用BitTorrent技术的P2P Streaming在某些场合也有其优势。

而我们的工作则希望在以上的理论知识之上,对现有的主流视频网站的streaming技术进行实际的探究。

1、Youtube

点播:比较特殊,使用的是HTTPS协议进行传输,因此最多只能通过浏览器调试的方式得到其get请求的包头信息。youtube使用了基于HTML5播放器的HTTP播放方式,对每个视频进行了几十MB级别的分段,然后在每个进行一个小的分片的get请求,每次请求的片段大小大概为1MB+的量级。

https://r3---sn-oguesnze.googlevideo.com/videoplayback?clen=29595934&gir=yes&keepalive=yes&mime=video%2Fmp4&key=yt6&itag=135&nh=IgpwcjAzLm5ydDE5KgkxMjcuMC4wLjE&lmt=1431925619201789&sver=3&initcwndbps=20271250&sparams=clen%2Cdur%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Ckeepalive%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cnh%2Cpl%2Crequiressl%2Csource%2Cupn%2Cexpire&ipbits=0&expire=1452461073&mm=31&pl=25&mn=sn-oguesnze&id=o-ACr7mVFk8xBLEY2goCTmHrQ6KQ52qVzb1aqsCMLA7QCW&dur=271.070&requiressl=yes&ip=45.32.14.175&mt=1452439318&mv=m&ms=au&fexp=9407155%2C9408503%2C9408940%2C9412859%2C9416126%2C9418401%2C9419444%2C9420452%2C9420718%2C9421906%2C9422341%2C9422596%2C9423662%2C9424629%2C9424753%2C9426047%2C9426718&source=youtube&signature=A26EA9B83133D04E506FBA26CFDC7801CA5F7376.67426DF786258D3AA7BF6C56E34F87282E35648E&upn=2nI73VtPabE&cpn=PGwsTojviTs1oReQ&alr=yes&ratebypass=yes&c=WEB&cver=html5&range=4273674-6235380&rn=30&rbuf=32999

https://r3---sn-oguesnze.googlevideo.com/videoplayback?clen=29595934&gir=yes&keepalive=yes&mime=video%2Fmp4&key=yt6&itag=135&nh=IgpwcjAzLm5ydDE5KgkxMjcuMC4wLjE&lmt=1431925619201789&sver=3&initcwndbps=20271250&sparams=clen%2Cdur%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Ckeepalive%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cnh%2Cpl%2Crequiressl%2Csource%2Cupn%2Cexpire&ipbits=0&expire=1452461073&mm=31&pl=25&mn=sn-oguesnze&id=o-ACr7mVFk8xBLEY2goCTmHrQ6KQ52qVzb1aqsCMLA7QCW&dur=271.070&requiressl=yes&ip=45.32.14.175&mt=1452439318&mv=m&ms=au&fexp=9407155%2C9408503%2C9408940%2C9412859%2C9416126%2C9418401%2C9419444%2C9420452%2C9420718%2C9421906%2C9422341%2C9422596%2C9423662%2C9424629%2C9424753%2C9426047%2C9426718&source=youtube&signature=A26EA9B83133D04E506FBA26CFDC7801CA5F7376.67426DF786258D3AA7BF6C56E34F87282E35648E&upn=2nI73VtPabE&cpn=PGwsTojviTs1oReQ&alr=yes&ratebypass=yes&c=WEB&cver=html5&range=6235381-7711377&rn=32&rbuf=43270

https://r3---sn-oguesnze.googlevideo.com/videoplayback?clen=29595934&gir=yes&keepalive=yes&mime=video%2Fmp4&key=yt6&itag=135&nh=IgpwcjAzLm5ydDE5KgkxMjcuMC4wLjE&lmt=1431925619201789&sver=3&initcwndbps=20271250&sparams=clen%2Cdur%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Ckeepalive%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cnh%2Cpl%2Crequiressl%2Csource%2Cupn%2Cexpire&ipbits=0&expire=1452461073&mm=31&pl=25&mn=sn-oguesnze&id=o-ACr7mVFk8xBLEY2goCTmHrQ6KQ52qVzb1aqsCMLA7QCW&dur=271.070&requiressl=yes&ip=45.32.14.175&mt=1452439318&mv=m&ms=au&fexp=9407155%2C9408503%2C9408940%2C9412859%2C9416126%2C9418401%2C9419444%2C9420452%2C9420718%2C9421906%2C9422341%2C9422596%2C9423662%2C9424629%2C9424753%2C9426047%2C9426718&source=youtube&signature=A26EA9B83133D04E506FBA26CFDC7801CA5F7376.67426DF786258D3AA7BF6C56E34F87282E35648E&upn=2nI73VtPabE&cpn=PGwsTojviTs1oReQ&alr=yes&ratebypass=yes&c=WEB&cver=html5&range=7711378-9099835&rn=33&rbuf=49449

直播:采用了DASH协议,典型的方式是将直播的视频流和音频流分割为1MB+和几十KB+的量级。通过首先get请求得到manifest文件得到play_list,然后再根据当前的网络状态或者用户需求实时选择对应码率的video和audio的片段。

https://manifest.googlevideo.com/api/manifest/dash/itag/0/hfr/1/pmbypass/yes/fexp/9407155%2C9408503%2C9408940%2C9412859%2C9416126%2C9418401%2C9419444%2C9420452%2C9420718%2C9421906%2C9422341%2C9422596%2C9423662%2C9424629%2C9424753%2C9426047%2C9426718/sver/3/source/yt_live_broadcast/upn/98VTQUg-5_g/gcr/jp/ipbits/0/as/fmp4_audio_clear%2Cfmp4_sd_hd_clear/sparams/gcr%2Chfr%2Cid%2Cip%2Cipbits%2Citag%2Cplaylist_type%2Cpmbypass%2Csource%2Cexpire/signature/4D3A6CE9B09129F5FEAF1B3F51CBD94042CDAB5E.6E333D90654565E7DC9B106D93A54A846D7D5828/playlist_type/DVR/expire/1452462185/key/yt6/ip/45.32.14.175/id/y60wDzZt8yg.1?cpn=awum5pVWpt0gFj7r&mpd_version=3&start_seq=2634917

https://r9---sn-oguesn7s.googlevideo.com/videoplayback?id=y60wDzZt8yg.1&itag=136&source=yt_live_broadcast&requiressl=yes&pmbypass=yes&gcr=jp&playlist_type=DVR&ratebypass=yes&cmbypass=yes&mime=video%2Fmp4&live=1&gir=yes&fexp=9407155,9408503,9408940,9412859,9416126,9418401,9419444,9420452,9420718,9421906,9422341,9422596,9423662,9424629,9424753,9426047,9426718&sver=3&upn=98VTQUg-5_g&signature=2693EEA04DCFCAA687547B92275C4D5B5A84C4E4.5C12F9A2C66F4D5F715944BD0A30AE38F30DC5E8&key=cms1&cpn=awum5pVWpt0gFj7r&mpd_version=3&ip=45.32.14.175&ipbits=0&expire=1452462185&sparams=cmbypass,expire,gcr,gir,id,ip,ipbits,itag,live,mime,mm,mn,ms,mv,nh,pl,playlist_type,pmbypass,ratebypass,requiressl,source&mm=32&mn=sn-oguesn7s&ms=lv&mt=1452440510&mv=u&nh=IgpwcjAzLm5ydDE5KgkxMjcuMC4wLjE&pl=25&alr=yes&keepalive=yes&c=WEB&cver=html5&sq=2634917&clen=1081219&lmt=1452440650952458&dur=5.0&rn=144&rbuf=9492

https://r9---sn-oguesn7s.googlevideo.com/videoplayback?id=y60wDzZt8yg.1&itag=140&source=yt_live_broadcast&requiressl=yes&pmbypass=yes&gcr=jp&playlist_type=DVR&ratebypass=yes&cmbypass=yes&mime=audio%2Fmp4&live=1&gir=yes&fexp=9407155,9408503,9408940,9412859,9416126,9418401,9419444,9420452,9420718,9421906,9422341,9422596,9423662,9424629,9424753,9426047,9426718&sver=3&upn=98VTQUg-5_g&signature=76E310685015414B7B9859DD3E963E1B21B8250E.786B6C6E1A779E932FD971116FA25C3157B8AFD8&key=cms1&cpn=awum5pVWpt0gFj7r&mpd_version=3&ip=45.32.14.175&ipbits=0&expire=1452462185&sparams=cmbypass,expire,gcr,gir,id,ip,ipbits,itag,live,mime,mm,mn,ms,mv,nh,pl,playlist_type,pmbypass,ratebypass,requiressl,source&mm=32&mn=sn-oguesn7s&ms=lv&mt=1452440510&mv=u&nh=IgpwcjAzLm5ydDE5KgkxMjcuMC4wLjE&pl=25&alr=yes&keepalive=yes&c=WEB&cver=html5&sq=2634917&clen=79580&lmt=1452440650952458&dur=5.0&rn=145&rbuf=9492

2、Youku、iQiYi等国内主流视频点播网站

点播:典型的方式是将一个大的视频会按照几十MB的水平划分为大片段。再通过HTTP协议,简单地通过get请求给出所需视频.flv文件的长度范围,与youtube不太相同的是每次请求的大小为10MB+左右,边下载该文件边播放直至该文件被播放完毕。以下是一个简单的请求过程:

http://112.29.146.4/videos/v0/20160110/ea/ee/57ae4676c08dc2540b6d8c774dc4b838.f4v?key=01bfa2a0b5d4d0d2debcb7e0f384ac3b1&src=iqiyi.com&qd_tvid=439500800&qd_vipres=0&qd_index=4&qd_aid=439500800&qd_stert=1080970&qd_scc=3040a4319737bb34a3f031ec53cb09f7&qd_sc=ba9bd8d9c15916c0dd71deeda26dfddf&qd_src=1702633101b340d8917a69cf8a4b8c7c&qd_ip=6f0a207b&qd_uid=0&qd_tm=1452425434000&qd_vip=0&ran=10900335&qyid=c828a7e5701c3bbabd54b174591a13c1&qypid=439500800_11&s=144756.3774431001&bt=175184&z=hefei_cmnet&la=CMNET|ChongQing-111.10.35.152&li=hefei_cmnet&lsp=141&lc=83&uuid=6f0a2398-56926b71-6f&range=0-10747903&qypid=439500800_01010011010000000000_1&ran=10900604

http://112.29.146.4/videos/v0/20160110/ea/ee/57ae4676c08dc2540b6d8c774dc4b838.f4v?key=01bfa2a0b5d4d0d2debcb7e0f384ac3b1&src=iqiyi.com&qd_tvid=439500800&qd_vipres=0&qd_index=4&qd_aid=439500800&qd_stert=1080970&qd_scc=3040a4319737bb34a3f031ec53cb09f7&qd_sc=ba9bd8d9c15916c0dd71deeda26dfddf&qd_src=1702633101b340d8917a69cf8a4b8c7c&qd_ip=6f0a207b&qd_uid=0&qd_tm=1452425434000&qd_vip=0&ran=10900335&qyid=c828a7e5701c3bbabd54b174591a13c1&qypid=439500800_11&s=144756.3774431001&bt=175184&z=hefei_cmnet&la=CMNET|ChongQing-111.10.35.152&li=hefei_cmnet&lsp=141&lc=83&uuid=6f0a2398-56926b71-6f&range=10747904-24379391&qypid=439500800_01010011010000000000_1&ran=10931290

http://112.29.146.4/videos/v0/20160110/ea/ee/57ae4676c08dc2540b6d8c774dc4b838.f4v?key=01bfa2a0b5d4d0d2debcb7e0f384ac3b1&src=iqiyi.com&qd_tvid=439500800&qd_vipres=0&qd_index=4&qd_aid=439500800&qd_stert=1080970&qd_scc=3040a4319737bb34a3f031ec53cb09f7&qd_sc=ba9bd8d9c15916c0dd71deeda26dfddf&qd_src=1702633101b340d8917a69cf8a4b8c7c&qd_ip=6f0a207b&qd_uid=0&qd_tm=1452425434000&qd_vip=0&ran=10900335&qyid=c828a7e5701c3bbabd54b174591a13c1&qypid=439500800_11&s=144756.3774431001&bt=175184&z=hefei_cmnet&la=CMNET|ChongQing-111.10.35.152&li=hefei_cmnet&lsp=141&lc=83&uuid=6f0a2398-56926b71-6f&range=24379392-38239153&qypid=439500800_01010011010000000000_1&ran=10998356

以上的例子中,该文件片段的长度为38,239,153字节,被分为成了三次get请求来完成下载。客户端基于的Flash技术,可以对接收到的部分文件进行实时解码实现边播放边下载,这是由Adobe公司的技术提供的保证。

3、PPTV、LeTV、直播秀场等国内视频直播网站

PPTV点播:众所周知,PPTV脱胎于PPLive,因此其基于P2P直播的技术路线与其他的主流的视频点播截然不同,而这也体现在其点播业务上。我们通过抓包发现,PPTV网站上的点播视频通常被划分为几十MB的片段,然后再通过HTTP请求每次花去大概1MB+的分片。而每次获取的过程与其他网站有所不同。初始化是一个如下的链接(返回的信息其实并没有具体的数据内容,只是关于该片段的基本信息):

http://122.72.99.58/1/0/1023/ece14c23db607048bfa27f8e682f00e1.mp4?fpp.ver=1.3.0.19&type=web.fpp&k=292f456fcf0c2ba9fe41ad897bfe0dba-6edb-1452498293&get_drm_header=true

然后再通过数十次的get请求,每次分别获取大概1MB多的分片,直至整个该片段都被下载完毕。

· · · · · · · · · · · · · · · · · · · · · · · ·

上述get请求的格式如下:

http://122.72.99.58/1/17040384/0/ece14c23db607048bfa27f8e682f00e1.mp4?fpp.ver=1.3.0.19&key=df08b453543a03d9edcaa4c45508754c&k=292f456fcf0c2ba9fe41ad897bfe0dba-6edb-1452498293&type=web.fpp

可以看出与仅仅为了获取视频片段信息的get请求的链接格式有所区别。值得一提的是,PPTV方案中的偏移地址的方式是在链接中的视频文件名之前,以三个斜线分割的数字来定义的:***/1/17040384/0/***。“1”表示片段的序号,“17040384”表示该片段中的起始偏移地址,而“0”表示直至结尾。通过抓包结果发现,该次请求服务器的响应并不一定是真的到结尾,而是传输了大概1MB多就会停止,随即开始下一次相似的get请求。

PPTV直播:直播的方式倒是较为简单,直接将直播stream编码之后划分为block(这里我猜想是否可能是TS流?可以进一步探究证实),并将其索引,每个get请求通过http方式接收5个block的内容,大小大概在几百KB的量级。

4、传统的监控视频探头

基本上都是通过传统的RTSP协议进行。大家只需上网搜索几个可用的RTSP流用VLC测试一下就能够发现。

5、iOS及Android手机客户端测试

iOS系统下的点播测试:(以iQiYi为例)

【手机抓包方法:http://www.chinaz.com/web/2015/0326/393344.shtml

这个问题还要分为两个方面来看,由于iOS系统的特殊性,分为APP端与Safari浏览器端。由于APP端的厂商的可控性较大,因此通过抓包我们发现,仍然采取了较为传统的flv容器格式,应该是在APP中通过结合FFMpeg等第三方的开源编解码库实现编解码。而对于Safari浏览器端,由于iOS只支持HTML5,根本无法使用flash控件,因此厂商往往采用了APPLE主导的HLS方案。抓取到的HTTP请求链接如下:

http://data.video.iqiyi.com/videos/v0/20160112/91/dd/19ad0a1686a4f7d7cc5c41e666bac06f.ts?qypid=440440000_31&start=2674193&end=5408962&hsize=76694&tag=1&v=&contentlength=1847852&qd_uid=0&qd_vip=0&qd_src=d846d0c32d664d32b6b54ea48997a589&qd_tm=1452616355776&qd_ip=111.10.33.180&qd_sc=74d976bf20c2a2dbfb15791d126c2a04

http://data.video.iqiyi.com/videos/v0/20160112/91/dd/19ad0a1686a4f7d7cc5c41e666bac06f.ts?qypid=440440000_31&start=4785056&end=6064737&hsize=76694&tag=1&v=&contentlength=868184&qd_uid=0&qd_vip=0&qd_src=d846d0c32d664d32b6b54ea48997a589&qd_tm=1452616355776&qd_ip=111.10.33.180&qd_sc=74d976bf20c2a2dbfb15791d126c2a04

http://data.video.iqiyi.com/videos/v0/20160112/91/dd/19ad0a1686a4f7d7cc5c41e666bac06f.ts?qypid=440440000_31&start=5708731&end=6892905&hsize=76694&tag=1&v=&contentlength=826448&qd_uid=0&qd_vip=0&qd_src=d846d0c32d664d32b6b54ea48997a589&qd_tm=1452616355776&qd_ip=111.10.33.180&qd_sc=74d976bf20c2a2dbfb15791d126c2a04

可以看到,链接中请求的视频文件是TS流,该TS流文件应该是一个大文件,同时结合链接给出的begin和end的所请求的视频片段起始地址,同时还给出了该片段的长度length,得到了相互间还略有重叠的TS流片段,从而得到流畅的播放。而使用TS流文件作为标准容器正是APPLE主导的HLS流媒体传输协议的主要特征之一。

而对于直播,其实也可以用类似的思路解决,因为HLS本来就是原生支持video streaming的协议。这一点也在其他的iOS设备上的APP中体现出来,比如cntv。在对其直播视频的抓包监控中,我们不仅发现了ts文件流,同时还发现了更多的细节,比如获取m3u8文件的过程。这更进一步说明了,在iOS设备上的HLS协议的统一性。

【M3U8文件解析:http://blog.sina.com.cn/s/blog_6cf7acdf0102v0xv.html

时间: 2024-08-05 17:06:24

Adaptive Streaming 学习笔记之一的相关文章

nBodyCS<I>学习笔记之计算着色器

nBodyCS<I>学习笔记之计算着色器 Nvidia-SDK(1) 版权声明:本文为博主原创文章,未经博主允许不得转载. DirectX一直是Windows上图形和游戏开发的核心技术.DirectX提供了一种在显卡上运行的程序--着色器(Shader).从DirectX11开始,DirectX增加了一种计算着色器(Compute Shader),它是专门为与图形无关的通用计算设计的.因此DirectX就变成了一个通用GPU计算的平台.鉴于GPU拥有极其强大的并行运算能力,学习使用Direct

spark学习笔记总结-spark入门资料精化

Spark学习笔记 Spark简介 spark 可以很容易和yarn结合,直接调用HDFS.Hbase上面的数据,和hadoop结合.配置很容易. spark发展迅猛,框架比hadoop更加灵活实用.减少了延时处理,提高性能效率实用灵活性.也可以与hadoop切实相互结合. spark核心部分分为RDD.Spark SQL.Spark Streaming.MLlib.GraphX.Spark R等核心组件解决了很多的大数据问题,其完美的框架日受欢迎.其相应的生态环境包括zepplin等可视化方面

capwap学习笔记&mdash;&mdash;初识capwap(五)

3. CAPWAP Binding for IEEE 802.11 ¢ CAPWAP协议本身并不包括任何指定的无线技术.它依靠绑定协议来扩展对特定无线技术的支持. ¢ RFC5416就是用来扩展CAPWAP对IEEE 802.11网络的支持.其中定义了控制消息字段,新的控制消息,消息元素. ¢ 注意,这个协议仅支持IEEE 802.11-2007规范,并不支持IEEE 802.11-2007 standard中定义的ad hoc网络模式(即点到点模式,也就是IBSS),也不适用于four-add

CCIE学习笔记之端到端QOS

Class-map默认行为match-all Match protocol http mime "*/audio/*" Match protocol http mime "*/video/*"  //分类器寻找特殊类型的音频和视频mime流量 Match protocol http "*.jpg|*.jpeg"     //匹配图片流量 注:MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自

端口相关知识学习笔记

端口相关知识学习笔记 端口相关知识学习笔记 本周主要精力是放在挂接上,所以知识矩阵的学习回归到根本上,所以这周发的学习笔记是关于计算机端口的相关介绍. 有过一些黑客攻击方面知识的读者都会知道,其实那些所谓的黑客并不是像人们想象那样从天而降,而是实实在在从您的计算机"大门"中自由出入.计算机的" 大门"就是我们平常所说的"端口",它包括计算机的物理端口,如计算机的串口.并口.输入/输出设备以及适配器接口等(这些端口都是可见的),但更多的是不可见的软

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu

jQuery学习笔记(一):入门

jQuery学习笔记(一):入门 一.JQuery是什么 JQuery是什么?始终是萦绕在我心中的一个问题: 借鉴网上同学们的总结,可以从以下几个方面观察. 不使用JQuery时获取DOM文本的操作如下: 1 document.getElementById('info').value = 'Hello World!'; 使用JQuery时获取DOM文本操作如下: 1 $('#info').val('Hello World!'); 嗯,可以看出,使用JQuery的优势之一是可以使代码更加简练,使开

[原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------