İşaret noktalarını ve meta verileri kullanma

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

Video oynatılırken işaret noktası ve meta veri olaylarını yakalamak ve işlemek için NetStream geri çağrı yöntemlerini kullanın.

İşaret noktalarını kullanma

Aşağıdaki tablo, Flash Player uygulamasında F4V ve FLV işaret noktalarını yakalamak için kullanabileceğiniz geri çağrı yöntemlerini açıklar.

Çalışma zamanı

F4V

FLV

Flash Player 9/ AIR1.0

 

OnCuePoint

   

OnMetaData

Flash Player 10

 

OnCuePoint

 

OnMetaData

OnMetaData

 

OnXMPData

OnXMPData

Aşağıdaki örnek, basit bir for..in döngüsünü kullanarak, onCuePoint() işlevinin aldığı infoObject parametresindeki özelliklerin her birini yineler. İşaret noktası verileri aldığında bir mesaj görüntülemek için trace() işlevini çağırır:

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); 
 
function onCuePoint(infoObject:Object):void 
{ 
    var key:String; 
    for (key in infoObject) 
    { 
        trace(key + ": " + infoObject[key]); 
    } 
}

Şu çıktı görüntülenir:

parameters:  
name: point1 
time: 0.418 
type: navigation

Bu kod, geri çağrı yönteminin üzerinde çalıştığı nesneyi ayarlamak için çok sayıdaki teknikten birini kullanır. Başka teknikler de kullanabilirsiniz; daha fazla bilgi için, bkz. Meta veri ve işaret noktaları için geri çağrı yöntemleri yazma.

Video meta verilerini kullanma

İşaret noktaları da dahil olmak üzere, video dosyanızdaki meta verilere erişmek için OnMetaData() ve OnXMPData() işlevlerini kullanabilirsiniz.

OnMetaData() öğesini kullanma

Meta veriler arasında, süre, genişlik, yükseklik ve kare hızı gibi video dosyanız hakkında bilgiler yer alır. Video dosyanıza eklenen meta veri bilgileri, video dosyasını kodlamak için kullandığınız yazılıma bağlıdır.

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); 
 
function onMetaData(infoObject:Object):void 
{ 
    var key:String; 
    for (key in infoObject) 
    { 
        trace(key + ": " + infoObject[key]); 
    } 
}

Önceki kod, şunun gibi bir çıktı oluşturur:

width: 320 
audiodelay: 0.038 
canSeekToEnd: true 
height: 213 
cuePoints: ,, 
audiodatarate: 96 
duration: 16.334 
videodatarate: 400 
framerate: 15 
videocodecid: 4 
audiocodecid: 2
Videonuzda ses yoksa, kodlama sırasında meta verilere ses bilgisi eklenmediğinden, sesle ilgili meta veri bilgileri (örn. audiodatarate) undefined değerini döndürür.

Önceki kodda, işaret noktası bilgileri görüntülenmiyordu. İşaret noktası meta verilerini görüntülemek için, Object içindeki öğeleri art arda görüntüleyen şu işlevi kullanabilirsiniz:

function traceObject(obj:Object, indent:uint = 0):void 
{ 
    var indentString:String = ""; 
    var i:uint; 
    var prop:String; 
    var val:*; 
    for (i = 0; i < indent; i++) 
    { 
        indentString += "\t"; 
    } 
    for (prop in obj) 
    { 
        val = obj[prop]; 
        if (typeof(val) == "object") 
        { 
            trace(indentString + " " + prop + ": [Object]"); 
            traceObject(val, indent + 1); 
        } 
        else 
        { 
            trace(indentString + " " + prop + ": " + val); 
        } 
    } 
}

onMetaData() yönteminde infoObject parametresini izlemek için önceki kod parçasının kullanılması şu çıktıyı oluşturur:

width: 320 
audiodatarate: 96 
audiocodecid: 2 
videocodecid: 4 
videodatarate: 400 
canSeekToEnd: true 
duration: 16.334 
audiodelay: 0.038 
height: 213 
framerate: 15 
cuePoints: [Object] 
    0: [Object] 
        parameters: [Object] 
            lights: beginning 
        name: point1 
        time: 0.418 
        type: navigation 
    1: [Object] 
        parameters: [Object] 
            lights: middle 
        name: point2 
        time: 7.748 
        type: navigation 
    2: [Object] 
        parameters: [Object] 
            lights: end 
        name: point3 
        time: 16.02 
        type: navigation

Şu örnek, MP4 video için meta verileri görüntüler. Ayrıca meta verileri yazdığı, metaDataOut adında bir TextArea nesnesinin olduğunu varsayar.

package 
{ 
    import flash.net.NetConnection; 
    import flash.net.NetStream; 
    import flash.events.NetStatusEvent; 
    import flash.media.Video; 
    import flash.display.StageDisplayState; 
    import flash.display.Loader; 
    import flash.display.Sprite; 
    import flash.events.MouseEvent; 
     
    public class onMetaDataExample extends Sprite 
    {     
        var video:Video = new Video(); 
         
        public function onMetaDataExample():void 
        { 
            var videoConnection:NetConnection = new NetConnection(); 
            videoConnection.connect(null); 
             
            var videoStream:NetStream = new NetStream(videoConnection); 
            videoStream.client = this; 
             
            addChild(video); 
            video.x = 185; 
            video.y = 5; 
                     
            video.attachNetStream(videoStream); 
             
            videoStream.play("video.mp4"); 
                         
            videoStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); 
        } 
                     
        public function onMetaData(infoObject:Object):void 
        { 
            for(var propName:String in infoObject) 
            { 
                metaDataOut.appendText(propName + "=" + infoObject[propName] + "\n"); 
            } 
        } 
         
        private function netStatusHandler(event:NetStatusEvent):void 
        { 
            if(event.info.code == "NetStream.Play.Stop") 
                stage.displayState = StageDisplayState.NORMAL; 
        } 
    } 
}

onMetaData() işlevi bu video için şu çıktıyı üretmiştir:

moovposition=731965 
height=352 
avclevel=21 
videocodecid=avc1 
duration=2.36 
width=704 
videoframerate=25 
avcprofile=88 
trackinfo=[object Object]

Bilgi nesnesini kullanma

Aşağıdaki tablo, aldığı Objecy öğesinde onMetaData() geri çağrı işlevine iletilen video meta verileri için olası değerleri gösterir:

Parametre

Açıklama

aacaot

AAC ses nesnesi türü; 0, 1 veya 2 desteklenir.

avclevel

10, 11, 20, 21, vb. gibi AVC IDC düzey sayısı.

avcprofile

55, 77, 100, vb. gibi AVC profil sayısı.

audiocodecid

Kullanılmış olan ses codec bileşenini (kodlama/kod çözme tekniği) belirten bir dize; örneğin, “.Mp3” veya “mp4a”

audiodatarate

Saniyede kilobayt cinsinden, sesin kodlandığı hızı belirten bir sayı.

audiodelay

Orijinal FLV dosyasının "0 zamanının", FLV dosyasında ne zaman bulunduğunu belirten bir sayı. Video içeriğinin sesle düzgün şekilde senkronize edilmesi için küçük bir miktar ertelenmesi gerekir.

canSeekToEnd

FLV dosyası, aşamalı indirme video dosyasının sonuna kadar arama yapılmasını sağlayan son karedeki anahtar kareyle kodlanmışsa true olan bir Boolean değeri. FLV dosyası son karedeki bir anahtar kareyle kodlanmamışsa bu false olur.

cuePoints

FLV dosyasında gömülü her işaret noktası için birer tane olmak üzere nesneler dizisi. FLV dosyası herhangi bir işaret noktası içermezse, değer tanımsız olur. Her nesne şu özelliklere sahiptir:

  • type: "gezinme" veya "olay" olarak işaret noktasının türünü belirten bir dize.

  • name: işaret noktasının adı olan bir dize.

  • time: işaret noktasının zamanı olan üç ondalık basamak kesinliğinde (milisaniye) saniye cinsinden bir sayı.

  • parameters: işaret noktaları oluşturulurken kullanıcı tarafından atanan ad-değer çiftlerine sahip isteğe bağlı bir nesne.

duration

Video dosyasının saniye cinsinden süresini belirten bir sayı.

framerate

FLV dosyasının kare hızını belirten bir sayı.

height

FLV dosyasının piksel cinsinden yüksekliğini belirten bir sayı.

seekpoints

Milisaniye cinsinden zaman damgası olarak kullanılabilir anahtar kareleri listeleyen bir dizi. İsteğe bağlı.

etiketler

MP4 dosyalarının ID3 etiketlerine eşdeğer olan "ilst" atomundaki bilgileri temsil eden anahtar-değer çiftleri dizisi. iTunes bu etiketleri kullanır. Varsa, resim görüntülemek için kullanılabilir.

trackinfo

Örnek açıklama kimliği gibi, MP4 dosyasındaki tüm parçalar hakkında bilgi sağlayan nesne.

videocodecid

Videoyu kodlamak için kullanılmış olan codec sürümünü belirten bir dize. - örneğin, “avc1” veya “VP6F”

videodatarate

FLV dosyasının video verisi hızını belirten bir sayı.

videoframerate

MP4 videosunun kare hızı.

width

FLV dosyasının piksel cinsinden genişliğini belirten bir sayı.

Aşağıdaki tablo, videocodecid parametresi için olası değerleri gösterir:

videocodecid

Codec adı

2

Sorenson H.263

3

Ekran videosu (yalnızca SWF sürüm 7 ve sonrası)

4

VP6 (yalnızca SWF sürüm 8 ve sonrası)

5

Alfa kanalı ile VP6 video (yalnızca SWF sürüm 8 ve sonrası)

Aşağıdaki tablo, audiocodecid parametresi için olası değerleri gösterir:

audiocodecid

Codec Adı

0

sıkıştırılmamış

1

ADPCM

2

Mp3

4

Nellymoser @ 16 kHz mono

5

Nellymoser, 8kHz mono

6

Nellymoser

10

AAC

11

Speex

onXMPData() öğesini kullanma

onXMPData() geri çağrı işlevi, Adobe F4V veya FLV video dosyasında gömülü olan, Adobe Genişletilebilir Meta Veriler Platformu'na (XMP) özgü bilgileri alır. XMP meta verileri, diğer video meta verilerinin yanı sıra işaret noktaları da içerir. XMP meta verileri desteği, Flash Player 10 ve Adobe AIR 1.5 ile sunulmuş olup sonraki sürümler tarafından desteklenir.

Şu örnek, XMP meta verilerinde işaret noktası verilerini işler:

package 
{ 
    import flash.display.*; 
    import flash.net.*; 
    import flash.events.NetStatusEvent; 
    import flash.media.Video; 
     
    public class onXMPDataExample extends Sprite 
    { 
        public function onXMPDataExample():void 
        { 
            var videoConnection:NetConnection = new NetConnection(); 
            videoConnection.connect(null); 
             
            var videoStream:NetStream = new NetStream(videoConnection); 
            videoStream.client = this; 
            var video:Video = new Video(); 
             
            addChild(video); 
             
            video.attachNetStream(videoStream); 
             
            videoStream.play("video.f4v"); 
        } 
         
        public function onMetaData(info:Object):void { 
            trace("onMetaData fired"); 
        } 
         
        public function onXMPData(infoObject:Object):void 
        { 
            trace("onXMPData Fired\n"); 
             //trace("raw XMP =\n"); 
             //trace(infoObject.data); 
            var cuePoints:Array = new Array(); 
            var cuePoint:Object; 
            var strFrameRate:String; 
            var nTracksFrameRate:Number; 
            var strTracks:String = ""; 
            var onXMPXML = new XML(infoObject.data); 
            // Set up namespaces to make referencing easier 
            var xmpDM:Namespace = new Namespace("http://ns.adobe.com/xmp/1.0/DynamicMedia/"); 
            var rdf:Namespace = new Namespace("http://www.w3.org/1999/02/22-rdf-syntax-ns#"); 
            for each (var it:XML in onXMPXML..xmpDM::Tracks) 
            { 
                 var strTrackName:String = it.rdf::Bag.rdf::li.rdf::Description.@xmpDM::trackName; 
                 var strFrameRateXML:String = it.rdf::Bag.rdf::li.rdf::Description.@xmpDM::frameRate; 
                 strFrameRate = strFrameRateXML.substr(1,strFrameRateXML.length); 
                 
                 nTracksFrameRate = Number(strFrameRate);  
                 
                 strTracks += it; 
            } 
            var onXMPTracksXML:XML = new XML(strTracks); 
            var strCuepoints:String = ""; 
            for each (var item:XML in onXMPTracksXML..xmpDM::markers) 
            { 
                strCuepoints += item; 
            } 
            trace(strCuepoints); 
        } 
    } 
}

startrekintro.f4v adında kısa bir video dosyası için, bu örnek aşağıdaki izleme satırlarını üretir. Satırlar, XMP meta verilerinde gezinme ve olay işaret noktaları için işaret noktası verilerini gösterir:

onMetaData fired 
onXMPData Fired 
 
<xmpDM:markers xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpDM="http://ns.adobe.com/xmp/1.0/DynamicMedia/" xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:x="adobe:ns:meta/"> 
  <rdf:Seq> 
    <rdf:li> 
      <rdf:Description xmpDM:startTime="7695905817600" xmpDM:name="Title1" xmpDM:type="FLVCuePoint" xmpDM:cuePointType="Navigation"> 
        <xmpDM:cuePointParams> 
          <rdf:Seq> 
            <rdf:li xmpDM:key="Title" xmpDM:value="Star Trek"/> 
            <rdf:li xmpDM:key="Color" xmpDM:value="Blue"/> 
          </rdf:Seq> 
        </xmpDM:cuePointParams> 
      </rdf:Description> 
    </rdf:li> 
    <rdf:li> 
      <rdf:Description xmpDM:startTime="10289459980800" xmpDM:name="Title2" xmpDM:type="FLVCuePoint" xmpDM:cuePointType="Event"> 
        <xmpDM:cuePointParams> 
          <rdf:Seq> 
            <rdf:li xmpDM:key="William Shatner" xmpDM:value="First Star"/> 
            <rdf:li xmpDM:key="Color" xmpDM:value="Light Blue"/> 
          </rdf:Seq> 
        </xmpDM:cuePointParams> 
      </rdf:Description> 
    </rdf:li> 
  </rdf:Seq> 
</xmpDM:markers> 
onMetaData fired
Not: XMP verilerinde, zaman saniye olarak değil, DVA Onay İşaretleri olarak saklanır. İşaret noktası zamanını hesaplamak için, başlangıç zamanını kare hızına bölün. Örneğin, 254016000000 değerine bölünmüş 7695905817600 başlangıç zamanı, 30:30 değerine eşittir.

Kare hızını da içeren ham XMP meta verilerinin tamamını görmek için, onXMPData() işlevinin başında ikinci ve üçüncü trace() deyimlerinin başında bulunan yorum tanımlayıcılarını (//) kaldırın.

Görüntü meta verilerini kullanma

onImageData olayı, görüntü verilerini AMF0 veri kanalı üzerinden bir bayt dizisi olarak gönderir. Veriler JPEG, PNG veya GIF formatları. Bu bilgileri işlemek için, onCuePoint ve onMetaData öğelerinin geri çağrı yöntemlerini tanımladığınız aynı şekilde onImageData() geri çağrı yöntemini de tanımlayın. Aşağıdaki örnek, bir onImageData() geri çağrı yöntemini kullanarak görüntü verilerine erişir ve bu verileri görüntüler:

public function onImageData(imageData:Object):void 
{ 
    // display track number 
    trace(imageData.trackid); 
    var loader:Loader = new Loader(); 
    //imageData.data is a ByteArray object 
    loader.loadBytes(imageData.data); 
    addChild(loader); 
} 

Metin meta verilerini kullanma

onTextData olayı, AMF0 veri kanalı üzerinden metin verileri gönderir. Metin verisi UTF-8 formatındadır ve 3GP zamanlanmış metin belirtimini esas alarak formatlama hakkında ek bilgiler içerir. Belirtim, standartlaştırılmış bir altyazı formatını tanımlar. Bu bilgileri işlemek için, onCuePoint veya onMetaData öğesinin geri çağrı yöntemlerini tanımladığınız aynı şekilde onTextData() geri çağrı yöntemini de tanımlayın. Aşağıdaki örnekte, onTextData() yöntemi parça kimliğini ve karşılık gelen parça metnini görüntüler.

public function onTextData(textData:Object):void 
{ 
    // display the track number 
    trace(textData.trackid); 
    // displays the text, which can be a null string, indicating old text 
    // that should be erased 
    trace(textData.text); 
}