标题：cmp播放器
CMP简介
CMP是一款免费的在线Flash音乐播放器，全称为CenFun Music Player，简称为"CMP"。
CMP致力于提供最佳在线音乐播放解决方案，支持的音频视频格式主要有MP3,FLV,MP4,并可以通过网页JS接口实现WMP(Windows Media Player)所支持的格式播放，如wma等。主要功能特色有列表式播放(自定义音乐专辑和列表)，MP3可视化效果(声音频谱)，同步歌词（默认支持lrc歌词以及kmc卡拉ok歌词），高清视频和在线直播(h264/rtmp)，自定义皮肤，加载各种插件等等，CMP4支持API的调用，可让用户实现更多自定义功能。
为什么在web环境中采用基于flash的播放器优于wmp？因为wmp是IE+Windows Only，很显然这已经不再符合现在的网络发展趋势。而flash具有很强的跨平台能力，基本支持所有PC操作系统(win/linux/mac)和浏览器(IE/FireFox/Chrome/Opera/Safari等)，这样才能使你网站的播放器具有更广泛的兼容性。当前，flash已经是使用最多的网络媒体播放软件，而且除了PC系统，flash已经开始全面支持android手机系统，所以web环境中(BS)采用基于flash的播放器无疑是最佳选择。
CMP为纯绿色软件，不含有任何广告，后门，弹出，限制等之类的东西
CMP完全运行环境仅静态空间即可，完全运行于客户端，由flash/xml/html/js/文本和图片组成
CMP有强大的自定义参数能力，可以很方便的实现完全动态数据支持，服务端不限(asp/php/.net/jsp等)
CMP为免费软件，无需任何使用费用
CMP1.1(2005) -> CMP2.0(2006) -> CMP2.1(2007) -> CMP3(2008) -> CMP4(2009)
CMP基础文档
全局配置Config.xmlCMP基于flash开发，同所有flash一样，参数有以下两个来源：
URL中的查询字符串：cmp.swf?parameter_name=parameter_value
HTML的FlashVars参数值：<param name="flashvars" value="parameter_name=parameter_value" />
CMP所有参数都可以从以上2种方式传入，URL传参可以很方便用于单曲播放，
而用flashvars可以结合浏览器缓存最大化的优化网络。
尽管以上方式可以传入所有参数，但如果太多的话就会很杂，
不宜管理，还有转义问题，URL长度限制问题(IE限2083长度)等
所以，CMP还支持通过加载一个XML配置文件来读取参数的方式，
实际上就是将需要的参数打包到这个配置文件中，然后进行加载解析：
加载一个XML配置文件默认配置文件为config.xml，也可以用url参数自定义：cmp.swf?url=myconfig.xml
更多config.xml配置详见参考资料。
自定义配置路径相关参数
config配置内容参数，cmp.swf?config=配置内容，也就是将配置的xml内容以一个字符串传入
url自定义完整配置路径，默认值为config.xml，如cmp.swf?url=config.asp
idid标识的快捷配置路径方式，如cmp.swf?id=1，则自动加载1.xml的文件作为配置
asp服务端为asp程序的快捷配置路径方式，如cmp.swf?asp=1，将加载cmp.asp?id=1为配置
aspx服务端为aspx程序的快捷配置路径方式，如cmp.swf?aspx=1，将加载cmp.aspx?id=1为配置
php服务端为php程序的快捷配置路径方式，如cmp.swf?php=1，将加载cmp.php?id=1为配置
jsp服务端为jsp程序的快捷配置路径方式，如cmp.swf?jsp=1，将加载cmp.jsp?id=1为配置
cgi服务端为cgi程序的快捷配置路径方式，如cmp.swf?cgi=1，将加载cmp.cgi?id=1为配置
各种方式优先级和使用范围，见上文的CMP4获取配置的各种方法，跨域加载配置文件时，需跨域策略文件crossdomain.xml支持
基本信息
name自定义播放器的名称，默认为当前CMP版本值
link右键中点击名称打开的链接，默认为CMP论坛地址
link_target链接是在当前窗口(默认_self)还是新窗口(_blank)打开
description描述，无歌词时显示，默认为空
logo加载logo图标的地址，默认为空，支持AS3 API
支持多个和多属性定义，如居右下角显示：logo="{src:logo.png,xywh:[10R,10R,0,0]}"
logo_alphalogo全局透明度，默认0.2
如果在受限页面中，将无法打开链接，或者被浏览器拦截
皮肤相关
skins预加载皮肤的地址列表，可设置多个，逗号隔开，如skins="default.zip,wmp11.zip"
提示：如果皮肤路径格式都正确，但加载错误，可能是因为空间对zip文件的限制访问导致，可尝试将后缀改为swf等
skin_id当前需要使用皮肤的id序号，默认值为1，如果没有设置以上skins皮肤列表，则加载默认皮肤，此时skin_id为0
skin单个皮肤地址快捷设置，它将自动附加到上面skins设置的前面，并强制skin_id为1
很多空间存在.zip后缀文件无权读取的问题，可尝试修改皮肤后缀为swf或jpg解决，如skin="default.swf"
插件和背景
plugins_disabled是否禁用加载所有插件，默认为0不禁用
bgcolor播放器所在flash背景颜色，默认为空
plugins插件地址列表，支持多个，支持多属性自定义
plugin附加插件地址，将自动添加到plugins参数前面
backgrounds背景地址列表，支持多个，支持多属性自定义
background附加背景地址，将自动添加到backgrounds参数前面
插件相关格式说明
播放列表相关
lists列表文件地址，默认为list.xml，可设置多个，如"list1.xml,list2.xml,list3.xml"
跨域加载列表文件时，需跨域策略文件crossdomain.xml支持
list将一个列表xml的内容以一个字符串的方式传入
play_mode播放模式(控制窗口目前仅提供3个控制按钮，也就是重复按钮，随机按钮，单曲按钮)
"0"或"normal" 正常顺序播放模式，默认模式，即按列表顺序逐个播放
"1"或"repeat" 重复播放模式，即播放完成后再反复播放
"2"或"random" 随机播放模式，即从列表随机选择一个播放
"3"或"upward" 按列表向上播放模式，和正常顺序播放方向相反
"4"或"single" 单个播放模式，即单个播放完成后停止
play_id指定当前播放的列表id序号，默认为1，最后一个播放的id将被自动保留
auto_play是否开启自动播放，0：不开启（默认）， 1：开启
auto_open当下一个要播放的项是一个目录时，是否自动打开后进行播放，0：不进行自动打开（默认），1：开启自动打开
不支持临时外载的目录，也就是有list_src参数的列表项
click_play是否单击列表开始播放，默认为0，即需要双击才播放
click_next双击播放模式下，点击了播放项以外的另一项后，是否将此项作为下一个要播放的项，无视播放模式选择，默认为1，开启选择
default_type默认媒体的类型，默认为video，即无法识别媒体类型时，将使用视频模块去处理，如改为sound则默认为声音类型
list_delete是否在列表显示列表删除按钮(内存中删除)，默认0不显示，为1则可在列表每一行后显示一个删除按钮
全局代理程序
src_handler全局音乐地址代理，如：src_handler.php?vid={vid}
lrc_handler全局歌词地址代理，如：lrc_handler.php?title={label}&rd={rd}
bg_video全局视频背景设置
bg_lrc全局歌词背景设置
image_handler缩略图全局代理，需缩略图皮肤方可显示
text_handler描述全局代理，需缩略图皮肤方可显示
跨域加载歌词或描述时，需跨域策略文件crossdomain.xml支持
声音相关
volume当前音量，范围从 0（静音）至 1（最大音量） 默认0.8
panning声音平移参数，表示声道从左到右的平移，范围从 -1（左侧最大平移）至 1（右侧最大平移），默认值0表示没有平移（居中）
mute是否静音，默认为0不静音
sound_sample是否启用声音样本处理，默认不开启，开启后将耗费更多系统资源
开启取样处理，能实现在跨域播放mp3时显示频谱效果，同时支持均衡器参数设置
sound_eq声音样本均衡参数(必须启用sound_sample声音样本处理才有效)，默认为空，即不进行均衡过滤处理
长度为10个值，用逗号隔开，每个值为-12到12之间的数字，全部为0则也表示不启用
设置窗口相关
share_cmp设置中是否显示复制分享地址按钮
default_skin设置中是否显示默认皮肤项
skin_info设置中是否打开皮肤详细信息
share_urlCMP分享地址，默认按当前CMP主程序所在位置自动生成
share_htmlCMP分享代码，默认按share_url参数自动生成
设置相关
context_menu右键菜单选项，0为不显示，1为全部，其他为仅名称
context_menu还可以在皮肤配置中设置，优先级高
shortcuts是否启用默认快捷键，默认启用
show_meta如果有读取权限，是否显示媒体的meta信息，默认显示
counter图片形式的计数器地址，如counter=""
javascript网页环境运行的简单脚本，支持自动替换，如：javascript="alert('{key}');"
时间相关
timeout音乐连接超时的时间，默认15秒
buffer_time音乐需要缓冲的时间，默认5秒
forward_time每次快进快退时长，默认3秒，需快进快退按钮支持
最新版本已经不再支持buffer_next参数
全屏相关
fullscreen_max用来设置全屏后是否最大化视频或歌词，默认最大化视频，即fullscreen_max="video"
或者设置fullscreen_max="lrc" 设置其他值将不会执行任何最大化操作，仅进行全屏
fullscreen_scale用来设置全屏时进行硬件缩放的比例，值小于等于1，不能过小，将根据客户端显示器分辨率进行比例缩放
默认值为1，即不进行缩放，如设置为0.5，则会以全屏一半大小放大到全屏区域
以上两个参数都可以在皮肤中的bt_fullscreen按钮属性中进行设置，且优先级高
歌词相关
lrc_max是否最大化歌词区，默认不最大化
lrc_scale最大化时当前歌词的缩放倍数，默认为1
lrc_scalemode歌词区缩放模式，默认为1，详情见下面的视频缩放模式说明
lrc_image歌词区图片路径，预览图，一直显示，不同于歌词背景bg_lrc每次都更换
视频相关
video_max是否最大化视频区，默认不最大化
video_smoothing是否开启视频平滑处理，默认开启
video_blackwhite是否开启视频黑白处理，默认关闭
video_highlight是否开启视频高亮处理，默认关闭
video_scalemode视频缩放模式
1 在指定区域中可见，且不会发生扭曲，同时保持应用程序的原始高宽比，默认值
2 在指定区域中可见，但不尝试保持原始高宽比。可能会发生扭曲，应用程序可能会拉伸或压缩显示
3 指定整个应用程序填满指定区域，不会发生扭曲，但有可能会进行一些裁切，同时保持应用程序的原始高宽比
0 不进行缩放，即使在更改播放器窗口大小时，它仍然保持不变
video_image视频区图片路径，预览图，一直显示，不同于视频背景bg_video每次都更换
频谱相关
mixer_src用来加载外部声音频谱器插件，默认不加载，即使用系统自带10种声音频谱效果
mixer_id系统声音频谱器当前效果的id，默认为1，范围0-10，分别表示CMP4默认支持的10种效果和无效果
mixer_color设置声音频谱器颜色，默认为a4eb0c
mixer_displace是否开启图形置换效果，默认不开启
mixer_filter是否开启图形滤镜效果，默认不开启
仅MP3播放时显示频谱，且必须是安全沙盒内，最新CMP4还可以通过设置sound_sample开启取样来实现跨域显示频谱
单个音乐加载
src单曲地址，判断存在单曲必须的参数
label单曲名称
type单曲类型
lrc单曲歌词
更多单曲参数见列表中音乐项支持的参数媒体列表List.xmlCMP4的列表文件是一个XML格式的树结构文件，用来设置所有要播放的音乐信息
列表文件路径由配置文件的lists参数来指定，如果不指定，则默认为：lists="list.xml"
一个CMP4列表文件的例子:
<list>
<m type="" src="music" lrc="" label="1,MP3音乐测试" />
<m type="" src="music/test.flv" lrc="" label="2,FLV视频测试" />
<m type="3" src="music lrc="" label="3,WMP类型测试" />
<m type="" src="plugins/bigbg.swf" lrc="" scalemode="1" duration="10" label="4,Flash播放测试" />
<m type="" src="logo.png" lrc="" scalemode="1" duration="5" label="4,图片播放测试" />
<m list_src="list.xml" label="子列表" />
<m label="目录">
<m label="二级目录">
<m label="三级目录">
<m type="" src="music" lrc="" label="test" />
</m>
</m>
<m type="" src="music" lrc="" label="test" />
</m>
<m label="打开的目录" opened="1">
<m type="" src="music lrc="" label="test" />
</m>
</list>CMP4皮肤配置Skin.xmlCMP4加载完成皮肤包后，首先需要读取皮肤包中的配置文件，也就是skin.xml，指定名称，
不能使用其他的皮肤配置文件包含了所以皮肤元件的设置信息，
如果未设置则使用默认值或者不显示该元件.
皮肤基本机构元件：
skin 根节点
option 设置窗口
pane 设置面板区域
scrollbar 设置面板的滚动条
bt_close 设置窗口的关闭按钮
event 窗口事件，可以多个
list 列表窗口
tree 列表树区域
search 列表搜索框
scrollbar 列表树的滚动条
icons 列表树的图标
bt_close 列表窗口关闭按钮
event 窗口事件，可以多个
lrc 歌词窗口
text 歌词文本区域
kmc 卡拉ok歌词设置，如果没有则使用父节点text中的文本设置和kmc默认设置
bt_close 歌词窗口关闭按钮
event 窗口事件，可以多个
media 媒体窗口
video 视频和频谱效果区域
bt_close 媒体窗口关闭按钮
event 窗口事件，可以多个
console 控制窗口
bt_play 播放和暂停按钮
bt_stop 停止按钮
bt_prev 上一个按钮
bt_forward 快进按钮
bt_rewind 快退按钮
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 当前播放的数字时间，可显示倒计时
languages 语言设置
API接口
CMP4的API接口简介
API就是应用程序接口，CMP4的API用来提供给插件或页面脚本进行调用，以达到对CMP4进行控制的目的
通过API，可以读取或设置CMP4的相关属性，可以调用部分方法，可以绑定一些事件进行侦听等等
CMP4支持API的地方：
（1），全局配置中插件plugins和背景backgrounds，自定义频谱mixer_src，还包括logo，video_image，lrc_image
（2），皮肤中的5个窗口背景src
（3），列表项的视频区背景bg_video和歌词区背景bg_lrc
（4），JavaScript页面脚本（部分支持），必须允许脚本通讯（allowScriptAccess="always"）
其中Flash的脚本必须为ActionScript 3.0版本，所以API接口分以下两种情况进行讨论：ActionScript3 API通过AS3的API接口通讯，我们可以在插件或皮肤中，直接获取CMP数据并进行控制，
下面是所以支持的属性，方法，事件
属性attributes：
cmp:Object;返回cmp对象
config:Object;取得cmp全局配置，包含所有可读写的全局配置，以及其他一些配置的只读属性，比如当前播放状态state，具体有哪些可用for in语句查询
item:Object;取得当前播放项，包含所有列表项属性，以及其他一些播放项的只读属性，具体有哪些可用for in语句查询
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所在所有注册的事件
addProxy():void;
添加一个代理函数，用于src="proxy:函数名,函数参数"这样的协议，如：
api.addProxy("youku", yk_callback);
这样就可以用自定义的yk_callback(函数参数)方法来解析协议：src="proxy:youku,函数参数"
cookie():String读取(cookie("name"))和写入(cookie("name", "data"))本地存储，类似于浏览器cookie，但无时间过期限制
removeEventListener():void;移除一个事件侦听器，如：api.removeEventListener('skin_loaded', skinHandler);
sendEvent():void;
发送一个事件，如：api.sendEvent("view_play");
如果有参数data要传递就是：api.sendEvent("view_play", data);
sendState():void;
发送一个新的播放状态，如将播放状态改为正连接：
api.sendState("connecting");
toString():String;打印api所有属性，方法，事件类型，方便查阅所有支持的api
事件类型events：按字母顺序
api发送api共享事件时调度
api_removeapi插件移除时调用
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_change列表已经改变时调度，表示新的列表已经刷新，可用于播放等操作
list_load
使列表开始加载时调度
事件的data可以传入新指定的配置lists进行加载
list_loaded
列表内容加载完时调度，多个列表会调度多个，每次会将加载的列表数据进行解析，然后附加到总列表，再刷新列表
事件的data可以传入新指定的xml列表内容字符进行解析，此功能便于外载调用，直接输入列表内容
lrc_complete
歌词成功加载完成时调度
事件data返回当前加载成功的歌词类型：lrc或kmc
lrc_error
歌词加载或解析错误时调度
事件data将返回错误信息
lrc_load
使当前音乐的歌词开始加载时调度
事件data可以传入指定当前音乐的歌词地址，支持lrc和kmc地址
lrc_loaded
歌词加载完成时调度
事件data可以传入指定的歌词内容，支持lrc和kmc格式内容
lrc_max对歌词最大化状态进行切换
lrc_resize歌词尺寸改变时调度，包括对歌词进行缩放调整
lrc_rowchange
当前歌词行内容改变时调度，仅支持lrc和kmc格式
事件data将传递返回当前行的歌词内容
有了这个事件可以很方便的调用js api在浏览器标题栏或状态栏打印当前位置的歌词
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
当前项状态改变时调度
事件data将返回当前状态，所有支持状态码为：
undefined 未定义
connecting 连接中
buffering 缓冲
playing 正在播放
paused 已暂停
stopped 已停止
completed 播放完成
reconnecting 重试连接
状态改变时，将在皮肤的状态栏显示当前状态对应的说明，说明可以在皮肤配置的languages多语言里自定义
model_time当前项播放时间改变时调度
plugins_load
插件和背景开始加载时调度
事件data可传入新指定的配置plugins(不支持backgrounds)进行加载
plugins_loadedplugins参数指定的插件全部加载完成时调度(此时将第一次加载列表lists指定的文件)
plugins_remove插件和背景移除时调度
resize播放器舞台改变尺寸时调度
skin_change
针对皮肤id对皮肤进行改变时调度
事件data可以直接传入新的皮肤id
skin_complete皮肤显示完成时调度
skin_load
皮肤开始加载时调度
事件data可以传入新指定的配置skins参数进行加载
skin_loaded皮肤加载完成时调度
video_blackwhite
对视频是否启用黑白效果滤镜
事件data可传入true或false
video_effect
对视频进行颜色滤镜(ColorMatrixFilter)改变时调度
事件data可以传入一个英文逗号隔开的数组值，用来新建颜色矩阵滤镜ColorMatrixFilter
video_highlight
对视频是否启用高亮效果滤镜
事件data可传入true或false
video_max对视频最大化进行切换时调度
video_resize视频尺寸改变时调度
video_rotation
对视频进行旋转时调度
事件data可以传入旋转的角度值，如90
video_scalemode
对视频进行缩放模式改变时调度
事件data可以传入支持缩放模式的id，支持0,1,2,3
video_smoothing
对视频是否启用平滑效果时调度
事件data可以传入true或false
view_console对控制窗口状态进行改变时调度
view_forward点击快进按钮时调度
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_rewind点击快退按钮时调度
view_single点击单遍播放模式按钮时播放
view_stop点击停止按钮时调度
view_video对视频窗口状态进行改变时调度
view_volume
拖动音量条时调度
事件data可以传入指定的volume音量值和panning平移值，用英文逗号隔开，如：1,0
具体API接口应用的例子可以见安装包的示例：plugins/ApiExample .as 或者直接到官方插件库查看，
全部附源文件：JavaScript API下列函数的调用，需要先获取CMP所在flash的对象，也就是例子中的cmpo，获取方法见使用范例
cmp_api();只读，返回CMP所有支持的API信息，包括CMP支持的所以APIvar str = cmpo.cmp_api();
config();1，读取CMP当前所有的全局配置，返回一个Object对象，包含所有可读写的全局配置属性设置，以及其他一些只读属性var config = cmpo.config();
2，读取配置的某个属性值，具体支持哪些属性，可用for in语句查询
var name = cmpo.config("name");
var name = cmpo.config().name;
3，修改某个属性的值，需传入属性名称和值
注意：修改属性仅是将值写入配置中，需要下次有相关的刷新（如发送事件）才应用新的值
cmpo.config("skin_id", "1");
item();1，返回当前播放项的一个Object对象，如果没有开始任何播放，将返回null，其包含当前项的所有属性var item = cmpo.item();
2，返回当前播放项的某个属性值，具体支持哪些属性，可用for in语句查询
var src = cmpo.item("src");
var src = cmpo.item().src;
3，修改某个属性的值(一般不用)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开始的，第二个项索引就是1var 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，修改元件的某个属性，如果修改成功将返回truecmpo.skin("console .bt_play", "xywh", "0, 0, 100, 20");
sendEvent();
往CMP发送事件
第1个参数是事件类型，所有支持类型见AS3中的所有事件类型列表
第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的通用存储接口，可以在本地电脑存储并读取已经存储的数据，flash需启用本地存储(默认是10K容量)，这些数据是永久储存的，而且跨浏览器
cmpo.cookie("name", "CMP4");
var name = cmpo.cookie("name");
使用范例
CMP4插入到页面：
CMP就是个flash，可以使用插入flash的通用方式嵌入到网页中。比如：直接使用html的object标签，或者使用流行的swfobject但是CMP4还有一些特殊功能和应用，为此提供了CMP专用嵌入脚本：cmp.js，以下就是一些CMP嵌入的例子直接在当前位置写入，最简方式：
<script type="text/javascript" src="/cmp.js"></script>
<script type="text/javascript">
CMP.write("cmp", "600", "400", "cmp.swf");
</script>在指定容器中插入，易于扩展：
<div id="player" style="width:600px;height:400px;"></div>
<script type="text/javascript" src="/cmp.js"></script>
<script type="text/javascript">
var htm = CMP.create("cmp", "100%", "100%", "cmp.swf");
document.getElementById("player").innerHTML = htm;
</script>插入的同时传递一些参数：
<div id="player" style="width:600px;height:400px;"></div>
<script type="text/javascript" src="/cmp.js"></script> 
<script type="text/javascript">
var flashvars= {name : "CMP4",
skin : "skins/vplayer.zip",
lists : "mylist.xml"};
var htm = CMP.create("cmp", "100%", "100%", "cmp.swf", flashvars);
document.getElementById("player").innerHTML = htm;
</script>
其中flashvars参数也支持字符串的形式(注意值需要URL转义)，如：
var flashvars = "name=CMP4&skin=skins/vplayer.zip&lists=mylist.xml";
支持页面JS脚本回调的更全面方式：
<div id="player" style="width:600px;height:400px;"></div>
<script type="text/javascript" src="/cmp.js"></script> 
<script type="text/javascript">
var cmpo;
function cmp_loaded(key) {cmpo = CMP.get("cmp");
if (cmpo) {document.title = cmpo.config("name");
cmpo.addEventListener("model_load", "cmp_model_load");}}
function cmp_model_load(data) {document.title = cmpo.item("label");}
var flashvars = {name : "CMP4",
skin : "skins/vplayer.zip",
lists : "mylist.xml",
api: "cmp_loaded"};
var htm = CMP.create("cmp", "100%", "100%", "cmp.swf", flashvars);
document.getElementById("player").innerHTML = htm;
</script>只有回调cmp_loaded函数然后获取CMP所在flash的cmpo对象后，才可以进行JavaScript API通讯