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:
-
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
.
-
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.
-
StageVideo.attachNetStream()
kullanarak bir NetStream nesnesi veya
StageVideo.attachCamera()
kullanarak bir Camera nesnesi ekleyin.
-
NetStream.play()
öğesini kullanarak videoyu oynatın.
-
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
.
-
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:
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.
|
|
|