文章插图
文章插图
typedef struct {SCRIPTDATAVALUE Name;SCRIPTDATAVALUE Value;}ScriptTagBody;
3.3.2 SCRIPTDATAVALUE
一个 SCRIPTDATAVALUE 记录包含一个特定类型的 ActionScript 值 。
SCRIPTDATAVALUE 定义如下:
文章插图
文章插图
文章插图
文章插图
SCRIPTDATAVALUE 的两个字段,Type 是类型,ScriptDataValue 是值 。Type 的值确定 ScriptDataValue 的类型 。因为 ScriptDataValue 的类型是动态的,由运行时解析得到的 Type 的值确定,所以这里类型和值用了两个字段 。如果是静态类型,显然只用一个字段就可以了 。
typedef struct {UI8 Type; IF Type == 0DOUBLE ScriptDataValue; IF Type == 1UI8 ScriptDataValue; IF Type == 2SCRIPTDATASTRING ScriptDataValue; IF Type == 3SCRIPTDATAOBJECT ScriptDataValue; IF Type == 7UI16 ScriptDataValue; IF Type == 8SCRIPTDATAECMAARRAY ScriptDataValue; IF Type == 10SCRIPTDATASTRICTARRAY ScriptDataValue; IF Type == 11SCRIPTDATADATE ScriptDataValue; IF Type == 12SCRIPTDATALONGSTRING ScriptDataValue;}SCRIPTDATAVALUE;
3.3.1 节中 Name 字段和 Value 字段的类型都是SCRIPTDATAVALUE 。Name 表示方法名,实际类型通常是SCRIPTDATASTRING 。Value 字段表示方法的一组参数,实际类型通常是SCRIPTDATAECMAARRAY 。后文将介绍 SCRIPTDATASTRING 和 SCRIPTDATAECMAARRAY 两种类型 。其他类型略,详情可参考 FLV 规范文档 。
3.3.3 SCRIPTDATASTRING
SCRIPTDATASTRING 和 SCRIPTDATALONGSTRING 两种类型用于存储字符串,二者可存储字符串长度不同,SCRIPTDATASTRING 用于存储不超过 65535 个字符的字符串 。
SCRIPTDATASTRING 定义如下:
文章插图
文章插图
typedef struct {UI16 StringLength;STRING StringData;}SCRIPTDATASTRING;
3.3.4 SCRIPTDATAECMAARRAY
SCRIPTDATAECMAARRAY 记录存储 ECMA 数组(下表中的 Variables 字段) 。ECMA 数组是一个关联数组,应在 ActionScript 数组包含无序索引时使用 。所有索引(无序或有序)都是字符串而不是整数 。出于序列化的目的,SCRIPTDATAECMAARRAY 类型与匿名 ActionScript 对象非常相似 。
SCRIPTDATAECMAARRAY 定义如下:
文章插图
文章插图
typedef struct {UI32 ECMAArrayLength;SCRIPTDATAOBJECTPROPERTY[] Variables;SCRIPTDATAOBJECTEND ListTerminator;}SCRIPTDATAECMAARRAY;
其中,SCRIPTDATAOBJECTPROPERTY 类型定义了 ActionScript 对象或关联数组变量的对象属性 。
SCRIPTDATAOBJECTPROPERTY 定义如下:
文章插图
文章插图
typedef struct {SCRIPTDATASTRING PropertyName;SCRIPTDATAVALUE PropertyData;}SCRIPTDATAOBJECTPROPERTY;
3.3.5 实例:onMetaData 对象
FLV 元数据对象应在名为 onMetadata 的 SCRIPTDATA 标签中携带 。各种属性对通过 NetStream.onMetaData 属性运行的 ActionScript 程序有效 。可用的属性根据创建 FLV 文件的软件而有所不同 。典型属性包括:
文章插图
文章插图
onMetaData 标签通常会成为 FLV Body 中的第一个标签,紧跟在 FLV Header 之后 。onMetaData 标签中存储的是一些视频、音频及文件相关的元数据信息:如视频帧率,音频采样率、文件长度等 。
结合 3.3.1 节,onMetaData 标签的 Name 字段主要就是存储 “onMetaData” 字符串 。具体为:第 1 个字节值是 0x02,表示 Name 字段是字符串类型 。第 2-3 个字节为 UI16 类型值,标识字符串的长度,值为 0x000A (“onMetaData” 这个字符串的长度) 。后面跟着的数据为具体的字符串,值为 “onMetaData” 。
onMetaData 标签的 Value 字段存储上表所示的各属性键值对 。具体为:第 1 个字节值是 0x08,表示 Value 字段是数组类型 。第 2-5 个字节为UI32类型值,表示数组元素个数 。后面紧跟着数组,数组元素为属性名称和值组成的对(键值对) 。最后是数组的结束符 。
推荐阅读
- 阿达帕林凝胶怎么样 阿达帕林凝胶干嘛用的
- 手机自带翻译功能怎么用 手机自带的翻译功能
- 桃花有几种颜色及作用 桃花有几种颜色及作用
- 家用燃气多少钱一立方 燃气1立方多少钱,1立方能用多久?
- 如何用微信赚钱 方法 如何用微信赚钱
- 电热炕的使用方法 电热炕的使用方法和注意事项
- 烤箱做酥饼的家庭做法 用烤箱做酥饼的家常做法
- 作文提纲例子格式 小学六年级怎样写作文提纲
- 鸵鸟油的用途及用法视频 鸵鸟油的用途及用法
- 北京摇号可以用电子居住证吗 北京摇号电子居住证可以吗?