Adobe HTTP Dynamic Streaming (HDS) manifest 文件 f4m bootstrap属性解析
2016-06-07 15:56
417 查看
首先介绍一下应用背景,我们使用的很多浏览器都依赖Adobe Flash Player 播放视频文件。Flash Player是一个播放的客户端,客户端和服务端之间的流通信有几套实现的标准。包括这里介绍了HDS,Apple的Http Live Streaming等。HDS主要思路是,在服务端将一个视频文件分割成segment节,segment节表示的是这个视频的几种不同分辨率模式,针对某种分辨率的segment节,由可以将视频划分成片,每一片段都是视频的一小段时间。而分段之后会有一个类似表的信息来用来索引这些问题件,即这里说到的manifes文件,后缀名为f4m。f4m文件相关信息可以在网上找到。
manifes文件中最主要的部分就是bootstrapInfo标签。bootstrapInfo标签包含了视频的索引信息,即Flash Player在播放的时候,会根据索引的条目来发送相应请求。比如http请求可能类似于http://foo.bar/foo/bar/Seg1-Frag1,http://foo.bar/foo/bar/Seg1-Frag30这样的连接地址格式。bootstrapInfo里面的数据可以是来自其他外部链接,也可以直接写在标签里。按照其官方文档所描述的信息,bootstrapInfo数据为BASE64编码数据,解码之后,发现全是乱码也不要慌。看起来是乱码,其实只是因为那些数据都是二进制而不是文本格式的而已,数据首部会发现有abst,asrt,afrt字样,说明的确是解码了。
abst: 表示HDS内容的总体信息 adobe bootstrap Info box table
asrt: 如果有多个segment 应该会有多个asrt字样,表示segment总体信息 adobe segment run table
afrt: 表示fragment总体信息 adobe fragment run table
因为研究这个是为了要知道一个segment有多少的fragment,所以查阅了一下flv specification。
![](https://images2015.cnblogs.com/blog/918452/201606/918452-20160607160814605-806378592.jpg)
其中UI8表示unsigned int 8 即占用一个字节,UI24,UI32以此类推。而String为UTF-8格式,遇到0x00之后表示字符串终止。
![](https://images2015.cnblogs.com/blog/918452/201606/918452-20160607160824402-903104123.jpg)
随后的四个字节即保存的是一个segment有多少fragment数量。这样后面就可以提取这一个信息了。
manifes文件中最主要的部分就是bootstrapInfo标签。bootstrapInfo标签包含了视频的索引信息,即Flash Player在播放的时候,会根据索引的条目来发送相应请求。比如http请求可能类似于http://foo.bar/foo/bar/Seg1-Frag1,http://foo.bar/foo/bar/Seg1-Frag30这样的连接地址格式。bootstrapInfo里面的数据可以是来自其他外部链接,也可以直接写在标签里。按照其官方文档所描述的信息,bootstrapInfo数据为BASE64编码数据,解码之后,发现全是乱码也不要慌。看起来是乱码,其实只是因为那些数据都是二进制而不是文本格式的而已,数据首部会发现有abst,asrt,afrt字样,说明的确是解码了。
abst: 表示HDS内容的总体信息 adobe bootstrap Info box table
asrt: 如果有多个segment 应该会有多个asrt字样,表示segment总体信息 adobe segment run table
afrt: 表示fragment总体信息 adobe fragment run table
因为研究这个是为了要知道一个segment有多少的fragment,所以查阅了一下flv specification。
![](https://images2015.cnblogs.com/blog/918452/201606/918452-20160607160814605-806378592.jpg)
其中UI8表示unsigned int 8 即占用一个字节,UI24,UI32以此类推。而String为UTF-8格式,遇到0x00之后表示字符串终止。
![](https://images2015.cnblogs.com/blog/918452/201606/918452-20160607160824402-903104123.jpg)
随后的四个字节即保存的是一个segment有多少fragment数量。这样后面就可以提取这一个信息了。
相关文章推荐
- 网络接口
- iOS开发之网络请求(基于AFNetworking的再封装)
- HTTP协议详解
- https和http的区别
- 使用apache的HTTPclient访问restfulAPI
- 白话 MySQL TCP 通信协议-5分钟理解
- VMware虚拟机的3中网络连接介绍
- EA做UML
- HDU 3435 费用流
- JavaSE入门学习47:Socket网络通信编程(一)
- tcp/udp高并发和高吐吞性能测试工具
- http://mp.weixin.qq.com/s?__biz=MzAwODMyNjYxMQ==&mid=502716191&idx=1&sn=e916fa1a45fe91d162e1e71a2689
- 网络服务器搭建的那些事(PV QPS Throughput)
- 数据包嗅探工具:HTTP请求/响应分析工具
- socket兼容IPV4、IPV6网络底层connect写法
- IOS网络层次
- 测试TCP和UDP端口的方法
- http协议的状态码——400,401,403,404,500,502,503,301,302等常见网页错误代码
- 网络的连接
- 卷积神经网络(CNN)讲解及代码