Adobe HTTP Dynamic Streaming (HDS) manifest 文件 f4m bootstrap属性解析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Adobe HTTP Dynamic Streaming (HDS) manifest 文件 f4m bootstrap属性解析相关的知识,希望对你有一定的参考价值。

  首先介绍一下应用背景,我们使用的很多浏览器都依赖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。

技术分享

其中UI8表示unsigned int 8 即占用一个字节,UI24,UI32以此类推。而String为UTF-8格式,遇到0x00之后表示字符串终止。

技术分享

随后的三个字节即保存的是一个segment有多少fragment数量。这样后面就可以提取这一个信息了。

 

以上是关于Adobe HTTP Dynamic Streaming (HDS) manifest 文件 f4m bootstrap属性解析的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 类型“Future<dynamic>”不是“Stream<PostModel>”类型的子类型?

从 Stream 检索快照时,Flutter/Firestore 返回类型 List<Review> 不是“Map<String, dynamic>”类型的子类型

Adobe-PhotoShop 下载

如何在 Flutter 的 map<String, dynamic> 中转换 http.MultipartRequest POST 方法的响应?

如何安装 adobe primetime sdk

我眼中的 Nginx:HTTP/2 dynamic table size update