Meta veri ve işaret noktaları için geri çağrı yöntemleri yazma

Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü

Oynatıcı tarafından belirli meta veriler alındığında veya belirli işaret noktalarına ulaşıldığında uygulamanızda eylemleri tetikleyebilirsiniz. Bu olaylar gerçekleştiğinde, belirli geri çağrı yöntemlerini olay işleyicileri olarak kullanmanız gerekir. NetStream sınıfı, oynatma sırasında oluşabilecek şu meta veri olaylarını belirtir: onCuePoint (yalnızca FLV dosyaları), onImageData, onMetaData, onPlayStatus, onTextData ve onXMPData.

Bu işleyiciler için geri çağrı yöntemleri yazmanız gerekir, aksi takdirde Flash çalışma zamanı hata atabilir. Örneğin, şu kod SWF dosyasının bulunduğu aynı klasörde video.flv adında bir FLV dosyasını oynatır:

var nc:NetConnection = new NetConnection(); 
nc.connect(null); 
 
var ns:NetStream = new NetStream(nc); 
ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler); 
ns.play("video.flv"); 
function asyncErrorHandler(event:AsyncErrorEvent):void 
{ 
    trace(event.text); 
} 
 
var vid:Video = new Video(); 
vid.attachNetStream(ns); 
addChild(vid);

Önceki kod, video.flv adında yerel bir video yükler ve gönderilecek asyncError (AsyncErrorEvent.ASYNC_ERROR) öğesini dinler. Yerel eşzamansız koddan bir istisna atıldığında bu olay gönderilir. Bu durumda, video dosyası meta veri veya işaret noktası bilgileri içerdiğinde ve uygun dinleyiciler tanımlanmamış olduğunda gönderilir. Önceki kod, asyncError olayını işler ve siz video dosyasının meta veri veya işaret noktası bilgileriyle ilgilenmiyorsanız hatayı yok sayar. Meta veri ve birçok işaret noktası içeren bir FLV dosyanız varsa, trace() işlevi şu hata mesajlarını görüntüler:

Error #2095: flash.net.NetStream was unable to invoke callback onMetaData. 
Error #2095: flash.net.NetStream was unable to invoke callback onCuePoint. 
Error #2095: flash.net.NetStream was unable to invoke callback onCuePoint. 
Error #2095: flash.net.NetStream was unable to invoke callback onCuePoint.

NetStream nesnesi, onMetaData veya onCuePoint geri çağrı yöntemini bulamadığından hatalar gerçekleşir. Uygulamalarınızda bu geri çağrı yöntemlerini tanımlamanın birçok yolu vardır.

NetStream nesnesinin istemci özelliğini bir Object öğesine ayarlama

client özelliğini bir Object öğesine veya NetStream öğesinin alt sınıfına ayarlayarak, onMetaData ve onCuePoint geri çağrı yöntemlerini yeniden yönlendirebilir ya da tamamen yoksayabilirsiniz. Şu örnek, asyncError olayını dinlemeden geri çağrı yöntemlerini yoksaymak için boş bir Object öğesini nasıl kullanabileceğinizi gösterir:

var nc:NetConnection = new NetConnection(); 
nc.connect(null); 
 
var customClient:Object = new Object(); 
 
var ns:NetStream = new NetStream(nc); 
ns.client = customClient; 
ns.play("video.flv"); 
 
var vid:Video = new Video(); 
vid.attachNetStream(ns); 
addChild(vid);

onMetaData veya onCuePoint geri çağrı yöntemlerini dinlemek isterseniz, aşağıdaki kod parçasında gösterildiği gibi, bu geri çağrı yöntemlerini işlemek için yöntemler tanımlamanız gerekir:

var customClient:Object = new Object(); 
customClient.onMetaData = metaDataHandler; 
function metaDataHandler(infoObject:Object):void 
{ 
    trace("metadata"); 
}

Önceki kod, onMetaData geri çağrı yöntemini dinler ve bir dizeyi izleyen metaDataHandler() yöntemini çağırır. Flash çalışma zamanı bir işaret noktasıyla karşılaşırsa, herhangi bir onCuePoint geri çağrı yöntemi tanımlanmamış olsa da, hata oluşturulmaz.

Özel bir sınıf oluşturma ve geri çağrı yöntemlerini işlemek için yöntemleri tanımlama

Şu kod, NetStream nesnesinin client özelliğini özel bir sınıf olan CustomClient sınıfına ayarlar ve böylece geri çağrı yöntemleri için işleyiciler tanımlanır:

var nc:NetConnection = new NetConnection(); 
nc.connect(null); 
 
var ns:NetStream = new NetStream(nc); 
ns.client = new CustomClient(); 
ns.play("video.flv"); 
 
var vid:Video = new Video(); 
vid.attachNetStream(ns); 
addChild(vid);

CustomClient sınıfı şöyledir:

package 
{ 
    public class CustomClient 
    { 
        public function onMetaData(infoObject:Object):void 
        { 
            trace("metadata"); 
        } 
    } 
}

CustomClient sınıfı, onMetaData geri çağrı işleyicisi için bir işleyici tanımlar. Bir işaret noktasıyla karşılaşıldıysa ve onCuePoint geri çağrı işleyicisi çağrıldıysa, bir asyncError olayı (AsyncErrorEvent.ASYNC_ERROR) gönderilerek “flash.net.NetStream, onCuePoint geri çağrısını çağıramadı.” mesajını bildirir. Bu hatayı önlemek için, CustomClient sınıfınızda bir onCuePoint geri çağrı yöntemini tanımlamanız veya asyncError olayı için bir olay işleyicisi tanımlamanız gerekir.

NetStream sınıfını genişletme ve geri çağrı yöntemlerini işlemek için yöntemler ekleme

Şu kod, daha sonra bir kod listesinde tanımlanan, CustomNetStream sınıfının bir örneğini oluşturur:

var ns:CustomNetStream = new CustomNetStream(); 
ns.play("video.flv"); 
 
var vid:Video = new Video(); 
vid.attachNetStream(ns); 
addChild(vid);

Şu kod listesi, NetStream sınıfını genişleten, gerekli NetConnection nesnesinin oluşumunu işleyen ve onMetaData ve onCuePoint geri çağrı işleyici yöntemlerini işleyen CustomNetStream sınıfını tanımlar:

package 
{ 
    import flash.net.NetConnection; 
    import flash.net.NetStream; 
    public class CustomNetStream extends NetStream 
    { 
        private var nc:NetConnection; 
        public function CustomNetStream() 
        { 
            nc = new NetConnection(); 
            nc.connect(null); 
            super(nc); 
        } 
        public function onMetaData(infoObject:Object):void 
        { 
            trace("metadata"); 
        } 
        public function onCuePoint(infoObject:Object):void 
        { 
            trace("cue point"); 
        } 
    } 
}

CustomNetStream sınıfında onMetaData() ve onCuePoint() yöntemlerini yeniden adlandırmak isterseniz, şu kodu kullanabilirsiniz:

package 
{ 
    import flash.net.NetConnection; 
    import flash.net.NetStream; 
    public class CustomNetStream extends NetStream 
    { 
        private var nc:NetConnection; 
        public var onMetaData:Function; 
        public var onCuePoint:Function; 
        public function CustomNetStream() 
        { 
            onMetaData = metaDataHandler; 
            onCuePoint = cuePointHandler; 
            nc = new NetConnection(); 
            nc.connect(null); 
            super(nc); 
        } 
        private function metaDataHandler(infoObject:Object):void 
        { 
            trace("metadata"); 
        } 
        private function cuePointHandler(infoObject:Object):void 
        { 
            trace("cue point"); 
        } 
    } 
}

NetStream sınıfını genişletme ve dinamik hale getirme

NetStream sınıfını genişletebilir ve onCuePoint ve onMetaData geri çağrı işleyicileri dinamik olarak eklenebilecek şekilde alt sınıfı dinamik duruma getirebilirsiniz. Aşağıdaki listede bu gösterilmektedir:

var ns:DynamicCustomNetStream = new DynamicCustomNetStream(); 
ns.play("video.flv"); 
 
var vid:Video = new Video(); 
vid.attachNetStream(ns); 
addChild(vid);

DynamicCustomNetStream sınıfı şöyledir:

package 
{ 
    import flash.net.NetConnection; 
    import flash.net.NetStream; 
    public dynamic class DynamicCustomNetStream extends NetStream 
    { 
        private var nc:NetConnection; 
        public function DynamicCustomNetStream() 
        { 
            nc = new NetConnection(); 
            nc.connect(null); 
            super(nc); 
        } 
    } 
}

onMetaData ve onCuePoint geri çağrı işleyicileri için herhangi bir işleyici olmadığında da, DynamicCustomNetStream sınıfı dinamik olduğundan hata atılmaz. onMetaData ve onCuePoint geri çağrı işleyicileri için yöntemleri tanımlamak istiyorsanız, şu kodu kullanabilirsiniz:

var ns:DynamicCustomNetStream = new DynamicCustomNetStream(); 
ns.onMetaData = metaDataHandler; 
ns.onCuePoint = cuePointHandler; 
ns.play("http://www.helpexamples.com/flash/video/cuepoints.flv"); 
 
var vid:Video = new Video(); 
vid.attachNetStream(ns); 
addChild(vid); 
 
function metaDataHandler(infoObject:Object):void 
{ 
    trace("metadata"); 
} 
function cuePointHandler(infoObject:Object):void 
{ 
    trace("cue point"); 
}

NetStream nesnesinin istemci özelliğini this olarak ayarlama

client özelliği this olarak ayarlandığında, uygulama onMetaData() ve onCuePoint() yöntemlerinin geçerli kapsamında arama yapar. Aşağıdaki örnekte bunu görebilirsiniz:

var nc:NetConnection = new NetConnection(); 
nc.connect(null); 
 
var ns:NetStream = new NetStream(nc); 
ns.client = this; 
ns.play("video.flv"); 
 
var vid:Video = new Video(); 
vid.attachNetStream(ns); 
addChild(vid);

onMetaData veya onCuePoint geri çağrı işleyicileri çağrılırsa ve geri çağrıyı işleyecek bir yöntem yoksa herhangi bir hata oluşturulmaz. Bu geri çağrı işleyicilerini işlemek için, aşağıdaki kod parçasında görüldüğü gibi bir onMetaData() ve onCuePoint() yöntemi oluşturun:

function onMetaData(infoObject:Object):void 
{ 
    trace("metadata"); 
} 
function onCuePoint(infoObject:Object):void 
{ 
    trace("cue point"); 
}