Files
moeplayer/source/ckaction/act/script.as
T
2020-09-17 18:40:01 +08:00

679 lines
18 KiB
ActionScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package ckaction.act {
import flash.external.ExternalInterface;
import flash.net.URLRequest;
import flash.net.navigateToURL;
import flash.utils.ByteArray;
import flash.events.ErrorEvent;
//import ckaction.C.C;
public class script {
public static function formatTime(seconds: Number = 0, hourc: int = 0, hours: int = 0): Array { //格式化秒数为时分秒
//seconds = 3800;
var timeh: int = Math.floor(seconds / 3600),
timei = Math.floor(Math.floor(seconds % 3600) / 60),
timeI = Math.floor(seconds / 60),
times = Math.floor(Math.floor(seconds % 60));
if (hourc > 0) {
timeh += (hours - hourc + 1);
if (timeh < 0) {
timeh = 24 + timeh;
}
}
var array: Array = [
timeh < 10 ? "0" + timeh : timeh.toString(),
timei < 10 ? "0" + timei : timei.toString(),
timeI < 10 ? "0" + timeI : timeI.toString(),
times < 10 ? "0" + times : times.toString(),
seconds < 10 ? "0" + seconds : seconds.toString()
];
return array;
}
public static function formatInsertTime(str: String = "", total: Number = 0): Array {
//trace(str,total);
if (!str) {
return null;
}
var arr: Array = str.split(",");
var newArr: Array = [];
for (var i: int = 0; i < arr.length; i++) {
var s: String = arr[i].toString();
if (s.indexOf("%") > -1) {
newArr.push(total * Number(s.replace("%", "")) * 0.01);
} else {
newArr.push(Number(s));
}
}
//trace("jfuj",newArr);
return newArr;
}
public static function formatM3u8Definition(url: String, n: int = 0, tags: Array = null, name: Array = null): String {
var i: int = 0;
if (!name) {
return "";
}
if (tags.length > 0) {
var ti: int = 0;
for (i = 0; i < tags.length; i++) {
if (url.indexOf(tags[i]) > -1) {
ti = i;
break;
}
}
if (ti < name.length) {
return name[ti];
} else {
return name[name.length - 1];
}
} else {
if (n < name.length) {
return name[n];
} else {
return name[name.length - 1];
}
}
}
public static function getNowDate(b: Boolean = true): String { //获取当前时间
var nowDate: Date = new Date();
var month: int = nowDate.month + 1;
var date: int = nowDate.date;
var hours: int = nowDate.hours;
var minutes: int = nowDate.minutes;
var seconds: int = nowDate.seconds;
var tMonth: String = "",
tDate: String = "",
tHours: String = "",
tMinutes: String = "",
tSeconds: String = ""
tSeconds = (seconds < 10) ? "0" + seconds : seconds + "";
tMinutes = (minutes < 10) ? "0" + minutes : minutes + "";
tHours = (hours < 10) ? "0" + hours : hours + "";
tDate = (date < 10) ? "0" + date : date + "";
tMonth = (month < 10) ? "0" + month : month + "";
if (b) {
return tMonth + "/" + tDate + " " + tHours + ":" + tMinutes + ":" + tSeconds;
}
return nowDate.fullYear + tMonth + tDate + tHours + tMinutes + tSeconds;
}
public static function getFileExt(filepath: String = null): String { //判断后缀,和rtmp协议
if (filepath != "") {
if (filepath.substr(0, 7) == "rtmp://") {
return "rtmp";
}
if (filepath.indexOf("?") > -1) {
filepath = filepath.split("?")[0];
}
var pos: String = "." + filepath.replace(/.+\./, "");
return pos;
}
return "";
}
public static function arrSort(arr: Array): Array { //对二维数组进行冒泡排序
var temp: Array = [];
for (var i: int = 0; i < arr.length; i++) {
for (var j: int = 0; j < arr.length - i; j++) {
if (arr[j + 1] && arr[j][3] < arr[j + 1][3]) {
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
public static function getCoor(obj: Object): Object {
/*根据宽高计算元素的长宽和坐标
obj={
stageW=播放器的宽
stageH=播放器的高
eleW=元件的宽
eleH=元件的高
stretched=缩放形式:0=原始大小,1=自动缩放,2=只有当元件的宽或高大于播放器宽高时才进行缩放,3=参考播放器宽高,4=宽度参考播放器宽、高度自动,5=高度参考播放器高、宽度自动
align=水平对齐方式 left,center,right
vAlign=垂直对齐方式 top.middle,bottom
spacingLeft=左方预留间距
spacingTop=上方预留间距
spacingRight=右方预留间距
spacingBottom=下方预留间距
}
*/
var nObj: Object = mergeObject({
stageW: 0,
stageH: 0,
eleW: 0,
eleH: 0,
stretched: 0,
align: "center",
vAlign: "middle",
spacingLeft: 0,
spacingTop: 0,
spacingRight: 0,
spacingBottom: 0
}, obj);
//traceObject(nObj);
var stageW: int = nObj["stageW"] - nObj["spacingLeft"] - nObj["spacingRight"];
var stageH: int = nObj["stageH"] - nObj["spacingTop"] - nObj["spacingBottom"];
var eleW: int = nObj["eleW"];
var eleH: int = nObj["eleH"];
var w: int = eleW,
h: int = eleH,
x: int = 0,
y: int = 0;
if (nObj["stretched"] == 2) {
if (eleW > stageW) {
nObj["stretched"] = 4;
}
if (eleH > stageH) {
nObj["stretched"] = 5;
}
if (eleW > stageW && eleH > stageH) {
nObj["stretched"] = 1;
}
}
switch (nObj["stretched"]) {
case 1:
if (stageW / stageH < eleW / eleH) {
w = stageW;
h = w * eleH / eleW;
} else {
h = stageH;
w = h * eleW / eleH;
}
break;
case 3:
w = stageW;
h = stageH;
break;
case 4:
w = stageW;
h = w * eleH / eleW;
break;
case 5:
h = stageH;
w = h * eleW / eleH;
break;
default:
break;
}
switch (nObj["align"]) {
case "left":
x = nObj["spacingLeft"];
break;
case "center":
x = (stageW - w) * 0.5 + nObj["spacingLeft"];
break;
case "right":
x = stageW - w + nObj["spacingLeft"];
break;
default:
break;
}
switch (nObj["vAlign"]) {
case "top":
y = nObj["spacingTop"];
break;
case "middle":
y = (stageH - h) * 0.5 + nObj["spacingTop"];
break;
case "bottom":
y = stageH - h + nObj["spacingTop"];
break;
default:
break;
}
//trace(w,h,x,y);
return {
width: w,
height: h,
x: x,
y: y
};
}
public static function mergeOldFlashvars(nObj: Object, oObj: Object): Object {
for (var k: String in oObj) {
switch (k) {
case "p":
if (Number(oObj[k]) == 1) {
nObj["autoplay"] = true;
} else {
nObj["autoplay"] = false;
}
break;
case "lv":
if (Number(oObj[k]) == 1) {
nObj["live"] = true;
} else {
nObj["live"] = false;
}
break
case "i":
nObj["poster"] = oObj[k];
break;
case "v":
nObj["volume"] = Number(oObj[k]) * 0.01;
break;
case "h":
var h: int = Number(oObj[k]);
var q: String ="";
if(oObj.hasOwnProperty("q")){
q = oObj["q"];
}
switch (h) {
case 1:
q = q != "" ?"frames_"+ q : "frames_start";
break;
case 2:
q = q != "" ? "time_"+q : "time_start";
break;
case 3:
case 4:
q = q != "" ? q : "start"
break;
}
nObj["drag"] = h > 0 ? q : "";
break;
case "g":
nObj["seek"] = Number(oObj[k]);
break;
case "er":
nObj["error"] = oObj[k];
break;
case "k":
if (oObj["n"] != "" && oObj["k"] != "") {
var arrk: Array = oObj["k"].toString().split("|");
var arrn: Array = oObj["n"].toString().split("|");
if (arrk.length == arrn.length) {
var arrx: Array = [];
for (var i: int = 0; i < arrk.length; i++) {
arrx.push({
time: arrk[i],
words: arrn[i]
});
}
nObj["promptSpot"] = arrx;
}
}
break;
default:
break;
}
}
return nObj;
}
public static function simpleMergeObject(newObj: Object, oldObject: Object): Object { //简单形式直接替换对象
//简单合并对象
for (var k: String in oldObject) {
newObj[k] = oldObject[k];
}
return newObj;
}
public static function supplementObject(newObj: Object, oldObject: Object): Object { //把旧对象合并到新对象里,主要用来补充参数,即如果原对象中包含了该参数就不需要再加入了
for (var k: String in oldObject) {
if (!newObj.hasOwnProperty(k)) {
newObj[k] = oldObject[k];
} else {
if (!newObj[k] || k == "volume") {
if(getType(newObj[k])=="number"){
newObj[k] = Number(oldObject[k]);
}
else{
newObj[k] = oldObject[k];
}
}
}
}
return newObj;
}
public static function formatSsl(str:String):String{
var arr:Array=str.split("");
var newStr:String="";
for(var i:int=0; i<str.length; i++){
if(str.charAt(i)>='0' && str.charAt(i)<='9'){
newStr+=arr[i];
}else if((str.charAt(i)>='a' && str.charAt(i)<='z') || (str.charAt(i)>='A' && str.charAt(i) <= 'Z')){
newStr+=arr[i];
}
}
return newStr;
}
public static function mergeObject(obj: Object = null, old: Object = null): Object { //把旧对象合并到新对象里,主要用来格式化参数
function sendObj(nObj: Object, oObj: Object): Object {
for (var k: String in oObj) {
if (oObj[k] != undefined) {
//trace(k,nObj[k] , getType(nObj[k]));
var type: String = "";
if (nObj.hasOwnProperty(k)) {
type = getType(nObj[k]);
if (oObj[k]) {
//trace(k,nObj[k],oObj[k],type,getType(nObj[k]),typeof(nObj[k]));
switch (type) {
case "object":
nObj[k] = sendObj(nObj[k], oObj[k]);
break;
case "boolean":
nObj[k] = (oObj[k] != "false" && oObj[k] != false) ? true : false;
break;
case "number":
nObj[k] = Number(oObj[k]);
//trace(k,nObj[k]);
break;
default:
nObj[k] = oObj[k];
if(nObj[k]=="true"){
nObj[k]=true;
}
if(nObj[k]=="false"){
nObj[k]=false;
}
break;
}
} else {
if (type == "number" && (oObj[k] == 0 || oObj[k] == "0")) {
nObj[k] = 0;
}
if(oObj[k]=="true"){
nObj[k] =true;
}
if(oObj[k]=="false"){
nObj[k] =false;
}
}
} else {
if (oObj[k]) {
nObj[k] = oObj[k];
}
}
}
}
return nObj;
}
return sendObj(obj, old);
}
public static function getStringLen(str): int { //计算字符长度,中文算2,字母数字算1
var len: int = 0;
for (var i: int = 0; i < str.length; i++) {
if (str.charCodeAt(i) > 127 || str.charCodeAt(i) == 94) {
len += 2;
} else {
len++;
}
}
return len;
}
public static function copyObject(obj: Object): * { //复制对象
var newObj: ByteArray = new ByteArray()
newObj.writeObject(obj);
newObj.position = 0;
return newObj.readObject();
}
public static function getLen(str: String = ""): Number { //获取字符的长度
if (!str) {
return 0;
}
var digital: int = 0; //数字
var character: int = 0; //字母
var space: int = 0; //空格
var other: int = 0; //其它字符
for (var i: int = 0; i < str.length; i++) {
if (str.charAt(i) >= '0' && str.charAt(i) <= '9') {
digital++;
} else if ((str.charAt(i) >= 'a' && str.charAt(i) <= 'z') || (str.charAt(i) >= 'A' && str.charAt(i) <= 'Z')) {
character++;
} else if (str.charAt(i) == ' ') {
space++;
} else {
other++;
}
}
return (digital + character + space + other * 2) * 0.5
}
public static function addListenerArr(listenerArr: Array, ele: String = "", fun: String = ""): Array { //添加监听函数数组
if (ele != "" && fun != "") {
var have: Boolean = false;
for (var i: int = 0; i < listenerArr.length; i++) {
var arr = listenerArr[i];
if (arr[0] == ele && arr[1] == fun) {
have = true;
break;
}
}
if (!have) {
listenerArr.push([ele, fun]);
}
}
return listenerArr;
}
public static function removeListenerArr(listenerArr: Array, ele: String = "", fun: String = ""): Array { //删除监听函数数组
if (ele != "" && fun != "") {
for (var i: int = 0; i < listenerArr.length; i++) {
var arr = listenerArr[i];
if (arr[0] == ele && arr[1] == fun) {
listenerArr.splice(i, 1);
break;
}
}
}
return listenerArr;
}
public static function callJs(js: String, val: *= null,val2:*=null): void {
//trace(js);
var arr: Array = js.split(".");
if (arr[0] == "" || !ExternalInterface.available) {
return;
}
if(val2 != null){
if (val != null) {
try {
ExternalInterface.call(js, val,val2);
} catch (event:Error) {
new log(event)
}
} else {
try {
ExternalInterface.call(js,val2);
} catch (event:Error) {
new log(event)
}
}
}
else{
if (val != null) {
try {
ExternalInterface.call(js, val);
} catch (event:Error) {
log(event)
}
} else {
try {
ExternalInterface.call(js);
} catch (event:Error) {
new log(event)
}
}
}
}
public static function openLink(url: String, target: String = '_blank', features: String = ""): void {
var myURL: URLRequest = new URLRequest(url);
//trace(url,myURL);
try {
ExternalInterface.call("window.open", url, target, features);
} catch (event:Error) {
try {
ExternalInterface.call("function setWMWindow() {window.open('" + url + "', '" + target + "', '" + features + "');}");
} catch (event: Error) {
navigateToURL(myURL, target);
}
}
}
public static function getHttpKey(info: Object): Object {
var k: String = "";
var vf: Array = [],
vt: Array = [];
//script.traceObject(info);
if (info.hasOwnProperty("keyframes")) {
var keyframes: Object = info["keyframes"];
for (k in keyframes) {
switch (k) {
case "times":
vt.push(keyframes[k]);
break;
case "filepositions":
vf.push(keyframes[k]);
break;
default:
break;
}
}
if(keyframes.hasOwnProperty("filepositions") && keyframes["filepositions"]){
vf=keyframes["filepositions"];
}
if(keyframes.hasOwnProperty("times") && keyframes["times"]){
vt=keyframes["times"];
}
} else if (info.hasOwnProperty("seekpoints")) {
var seekpoints: Object = info["seekpoints"];
for (k in seekpoints) {
var seekpoints2 = seekpoints[k];
for (var k2: String in seekpoints2) {
switch (k2) {
case "time":
vt.push(seekpoints2[k2]);
break;
case "offset":
vf.push(seekpoints2[k2]);
break;
default:
break;
}
} //end for k2
} //end for k
}
if (vt.length > 0) {
info["keytime"] = vt;
info["keyframes"] = vf;
}
return info;
}
public static function randomString(len: int = 16): String { //获取一个随机值
var chars: String = "abcdefghijklmnopqrstuvwxyz";
var maxPos: int = chars.length;  
var val: String = "";
for (var i: int = 0; i < len; i++) {
val += chars.charAt(Math.floor(Math.random() * maxPos));
}
return 'ckv' + val;
}
public static function getPath(file: String): Object { //获取路径和对应ckplayer.swf的
var p: String = file.split("?")[0];
var a: Array = [];
var g: String = "\/";
var h: String = "";
if (p.indexOf("\/") > -1) {
a = p.split("\/");
} else {
a = p.split("/");
g = "/";
}
for (var i: int = 0; i < a.length - 1; i++) {
h += a[i] + g;
}
var fa: Array = a[a.length - 1].split("?");
var xa: Array = fa[0].toString().split(".");
return {
path: h,
file: fa[0],
fileName: xa[0]
};
}
public static function arrSum(arr: Array, sort: int = -1): Number { //将数组里的值相加,sort=指定截断
var num: Number = 0;
//trace(sort > 0 ? sort : arr.length);
if (sort > arr.length || sort == -1) {
sort = arr.length;
}
for (var i: int = 0; i < sort; i++) {
num += Number(arr[i]);
}
return num;
}
public static function replace(val: String, oldArr: Array, newArr: Array): String {
if (!val || oldArr.length != newArr.length) {
return val;
}
for (var i: int = 0; i < oldArr.length; i++) {
val = val.split(oldArr[i]).join(newArr[i]);
}
return val;
}
public static function getType(val: * ): String { //获取变量类型
if (val == undefined) {
return undefined
}
if (typeof (val) == "object") {
if (val.length != undefined) {
return "array";
} else {
return "object";
}
}
return typeof (val);
}
public static function traceObject(cObj: Object): void { //输出对象和数组
function tr(obj: Object, jg: String = "") {
for (var k: String in obj) {
//trace(jg, k, obj[k]);
if (typeof (obj[k]) == "object") {
trace(jg, k, "{");
tr(obj[k], jg + " ");
trace(jg, "},");
} else {
if (typeof (obj[k]) == "string") {
trace(jg, k, ":\"", obj[k], "\",");
} else {
trace(jg, k, ":", obj[k], ",");
}
}
}
}
tr(cObj);
}
public static function strReplace(str: String, find: Array, replace: Array): String {
if (str != "" && find.length == replace.length) {
for (var i: int = 0; i < find.length; i++) {
str = str.split(find[i]).join(replace[i]);
}
}
return str;
}
public static function trackToArray(str: String):Array {
var arr:Array=str.split(",");
var tempArr:Array=[];
var newArr:Array=[];
for(var i=0;i<arr.length;i++){
tempArr.push(arr[i]);
if(i % 3==2){
newArr.push(tempArr);
tempArr=[];
}
}
return newArr;
}
}
}