1、建構視訊NetConnection和NetStream;
2、音量控制用soundTransform(這 個讓我耗了一些精力,在AS2中可以setvolume,在AS3就不行了);
3、暫停用pause(),恢複回放暫停的視訊流用resume();
4、接收視訊資訊用onMetaData(如視訊總時間data.duration);
5、偵聽視訊流的開始和結束用NetStatusEvent.NET_STATUS,info.code如果 為"NetStream.Play.Stop",則可重播或播放新的視訊;
//以上隻是一些最基本的視訊知識,希望對初學AS3的人能有所幫助,這将是我最大的欣慰。
[效 果]
無
[步驟]
第一步:建立播放按鈕、暫停按鈕,執行個體名分别為play_btn、pause_btn;
第二步:畫兩個長矩形,分别轉為影片剪輯,執行個體名分别為jzjd_mc、bfjd_mc,作為加載進度條與播放進度條;
第三步:在庫中右鍵選擇“建立視訊”,在彈出的對話框中點選“視訊(受ActionScript控制)”,拖到場景中,執行個體名為vid;
第四步:在場景中拉兩個動态文本,執行個體名分别為bftxt(顯示播放時間)、zcdtxt(顯示總時間);
第五步:畫一個長矩形,轉為影片剪輯,作為音量條,執行個體名為ylt_mc;
第六步:畫一個小圓,轉為影片剪輯,作為音量滑塊,執行個體名為ylhk_mc;
第七步:在幀上寫如下代碼:
[代碼]
//建立一個 NetConnection 對 象
var nc:NetConnection=new NetConnection();
/*如果連接配接到沒有使用伺服器的FLV 檔案,則通過向 connect() 方法傳遞值
null,來播放流式 FLV 檔案*/
nc.connect(null);
/*建立一個 NetStream 對象(該對象将 NetConnection 對象作為參數)并
指定要加載的 FLV 檔案*/
var ns:NetStream=new NetStream(nc);
ns.play("http://www.helpexamples.com/flash/video/cuepoints.flv");
/*使用 Video 類的 attachNetStream() 方法附加以前建立的 NetStream
對象(視訊執行個體名為vid)*/
vid.attachNetStream(ns);
//音量初始值
var yl:Number=0.5;
var nsyl:SoundTransform =new SoundTransform();
//nsyl.volume=yl
//播放進度與加載進度影片縮放為0
bfjd_mc.scaleX=jzjd_mc.scaleX=0;
//申明變量播放與下載下傳百分比以及總時間(秒)的初始值為0
var bfbfb:int=0;
var xzbfb:int=0;
var _duration:Number=0;
//指定在其上調用回調方法的對象
var _client:Object=new Object();
_client.onMetaData=onMetaData;
ns.client=_client;
//按鈕可見性與添加偵聽事 件
play_btn.visible=false;
pause_btn.visible=true;
pause_btn.addEventListener(MouseEvent.CLICK, zt);
play_btn.addEventListener(MouseEvent.CLICK, bf);
//忽略錯誤
ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
function asyncErrorHandler(event:AsyncErrorEvent):void {
}
//暫停
function zt(event:MouseEvent):void {
play_btn.visible=true;
pause_btn.visible=false;
//視訊暫停
ns.pause();
//播放
function bf(event:MouseEvent):void {
//恢複回放暫停的視訊流
ns.resume();
addEventListener(Event.ENTER_FRAME,gx);
//接收在正播放的 FLV 檔案中嵌入的描述性資訊時排程
function onMetaData(data:Object):void {
_duration=data.duration;
//申明變量播放信号
var bfxh:String;
//偵聽視訊流的開始和末尾
ns.addEventListener(NetStatusEvent.NET_STATUS, statusHandler);
function statusHandler(event:NetStatusEvent):void {
bfxh=event.info.code;
//不斷更新進度與文本的顯示
function gx(event:Event):void {
if (ns.bytesLoaded>0) {
//加載進度
xzbfb=ns.bytesLoaded/ns.bytesTotal*100;
jzjd_mc.scaleX=xzbfb/100;
if (_duration>0 && ns.time>0) {
//播放進度
bfbfb=ns.time/_duration*100;
bfjd_mc.scaleX=bfbfb/100;
if (bfxh=="NetStream.Play.Stop") {
//播放完畢時的設定
bfbfb=0;
bfjd_mc.scaleX=0;
ns.seek(0);//将播放頭置于視訊開始處
//文本顯示内容
bftxt.text=Math.round(ns.time/60)+":"+Math.round(ns.time%60);
zcdtxt.text=Math.round(_duration/60)+":"+Math.round(_duration%60);
//音量控制
yl=(ylhk_mc.x-345)/50;
ylt_mc.scaleX=yl;
nsyl.volume =yl;
ns.soundTransform =nsyl;
//音量滑塊拖 動控制
var fw:Rectangle=new Rectangle(345,328,50,0);//拖動範圍
ylhk_mc.addEventListener(MouseEvent.MOUSE_DOWN,ylhkax);
ylhk_mc.addEventListener(MouseEvent.MOUSE_UP,ylhksk);
stage.addEventListener(MouseEvent.MOUSE_UP,ylhksk);
function ylhkax(event:MouseEvent):void {
ylhk_mc.startDrag(false,fw);
function ylhksk(event:MouseEvent):void {
ylhk_mc.stopDrag();