首先介绍一下应用背景,我们使用的很多浏览器都依赖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属性解析的更多相关文章

  1. 搭建 Http Dynamic Streaming 点播/直播服务器

    1.        HTTP Origin Module的处理数据流: a)         客户端发送媒体索引请求到Apache.例如: http://www.example.com/media/  ...

  2. Android manifest文件中的标签详细介绍

    官方文档 概要 每一个Android应用都应该包含一个manifest文件,即AndroidManifest.xml.它包含了程序运行的一些必备信息,比如:--为Java应用程序指定一个独一无二的名字 ...

  3. 利用manifest文件对程序目录下的dll进行分类

    1 背景 对于大部分的券商和机构投资者,只能通过有交易所交易系统接入资质的券商提供的柜台系统来进行现货交易.相对于期货市场,现货市场的柜台系统千差万别,接入协议有明文字符串.二进制数据和FIX协议等, ...

  4. Android 在 manifest 文件里增加 versionCode,运行后版本并没有随之增加

    现象:从 git 上拉下来的代码中 versionCode 是8,versionName 是1.0.7但运行后的版本仍然是1.0.6 原因:全文搜索1.0.6之后发现在 bin 目录下也有一个 man ...

  5. HTML5 的 applicationCache 应用程序缓存离线存储功能与 manifest 文件

    一. 实现 HTML5 applicationCache 的步骤 一般的操作步骤 1. 新建 manifest 文件 如文件名为  lzwme.manifest,内容配置参考如下: 01 CACHE ...

  6. LevelDB源码之五Current文件\Manifest文件\版本信息

    版本信息有什么用?先来简要说明三个类的具体用途: Version:代表了某一时刻的数据库版本信息,版本信息的主要内容是当前各个Level的SSTable数据文件列表. VersionSet:维护了一份 ...

  7. Manifest文件简介

    每个Android项目都包含一个Manifest文件-Android Manifest.xml,它存储在项目层次中的最底层.Manifest可以定义应用程序及其组件和需求的结构和元数据. 它包含了组成 ...

  8. 用MT.exe将exe中的manifest文件提取出来和将manifest文件放入exe中

     前一种方法是将manifest文件放入exe中,但是要记得需要在工程中设置 这样的话exe中就不存在manifest了,在debug目录下就会看到相应的manifest文件.后者是将exe中的man ...

  9. 什么是 .manifest 文件

    恩,为了大家都能很方便的理解,我将尽量简单通俗地进行描述. [现象]对这个问题的研究是起源于这么一个现象:当你用VC++2005(或者其它.NET)写程序后,在自己的计算机上能毫无问题地运行,但是当把 ...

随机推荐

  1. python 递归深度优先搜索与广度优先搜索算法模拟实现

    一.递归原理小案例分析 (1)# 概述 递归:即一个函数调用了自身,即实现了递归 凡是循环能做到的事,递归一般都能做到! (2)# 写递归的过程 1.写出临界条件2.找出这一次和上一次关系3.假设当前 ...

  2. sql server动态行列转换

    原文链接:https://www.cnblogs.com/gaizai/p/3753296.html sql server动态行列转换 一.本文所涉及的内容(Contents) 本文所涉及的内容(Co ...

  3. phpcms调用子栏目名称/文章怎么操作

    phpcms调用子栏目名称相对比较简单一些,也是用{pc:content}来调用,只是把action设置为category,catid如果为0的话是调用所有一级栏目,如果是其他数字的话,则调用相应栏目 ...

  4. Upsource——对已签入的代码进行分享、讨论和审查代码

    Upsource 一.Upsource简介 Upsource ,这是一个专门为软件开发团队所设计的源代码协作工具.Upsource能够与多种版本控制工具进行集成,包括Git.Mercurial.Sub ...

  5. 基于nodejs的websocket通信程序设计

    网络程序设计无疑是nodejs + html最好用 一.nodejs的安装 1.在ubuntu上的安装 sudo apt install nodejs-legacy sudo apt install ...

  6. 注释的HALCON的程序

    *关闭窗口 dev_close_window () dev_close_window () *打开指定大小.颜色背景的窗口 dev_open_window (0, 0, 768/2, 576/2, ' ...

  7. AtCoder Regular Contest 080 E - Young Maids

    地址:http://arc080.contest.atcoder.jp/tasks/arc080_c 题目: E - Young Maids Time limit : 2sec / Memory li ...

  8. Spring-1-H Number Sequence(HDU 5014)解题报告及测试数据

    Number Sequence Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Pro ...

  9. 大数据相关的面试题(摘自网络)hbase,kafka,spark

    1.讲讲你做的过的项目, 项目里有哪些难点重点呢?    kafkaDirect ES  /hive  kafka producer   难点值得一提的有两点:  1.rdd中用到外部变量的时候如何处 ...

  10. unity手势插件《FingerGestures 》使用入门

    什么是FingerGestures? FingerGestures是Unity上,非常热门的一款用于处理用户输入的插件 为什么要使用FingerGestures? 1:它统一了鼠标点击和用户触摸的输入 ...