StageVideo API'lerini kullanma

Sahne alanı videosu çalışma zamanı içindeki video oynatmayı ve aygıt performansını geliştiren bir mekanizmadır. Çalışma zamanı bu mekanizmayı oluşturur ve sürdürür. Geliştirici olarak sizin rolünüz bundan faydalanmak üzere uygulamanızı konfigüre etmektir.

Sahne alanı videosunu kullanmak için sahne alanı videosunun kullanılabilir olduğu ve kullanılamaz olduğu zamanları belirleyen olay işleyicileri çerçevesi uygularsınız. Sahne alanı videosunun kullanılabilir olduğu bildirimini aldığınızda Stage.stageVideos özelliğinden bir StageVideo nesnesi alırsınız. Çalışma zamanı bu Vector nesnesini bir veya daha fazla StageVideo nesnesiyle doldurur. Bundan sonra akış halindeki videoları görüntülemek için Video nesnesi yerine sağlanan StageVideo nesnelerinden birini kullanabilirsiniz.

Flash Player'da, sahne alanı videosunun artık kullanılabilir durumda olmadığına ilişkin bir bildirim aldığınızda video akışınızı Video nesnesine geri döndürün.

Not: StageVideo nesneleri oluşturamazsınız.

Stage.stageVideos özelliği

Stage.stageVideos özelliği size StageVideo örneklerine erişim sağlayan bir Vector nesnesidir. Bu vektör donanım ve sistem kaynaklarına bağlı olarak dört adete kadar StageVideo nesnesi içerebilir. Mobil aygıtlarda bir tane bulunabilir veya hiç bulunmayabilir.

Sahne alanı videosu kullanılabilir olmadığında bu vektör herhangi bir nesne içermez. Çalışma zamanı hatalarından kaçınmak için bu vektörün üyelerine yalnızca sahne alanı videosunun kullanılabilir olduğunu belirten en güncel StageVideoAvailability olayını aldığınızda eriştiğinizden emin olun.

StageVideo olayları

StageVideo API çerçevesi aşağıdaki olayları sağlar:

StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY
Stage.stageVideos özelliği değiştiğinde gönderilir. StageVideoAvailabilityEvent.availability özelliği AVAILABLE veya UNAVAILABLE öğesini gösterir. Bu olayı stageVideos özelliğinin doğrudan Stage.stageVideos vektörünün uzunluğunu kontrol etmek yerine herhangi bir StageVideo nesnesi içerip içermeyeceğini belirlemek için kullanın.

StageVideoEvent.RENDER_STATE
Bir NetStream veya Camera nesnesi bir StageVideo nesnesine eklendiğinde ve oynatıldığında gönderilir. Geçerli olarak kullanımda olan kod çözme türünü gösterir: donanım, yazılım veya yok (hiçbir şey görüntülenmez). Olay hedefi video görünüm penceresini yeniden boyutlandırmak üzere kullanmak için güvenli olan videoWidth ve videoHeight özelliklerini içerir.
Önemli: StageVideo hedef nesnesinden alınan koordinatlar, standart görüntüleme listesinin bir parçası olmadıklarından Sahne Alanı koordinatlarını kullanır.

VideoEvent.RENDER_STATE
Bir Video nesnesi kullanılırken gönderilir. Yazılım veya donanım hızlandırmalı kod çözmenin kullanımda olup olmadığını belirtir. Bu olay donanım hızlandırmalı kod çözmeyi gösteriyorsa, mümkünse StageVideo nesnesine geçin. Video olay hedefi video görünüm penceresini yeniden boyutlandırmak üzere kullanmak için güvenli olan videoWidth ve videoHeight özelliklerini içerir.

StageVideo özelliğini uygulamak için iş akışı

StageVideo özelliğini uygulamak için şu üst düzey adımları izleyin:

  1. Stage.stageVideos vektörünün ne zaman değiştiğini öğrenmek için StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY olayını dinleyin. Bkz. StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY olayını kullanma .

  2. StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY olayı sahne alanı videosunun kullanılabilir olduğunu bildirirse, StageVideo nesnesine erişmek için olay işleyicisinin içindeki Stage.stageVideos Vector nesnesini kullanın.

  3. StageVideo.attachNetStream() kullanarak bir NetStream nesnesi veya StageVideo.attachCamera() kullanarak bir Camera nesnesi ekleyin.

  4. NetStream.play() öğesini kullanarak videoyu oynatın.

  5. Video oynatma işleminin durumunu belirlemek için StageVideo nesnesi üzerinde StageVideoEvent.RENDER_STATE olayını dinleyin. Bu olayın alınması, videonun genişlik ve yükseklik özelliklerinin başlatıldığını veya değiştirildiğini de belirtir. Bkz. StageVideoEvent.RENDER_STATE ve VideoEvent.RENDER_STATE olaylarını kullanma .

  6. Video nesnesi üzerinde VideoEvent.RENDER_STATE olayını dinleyin. Bu olay, StageVideoEvent.RENDER_STATE ile aynı durumları sağlar, bu nedenle GPU hızlandırmasının kullanılabilir olup olmadığını belirlemek için de bunu kullanabilirsiniz. Bu olayın alınması, videonun genişlik ve yükseklik özelliklerinin başlatıldığını veya değiştirildiğini de belirtir. Bkz. StageVideoEvent.RENDER_STATE ve VideoEvent.RENDER_STATE olaylarını kullanma .

StageVideo olay dinleyicilerini başlatma

Uygulama başlatılırken StageVideoAvailabilityEvent ve VideoEvent dinleyicilerinizi ayarlayın. Örneğin, bu dinleyicileri flash.events.Event.ADDED_TO_STAGE olay işleyicisinde başlatabilirsiniz. Bu olay uygulamanızın sahne alanında görünür olacağını garantiler:

public class SimpleStageVideo extends Sprite 
    private var nc:NetConnection; 
    private var ns:NetStream; 
 
    public function SimpleStageVideo() 
    { 
        // Constructor for SimpleStageVideo class 
        // Make sure the app is visible and stage available 
        addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); 
    } 
     
    private function onAddedToStage(event:Event):void 
    { 
        //... 
        // Connections 
        nc = new NetConnection(); 
        nc.connect(null); 
        ns = new NetStream(nc); 
        ns.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus); 
        ns.client = this; 
 
        // Screen 
        video = new Video(); 
        video.smoothing = true; 
 
        // Video Events 
        // the StageVideoEvent.STAGE_VIDEO_STATE informs you whether 
        // StageVideo is available 
        stage.addEventListener(StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY, 
            onStageVideoState); 
        // in case of fallback to Video, listen to the VideoEvent.RENDER_STATE 
        // event to handle resize properly and know about the acceleration mode running 
        video.addEventListener(VideoEvent.RENDER_STATE, videoStateChange); 
        //... 
    }

StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY olayını kullanma

StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY işleyicisinde StageVideo'nun kullanılabilirlik durumuna göre Video nesnesi mi yoksa StageVideo nesnesi mi kullanacağınıza karar verin. StageVideoAvailabilityEvent.availability özelliği StageVideoAvailability.AVAILABLE olarak ayarlıysa StageVideo nesnesini kullanın. Bu durumda, Stage.stageVideos vektörünün bir veya daha fazla StageVideo nesnesi içereceğine güvenebilirsiniz. Stage.stageVideos özelliğinden bir StageVideo nesnesi alın ve NetStream nesnesini buna ekleyin. StageVideo nesneleri her zaman arka planda görüntülendiğinden, varolan Video nesnelerini (her zaman ön plandadır) kaldırın. Ayrıca bu olay işleyicisini StageVideoEvent.RENDER_STATE olayı için bir dinleyici eklemek üzere kullanabilirsiniz.

StageVideoAvailabilityEvent.availability özelliği StageVideoAvailability.UNAVAILABLE olarak ayarlıysa StageVideo nesnesini kullanmayın veya Stage.stageVideos vektörüne erişmeyin. Bu durumda, NetStream nesnesini bir Video nesnesi ekleyin. Son olarak, StageVideo veya Video nesnesini sahne alanına ekleyin ve NetStream.play() öğesini çağırın.

Aşağıdaki kod StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY olayının nasıl işleneceğini gösterir:

private var sv:StageVideo; 
private var video:Video; 
 
private function onStageVideoState(event:StageVideoAvailabilityEvent):void 
{     
    // Detect if StageVideo is available and decide what to do in toggleStageVideo 
    toggleStageVideo(event.availability == StageVideoAvailability.AVAILABLE); 
} 
 
private function toggleStageVideo(on:Boolean):void 
{     
    // To choose StageVideo attach the NetStream to StageVideo 
    if (on) 
    { 
        stageVideoInUse = true; 
        if ( sv == null ) 
        { 
            sv = stage.stageVideos[0]; 
            sv.addEventListener(StageVideoEvent.RENDER_STATE, stageVideoStateChange); 
                sv.attachNetStream(ns); 
        } 
 
        if (classicVideoInUse) 
        { 
            // If you use StageVideo, remove from the display list the 
            // Video object to avoid covering the StageVideo object 
            // (which is always in the background) 
            stage.removeChild ( video ); 
            classicVideoInUse = false; 
        } 
    } else 
    { 
        // Otherwise attach it to a Video object 
        if (stageVideoInUse) 
            stageVideoInUse = false; 
        classicVideoInUse = true; 
        video.attachNetStream(ns); 
        stage.addChildAt(video, 0); 
    } 
     
    if ( !played ) 
    { 
        played = true; 
        ns.play(FILE_NAME); 
    } 
} 
Önemli: Uygulama Stage.stageVideos[0] öğesinde vektör öğesine ilk eriştiğinde, varsayılan dikdörtgen 0,0,0,0 olarak ayarlıdır ve kaydırma ve yakınlaştırma özellikleri varsayılan değerleri kullanır. Bu değerleri her zaman tercih ettiğiniz ayarlara sıfırlayın. Video görünüm penceresinin boyutlarını hesaplamak için StageVideoEvent.RENDER_STATE veya VideoEvent.RENDER_STATE öğesinin videoWidth ve videoHeight özelliklerini kullanabilirsiniz.

Sahne Alanı Videosuna Başlarken bağlantısından bu örnek uygulamanın tam kaynak kodunu indirin.

StageVideoEvent.RENDER_STATE ve VideoEvent.RENDER_STATE olaylarını kullanma

StageVideo ve Video nesneleri görüntüleme ortamı değiştiğinde uygulamaları bilgilendiren olaylar gönderir. Bu olaylar StageVideoEvent.RENDER_STATE ve VideoEvent.RENDER_STATE olaylarıdır.

Bir StageVideo veya Video nesnesi NetStream nesnesi eklendiğinde ve oynatılmaya başladığında oluşturma durumu olayı gönderir. Bu olayı ayrıca görüntüleme ortamı değiştiğinde gönderir. Örneğin, video görünüm penceresi yeniden boyutlandırıldığında. Bu bildirimleri, görünüm pencerenizi olay hedef nesnesinin geçerli videoHeight ve videoWidth değerlerine sıfırlamak için kullanın.

Bildirilen oluşturma durumları şunları içerir:

  • RENDER_STATUS_UNAVAILABLE

  • RENDER_STATUS_SOFTWARE

  • RENDER_STATUS_ACCELERATED

Oluşturma durumları, hangi sınıfın o anda videoyu oynattığına bakılmaksızın, donanım hızlandırmalı kod çözme işleminin ne zaman kullanıldığını gösterir. Gerekli kod çözme işleminin mevcut olup olmadığını kontrol etmek için StageVideoEvent.status özelliğini kullanın. Özellik “unavailable” olarak ayarlanmışsa, StageVideo nesnesi videoyu oynatamaz. Bu durum NetStream nesnesini hemen bir Video nesnesine yeniden eklemenizi gerektirir. Diğer durumlar uygulamanıza geçerli oluşturma koşullarıyla ilgili bilgi verir.

Aşağıdaki tablo Flash Player'daki StageVideoEvent ve VideoEvent nesneleri için tüm oluşturma durumu değerlerinin etkilerini açıklar:

VideoStatus.ACCELERATED

VideoStatus.SOFTWARE

VideoStatus.UNAVAILABLE

StageVideoEvent

Kod çözme ve gösterim donanımda gerçekleşir. (En iyi performans.)

Donanımda gösterim, yazılımda kod çözme. (Kabul edilebilir performans.)

Videoyu işlemek için mevcut GPU kaynağı yok ve hiçbir şey görüntülenmiyor. Video nesnesine geri döner.

VideoEvent

Yazılımda gösterim, donanımda kod çözme. (Yalnızca modern bir masaüstü sisteminde kabul edilebilir performans. Düşük düzeyli tam ekran performansı.)

Yazılımda gösterim, donanımda gösterim. (En kötü performans durumu. Düşük düzeyli tam ekran performansı.)

(Yok)

Renk alanları

Sahne alanı videosu renk alanlarını desteklemek için temelde bulunan donanım özelliklerini kullanır. SWF içeriği tercih ettiği renk alanını gösteren bir meta veri sağlayabilir. Ancak, renk alanının kullanılıp kullanılamayacağını aygıtın grafik donanımı belirler. Bir aygıt birkaç renk alanını desteklerken başka bir aygıt hiçbirini desteklemeyebilir. Donanım istenilen renk alanını desteklemiyorsa, Flash Player desteklenen renk alanları arasından en yakın eşleşmeyi bulmaya çalışır.

Donanımın hangi renk alanlarını desteklediğini sorgulamak için StageVideo.colorSpaces özelliğini kullanın. Bu özellik bir String vektöründe desteklenen renk alanlarının listesini döndürür:

var colorSpace:Vector.<String> = stageVideo.colorSpaces();

O anda oynatılan videonun hangi renk alanını kullandığını öğrenmek için StageVideoEvent.colorSpace özelliğini kontrol edin. Bu özelliği StageVideoEvent.RENDER_STATE olayı için olay işleyicinizde kontrol edin:

var currColorSpace:String; 
 
//StageVideoEvent.RENDER_STATE event handler 
private function stageVideoRenderState(event:Object):void 
{ 
    //... 
    currColorSpace = (event as StageVideoEvent).colorSpace; 
    //... 
}

Flash Player desteklenmeyen bir renk alanı için yerine geçecek bir alan bulamazsa, sahne alanı videosu varsayılan renk alanı BT.601'i kullanır. Örneğin, H.264 kodlamalı video akışları genellikle BT.601 renk alanını kullanır. Aygıt donanımı BT.709'u desteklemiyorsa colorSpace özelliği "BT601" öğesini döndürür. "unknown" öğesinin StageVideoEvent.colorSpace değeri donanımın renk alanını sorgulamak için araç sağlamadığını gösterir.

Uygulamanız geçerli renk alanının kabul edilemez olduğunu varsayarsa, StageVideo nesnesinden Video nesnesine geçiş yapmayı seçebilirsiniz. Video sınıfı yazılım birleştirme aracılığıyla tüm renk alanlarını destekler.