帮助手册>安装调用>视频地址调用方式

视频流形式swf文件调用方式

该方式原理是播放器加载一个swf文件,比如:flv.swf,该文件自身进行视频流的请求和播放等一系列操作。主要包括的功能如下:

1:计算出视频地址

2:请求视频流

3:播放视频流

3:视频流请求失败或视频地址加载失败时发送错误通知

4:播放/暂停视频流

5:调整音量

6:播放指定时间点视频流

7:发送当前播放时间、总时间

8:发送已加载字节,总字节

9:清除视频流

10:如果需要,还可以操作其它的功能。

下面是一个示例,该示例的作用是先加载一个网页,通过该网上输出视频地址。

import flash.media.SoundTransform;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.events.SecurityErrorEvent;
import flash.events.NetStatusEvent;
import flash.events.IOErrorEvent;
import flash.events.AsyncErrorEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;

var nc: NetConnection = null;
var ns: NetStream = null;
var ck: Object;
var vvolume: SoundTransform = null; //音量控制
var flashvars: Object = {};
var isbuffer: Boolean = false; //是否显示缓冲
var isfP: Boolean = false; //默认暂停
var isPlayNumber: Boolean = true; //是否第一次要求播放
var totaltime: Number = 0; //总时间
var isBuffer: Boolean = false;
var isSend: Boolean = false; //是否已接受过播放器的通知
var isReady: Boolean = false; //是否已向播放器发送准备好播放的信号
var bufferT: int = 0.3; //缓冲时间
var vW: Number = 0,
	vH: Number = 0; //视频的宽高
var videoUrl: String = ""; //视频地址
var setTime:Timer=null;//计算已播放时间
var setByte:Timer=null;//计算已加载时间
function setAppObj(obj: Object) {
	ck = obj;
	flashvars = ck.getStatus()["myflashvars"];
	var style: Object = ck.getStatus()["myStyle"];
	var setup: String = style["setup"];
	var setarr = setup.split(",");
	bufferT = parseInt(setarr[12]) * 0.001;

	if (flashvars.hasOwnProperty("a")) {
		videoUrl = flashvars["a"];
	}
	if (flashvars.hasOwnProperty("p") && flashvars["p"] == 1) {
		isfP = true; //默认播放
	}
	ck.sendJS("videoUrl:" + videoUrl);
	if (videoUrl == "") { //地址为空,发送给播放器
		ck.videoError(); //告诉播放器加载失败了
		return;
	}
	loadVideo();
}
function loadVideo(): void {
	nc = new NetConnection();
	nc.client = this;
	nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
	nc.addEventListener(IOErrorEvent.IO_ERROR, error);
	nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, sError);
	nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR, aError); //监听出错
	nc.connect(null);
}
function netStatusHandler(event: NetStatusEvent): void {
	trace(event.info.code);
	switch (event.info.code) {
		case "NetConnection.Connect.Success":
			connectStreamFlv();
			break;
		case "NetStream.Play.StreamNotFound":
			ck.videoError(); //告诉播放器加载失败了
			break;
		case "NetStream.Play.start":
			break;
		case "NetStream.Seek.InvalidTime": //缓冲出错
			ns.seek(event.info.details);
			break;
	}
}
function sError(event: SecurityErrorEvent): void {
	ck.videoError(); //告诉播放器加载失败了
}
function connectStreamFlv(): void {
	ns = new NetStream(nc);
	ns.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
	ns.addEventListener(IOErrorEvent.IO_ERROR, error);
	ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, aError); //监听出错
	ns.bufferTime = bufferT;
	ns.client = {onMetaData: MetaData};
	ns.play(videoUrl);
	trace("=dd==", videoUrl)
	setTime=new Timer(250);
	setTime.addEventListener(TimerEvent.TIMER,setTimer);
	setTime.start();
	setByte=new Timer(250);
	setByte.addEventListener(TimerEvent.TIMER,setByter);
	setByte.start();
}
function setTimer(event:TimerEvent):void{
	ck.changeClock(ns.time)
}
function setByter(event:TimerEvent):void{
	ck.changeLoad(ns.bytesLoaded)
}
function error(event: IOErrorEvent): void {
	trace("error", event);
}
function aError(event: AsyncErrorEvent): void {
	trace("aerror", event);
}
function MetaData(data: Object): void {
	for(var k in data){
		trace(k,data[k]);
	}
	var _duration: Number = data["duration"];
	var _filesize: Number = ns.bytesTotal;
	vW = data["width"];
	vH = data["height"];
	if (_duration > 0) {
		ck.changeTotalTime(_duration); //向播放器发送视频总时间
	}
	if (_filesize > 0) {
		ck.changeTotalBytes(_filesize); //向播放器发送视频总字节
	}
	isReady = true
	if (isSend) { //如果已经通知过了就直接发送流不需要通知播放器了
		ck.sendNetStream(ns); //向播放器发送视频流和宽高
	}
	else {
		ck.ready(); //告诉播放器我已准备好,可以播放了,当播放器确定需要播放时会调用eSendNs()函数
	}
	return;
	var vol: Number = 80;
	if (flashvars.hasOwnProperty("v")) {
		vol = parseInt(flashvars["v"]);
	}
	eVolume(vol);
}
function eSendNs(): void {
	isSend = true; //播放器已通知了
	if (isReady) { //只有流准备好了才能发送,不然就不发送
		ck.sendNetStream(ns); //向播放器发送视频流和宽高
	}
}
function ePlay(): void {
	if(!ns){
		return;
	}
	if (!isSend) {
		trace("发送视频流")
		isSend = true;
		ck.sendNetStream(ns); //向播放器发送视频流和宽高
	}
	if (isPlayNumber) {
		isPlayNumber = false;
	}
	ns.resume();
}
function ePause(): void {
	ns.pause();
}
function eSeek(t: Number = 0): void {
	ns.seek(t);
	ns.resume();
}
function eVolume(t: int = 0): void {
	vvolume = new SoundTransform(t * 0.01, 0);
	ns.soundTransform = vvolume;
}
function eClear(): void {
	ns.close();
	ns.client();
	ns = null;
	nc = null;
	ck.noticeClear(); //通知播放器已清楚视频流
}

详细的交互函数请查看actionscript3.0-api里相关文章。

建议了解以下相关内容:
Powered by ckplayer.com  
Copyright©ckplayer,2011-2016