首先介绍一下应用背景,我们使用的很多浏览器都依赖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. 剑指Offer——数字在排序数组中出现的次数

    题目描述: 统计一个数字在排序数组中出现的次数. 分析: 二分变形.二分查找最左边和最右边k的位置,然后相减加一就是结果. 代码: class Solution { public: int GetNu ...

  2. 【c++】【常用函数】

    分割字符串:https://www.cnblogs.com/zealousness/p/9971709.html 字符串比较:https://www.cnblogs.com/zealousness/p ...

  3. nginx.conf常用配置解析

    一.全局配置 user username groupname 运行用户及用户组 worker_processes auto 启动进程,通常设置成和cpu数量相等的一个数值,默认为1.可以设置为auto ...

  4. print文档

    文档 def print(self, *args, sep=' ', end='\n', file=None): # known special case of print ""& ...

  5. 为CSDN博客添加打赏功能

    随着移动支付在国内的兴起,越来越多的付费内容越多如雨后春笋般的冒了出来.其中以<逻辑思维>.罗振宇.李笑来为主要代表作品和人物. 现在很多博客或者个人网站里面都有打赏功能,这算是对博主的劳 ...

  6. Zabbix3的离线安装

    背景与环境 由于实际情况需求,zabbix在局域网中进行部署,遇到许多问题,在此记录. 操作系统:CentOS 6.9(使用的最小安装) zabbix版本:zabbix-3.0.13(LTS) php ...

  7. Using RUNDLL32.exe to call a function within a dll

    Using RUNDLL32.exe to call a function within a dll        Rundll32 is a utility included with Window ...

  8. Miller_Rabbin大素数测试

    伪素数: 如果存在和n互素的正整数a满足a^(n-1)≡1(mod n),则n是基于a的伪素数. 是伪素数但不是素数的个数是非常非常少的,所以如果一个数是伪素数,那么他几乎是素数. Miller_Ra ...

  9. TOSCA自动化测试工具--TestSuite Components

    TestSuite Components 分了6块

  10. Web Servlet的体系架构

    Servlet为根接口,里面有5个方法,init() servlet初始化,将ServletConfig作为参数传入,service() 响应请求,destroy() 销毁servlet,getSer ...