flv格式用什么打開 打開flv格式的播放器( 三 )


flv格式用什么打開 打開flv格式的播放器

文章插圖
flv格式用什么打開 打開flv格式的播放器

文章插圖
typedef struct {SCRIPTDATAVALUE Name;SCRIPTDATAVALUE Value;}ScriptTagBody;
3.3.2 SCRIPTDATAVALUE
一個 SCRIPTDATAVALUE 記錄包含一個特定類型的 ActionScript 值 。
SCRIPTDATAVALUE 定義如下:
flv格式用什么打開 打開flv格式的播放器

文章插圖
flv格式用什么打開 打開flv格式的播放器

文章插圖

flv格式用什么打開 打開flv格式的播放器

文章插圖
flv格式用什么打開 打開flv格式的播放器

文章插圖
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 定義如下:
flv格式用什么打開 打開flv格式的播放器

文章插圖
flv格式用什么打開 打開flv格式的播放器

文章插圖
typedef struct {UI16 StringLength;STRING StringData;}SCRIPTDATASTRING;
3.3.4 SCRIPTDATAECMAARRAY
SCRIPTDATAECMAARRAY 記錄存儲 ECMA 數組(下表中的 Variables 字段) 。ECMA 數組是一個關聯數組,應在 ActionScript 數組包含無序索引時使用 。所有索引(無序或有序)都是字符串而不是整數 。出于序列化的目的,SCRIPTDATAECMAARRAY 類型與匿名 ActionScript 對象非常相似 。
SCRIPTDATAECMAARRAY 定義如下:
flv格式用什么打開 打開flv格式的播放器

文章插圖
flv格式用什么打開 打開flv格式的播放器

文章插圖
typedef struct {UI32 ECMAArrayLength;SCRIPTDATAOBJECTPROPERTY[] Variables;SCRIPTDATAOBJECTEND ListTerminator;}SCRIPTDATAECMAARRAY;
其中,SCRIPTDATAOBJECTPROPERTY 類型定義了 ActionScript 對象或關聯數組變量的對象屬性 。
SCRIPTDATAOBJECTPROPERTY 定義如下:
flv格式用什么打開 打開flv格式的播放器

文章插圖
flv格式用什么打開 打開flv格式的播放器

文章插圖
typedef struct {SCRIPTDATASTRING PropertyName;SCRIPTDATAVALUE PropertyData;}SCRIPTDATAOBJECTPROPERTY;
3.3.5 實例:onMetaData 對象
FLV 元數據對象應在名為 onMetadata 的 SCRIPTDATA 標簽中攜帶 。各種屬性對通過 NetStream.onMetaData 屬性運行的 ActionScript 程序有效 。可用的屬性根據創建 FLV 文件的軟件而有所不同 。典型屬性包括:
flv格式用什么打開 打開flv格式的播放器

文章插圖
flv格式用什么打開 打開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類型值,表示數組元素個數 。后面緊跟著數組,數組元素為屬性名稱和值組成的對(鍵值對) 。最后是數組的結束符 。

推薦閱讀