CMP4 API使用说明
基本介绍::

1,api就是应用程序接口,cmp的api用来提供给外部插件或页面javascript脚本调用,以便达到对cmp进行控制的目的

2,通过api,可以读取或设置cmp的相关属性,可以调用方法对其进行控制,可以绑定事件进行侦听等等

3,支持api的地方:

(1),插件plugins和背景backgrounds

(2),皮肤中的5个窗口背景src

(3),自定义混音器mixer_src

(4),单个音乐的视频区背景bg_video和歌词区背景bg_lrc

(5),页面javascript脚本(基本支持)

4,flash的脚本必须为actionscript 3版本,javascript调用时必须允许脚本通讯(allowScriptAccess="always")

调试例子见:CMP4 API调试页
CMP4框架示意图和皮肤架构见:附录
Actionscript 3 api:
基本例子:
var api:Object;
//cmp的api是通过对共享事件sharedEvents的侦听,由共享事件的data传递的
root.loaderInfo.sharedEvents.addEventListener('api', apiHandler);
root.loaderInfo.sharedEvents.addEventListener('api_remove', removeHandler);
function apiHandler(e):void {
//取得cmp的api对象和侦听key,包含2个属性{api,key}
var apikey:Object = e.data;
if (! apikey) {
return;
}
api = apikey.api;
//侦听皮肤加载完成事件
api.addEventListener(apikey.key, 'skin_loaded', skinHandler);
}
function removeHandler(e):void {
//移除后进行一些清理
}
function skinHandler(e):void {
trace("from api:" + api.config.skin_id);
}
属性attributes:
cmp:Object; 返回cmp对象
config:Object; 取得cmp全局配置
item:Object; 取得当前播放项
list_xml:XML; 取得列表xml的引用
skin_xml:XMLList; 取得当前皮肤配置的引用
tools:Object; 返回cmp的工具箱,主要有:base64, effects, graphics, netclient, output, states, strings, types, zoom, zip
win_list:Object;

取得5个窗口的引用,有如下5个属性: option/list/media/console/lrc

当然还可以访问下一级对象,如要访问播放按钮bt_play则可:

var bt_play = api.win_list.console.bt_play;

结构和名称同皮肤包里面的skin.xml皮肤配置的结构和名称

方法methods:
addEventListener():void;

添加一个事件侦听器,如侦听皮肤加载完成事件:

api.addEventListener(api.key, 'skin_loaded', skinHandler);

特别不同,这里第一个参数需传入api.key,它是一个唯一key值,用于第三方flash移除时,销毁其key所在所有注册的事件

removeEventListener():void; 移除一个事件侦听器,如:api.removeEventListener('skin_loaded', skinHandler);
sendEvent():void;

发送一个事件,如:api.sendEvent("view_play");

如果有参数data要传递就是:api.sendEvent("view_play", data);

cookie():String 读取(cookie("name"))和写入(cookie("name", "data"))本地存储,类似于浏览器cookie,但无时间过期限制
toString():String; 打印api所有属性,方法,事件类型,方便查阅所有支持的api
事件类型events:按字母顺序
api事件:
api 发送api共享事件时调度
api_remove api插件移除时调用
配置事件:
config_loaded 配置文件加载完成时调度
控制端事件:
control_fullscreen 全屏状态改变时调度
control_link 打开链接页面时调度
control_load 音乐开始加载时调度
control_max 最大化改变时调度,事件的data将传递是lrc_max还是video_max
control_mute 静音状态改变时调度
control_next 播放下一个时调度
control_pause 暂停时调度
control_play 播放时调度
control_playmode 播放模式改变时调度
control_prev 播放上一个时调度
control_progress 进度改变时调度
control_stop 停止时调度
control_volume 音量改变时调度
control_win 窗口打开关闭时调度
control_winbt 窗口对应按钮状态改变时调度
列表项事件:
item_deleted

列表项删除时调度

事件的data将返回删除项对象

list列表事件:
list_change 列表已经改变时调度,表示新的列表已经刷新,可用于播放等操作
list_load

使列表开始加载时调度

事件的data可以传入新指定的配置lists进行加载

list_loaded

列表内容加载完时调度,多个列表会调度多个,每次会将加载的列表数据进行解析,然后附加到总列表,再刷新列表

事件的data可以传入新指定的xml列表内容字符进行解析,此功能便于外载调用,直接输入列表内容

lrc歌词事件:
lrc_complete

歌词成功加载完成时调度

事件data返回当前加载成功的歌词类型:lrc或kmc

lrc_error

歌词加载或解析错误时调度

事件data将返回错误信息

lrc_load

使当前音乐的歌词开始加载时调度

事件data可以传入指定当前音乐的歌词地址,支持lrc和kmc地址

lrc_loaded

歌词加载完成时调度

事件data可以传入指定的歌词内容,支持lrc和kmc格式内容

lrc_max 对歌词最大化状态进行切换
lrc_resize 歌词尺寸改变时调度,包括对歌词进行缩放调整
声音频谱事件:
mixer_color

对混音器颜色进行随便变更时调度

事件data可以传入新的颜色值

mixer_displace

对混音器的置换效果状态进行切换时调度

事件data可传入true或false

mixer_filter

对混音器的滤镜效果状态进行切换时调度

事件data可传入true或false

mixer_next

使用下一个混音器效果时调度

事件data可以传入下一个频谱效果的id

mixer_prev

使用上一个混音器效果时调度

事件data可以传入下一个频谱效果的id

播放模块事件:
model_change

模块改变时调度

事件data可以传入要使用的新模块类型type

model_error

当前项发生错误时调度

事件data将返回错误信息

model_load

模块开始加载时调度

事件data可以传入即将要播放媒体url

model_loaded 当前项下载完成时调度
model_loading 当前项正在下载时调度
model_meta

当前项取得meta信息时调度

事件data将返回meta数据对象

model_start 当前项播放开始时调度
model_state 当前项状态改变时调度
model_time 当前项播放时间改变时调度
plugin插件事件:
plugins_load

插件和背景开始加载时调度

事件data可传入新指定的配置plugins(不支持backgrounds)进行加载

plugins_remove 插件和背景移除时调度
初始化和改变大小事件:
ready CMP准备好进行初始化时调度
resize 播放器改变尺寸时调度
skin皮肤事件:
skin_change

针对皮肤id对皮肤进行改变时调度

事件data可以直接传入新的皮肤id

skin_complete 皮肤显示完成时调度
skin_load

皮肤开始加载时调度

事件data可以传入新指定的配置skins参数进行加载

skin_loaded 皮肤加载完成时调度
video视频事件:
video_blackwhite

对视频是否启用黑白效果滤镜

事件data可传入true或false

video_highlight

对视频是否启用高亮效果滤镜

事件data可传入true或false

video_effect

对视频进行颜色滤镜(ColorMatrixFilter)改变时调度

事件data可以传入一个英文逗号隔开的数组值,用来新建颜色矩阵滤镜ColorMatrixFilter

video_max 对视频最大化进行切换时调度
video_rotation

对视频进行旋转时调度

事件data可以传入旋转的角度值,如90

video_scalemode

对视频进行缩放模式改变时调度

事件data可以传入支持缩放模式的id,支持0,1,2,3

video_resize 视频尺寸改变时调度
video_smoothing

对视频是否启用平滑效果时调度

事件data可以传入true或false

view视图事件:
view_console 对控制窗口状态进行改变时调度
view_fullscreen 对全屏状态进行改变时调度
view_item

对播放项进行改变时调度

view_link

点击链接按钮时调度

事件data可以传入新指定的链接进行打开

view_list 对列表窗口进行改变时调度
view_lrc 对歌词窗口进行改变时调度
view_mute 点击静音按钮时调度
view_next 点击下一个按钮时调度
view_option 对设置窗口进行改变时调度
view_play

点击播放或暂停按钮时调度

事件的data可以传递列表id位置,表示播放第几个

view_prev 点击上一个按钮时调度
view_progress

拖动播放进度条时调度

事件data可以传入指定的进度百分值

view_random 点击随机播放模式按钮时调度
view_repeat 点击重复播放模式按钮时调度
view_single 点击单遍播放模式按钮时播放
view_stop 点击停止按钮时调度
view_video 对视频窗口状态进行改变时调度
view_volume

拖动音量条时调度

事件data可以传入指定的volume音量值和panning平移值,用英文逗号隔开,如:1,0

Javascript api:
JS调用前提和基本例子:
//定义cmpo,即页面中cmp所在flash object的引用
var cmpo;
//一般可以直接可以通过document.getElementById("cmp")的方法获取,问题是如果页面的cmp还未载人完成将无法得到,所以推荐使用下面的方法
//先给cmp设置页面脚本回调函数名,通过api参数传递,cmp加载完成时将自动调用此函数
CMP.write("cmp", "800", "450", "cmp.swf", "api=cmp_loaded");
function cmp_loaded(key) {
cmpo = CMP.get("cmp");
if (! cmpo) {
return;
}
//侦听列表项删除事件
cmpo.addEventListener("item_deleted", "del");
}
function del(obj) {
}
//其中CMP为页面flash载人类,见cmp.js
//获取cmpo对象后,我们就可以调用下面所有支持的方法了
Javascript调用方法:
方法名 说明 例子
cmp_api();

只读,返回CMP所有支持的API信息

同flash里面api的toString();方法,这里包括flash支持的所以API,js只需查看事件类型部分

var str = cmpo.cmp_api();
config(); 1,读取CMP当前所有的全局配置,返回一个Object对象(包含所有配置属性设置) var config = cmpo.config();

2,读取配置的某个属性值

当然可以先用上面1中的方法读取整个配置对象,再取得其中某个属性的值

var skin_id = cmpo.config("skin_id");

var skin_id = cmpo.config().skin_id;

3,修改某个属性的值,需传入属性名称和值

注意:修改属性仅是将值写入配置中,需要下次有相关的刷新(如发送事件)才应用新的值

cmpo.config("skin_id", "1");
item(); 1,返回当前播放项的一个Object对象,如果没有开始任何播放,将返回null var item = cmpo.item();
2,返回当前播放项的某个属性值,方法同上config()

var src = cmpo.item("src");

var src = cmpo.item().src;

3,修改某个属性的值,方法同上config() cmpo.item("src", "test.mp3");
list_xml(); 1,读取CMP当前列表内容,返回一个xml的字符串 var xml = cmpo.list_xml();
2,修改列表内容,需传入一个xml列表格式的字符串

var xml = '<list><m label="test" src="test.mp3" /></list>';

cmpo.list_xml(xml);

默认将往列表附加传入的列表信息,如果需要覆盖原有的音乐可以设置第2个参数

表示是否附加到原有列表后面,默认为true表示附加,传入false表示不附加,将写入新的列表内容

cmpo.list_xml(xml, false);
list();

1,返回CMP列表数的所有信息,包括未打开的列表

将返回一个数组,数组每项都是一个音乐项对象,类型为Object

var arr = cmpo.list();
读取一级列表的个数 var num = cmpo.list().length;
返回第二个项,数组是从0开始的,第二个项索引就是1 var m2 = cmpo.list()[1];

如果这个音乐项是个目录,则会有children属性,表示它下面的子列表,也是一个数组

以此类推,这样我们可以逐个循环得到整个列表
当然音乐项也有parent属性,表示其父目录对象

var m2_arr = m2.children;

2,返回某个指定的项对象

参数可以是包含唯一key值Object型的项对象,也可以直接传入字符型key值

key值可以从上面1中的列表项对象中读取

var item = cmpo.list(m2);

var item = cmpo.list("ITEM_1");

3,读取项的某个属性 var src = cmpo.list("ITEM_1", "src");

如果传入的参数是项支持的一个方法名,则执行此项的某个方法

目前支持:play播放此项, open打开此目录, close关闭此目录, toggle开关切换, remove移除此项

cmpo.list("ITEM_1", "play");
skin_xml(); 只读,返回当前皮肤配置文件内容的xml字符形式 var xml = cmpo.skin_xml();
skin(); 1,读取皮肤元件的某个属性值,第1个参数表示皮肤元件位置,第2个是元件属性名

var width = cmpo.skin("console", "width");

var xywh = cmpo.skin("console.bt_play", "xywh");

2,修改元件的某个属性,如果修改成功将返回true cmpo.skin("console.bt_play", "xywh", "0, 0, 100, 20");
sendEvent();

往CMP发送事件

第1个参数是事件类型,所有支持类型见上面cmp支持的所有事件类型列表

第2个参数是需要传入的数据(可选)

cmpo.sendEvent("view_play");

cmpo.sendEvent("view_play", 2);

addEventListener();

添加一个js侦听方法

第1个参数是事件类型,同上

第2个参数是回调函数名,字符串格式

cmpo.addEventListener("item_deleted", "del");

function del(data) { }

removeEventListener(); 移除一个已经注册的js侦听方法 cmpo.removeEventListener("item_deleted", "del");
cookie(); CMP的通用存储接口,可以从本地电脑读取和存储数据

var data = cmpo.cookie("name");

cmpo.cookie("name", "data");

附录:
CMP4框架示意图: 直接打开图片地址
CMP4皮肤架构:
  • skin  根节点
    • option 设置窗口
      • pane  设置面板区域
      • scrollbar  设置面板的滚动条
      • bt_close  设置窗口的关闭按钮
    • list  列表窗口
      • tree  列表树区域
      • search  列表搜索框
      • scrollbar  列表树的滚动条
      • icons  列表树的图标
      • bt_close  列表窗口关闭按钮
    • lrc  歌词窗口
      • text  歌词文本区域
      • kmc  卡拉ok歌词设置,如果没有则使用text中的设置
      • bt_close  歌词窗口关闭按钮
    • media  媒体窗口
      • video  视频和频谱效果区域
      • bt_close  媒体窗口关闭按钮
    • console  控制窗口
      • bt_play  播放和暂停按钮
      • bt_stop  停止按钮
      • bt_prev  上一个按钮
      • bt_next  下一个按钮
      • bt_random  随机播放按钮
      • bt_repeat  重复播放按钮
      • bt_single  单遍播放按钮
      • bt_mute  静音按钮
      • volume  音量控制条
      • progress  播放进度条
      • bt_list  列表窗口开关按钮
      • bt_video  媒体窗口开关按钮
      • bt_lrc  歌词窗口开关按钮
      • bt_option  设置窗口开关按钮
      • bt_fullscreen  全屏切换按钮
      • bt_link  链接按钮
      • title  当前播放标题
      • status  当前播放状态
      • time  当前播放时间,包括总时间
      • time_position  当前时间
      • time_duration  总时间
      • number  当前播放的数字时间,可显示倒计时
      • bt_close  控制窗口关闭按钮(一般不用)
    • languages  语言设置