Scenvideo är en funktion i körningstiden som förbättrar videouppspelning och enhetsprestanda. Funktionen skapas och bibehålls av körningstiden. Som utvecklare består ditt arbete av att konfigurera ditt program så att det kan utnyttja funktionen.
För att utnyttja scenvideo implementerar du ett ramverk med händelsehanterare, som identifierar när scenvideo är tillgängligt och inte. När du får ett meddelande om att scenvideo är tillgängligt hämtar du ett StageVideo-objekt från egenskapen
Stage.stageVideos
. Det här Vector-objektet fylls automatiskt i med ett eller flera StageVideo-objekt. Du kan sedan använda ett av dessa StageVideo-objekt, i stället för ett Video-objekt, för att visa direktuppspelad video.
När du får ett meddelande i Flash Player om att scenvideo inte längre är tillgängligt växlar du tillbaka videoströmmen till ett Video-objekt.
Obs!
Du kan inte skapa StageVideo-objekt.
Egenskapen Stage.stageVideos
Egenskapen
Stage.stageVideos
är ett Vector-objekt som ger dig tillgång till StageVideo-instanser. Den här vektorn kan innehålla upp till fyra StageVideo-objekt, beroende på maskinvara och systemresurser. Mobilenheter kan vara begränsade till ett eller inga alls.
När scenvideo inte är tillgängligt innehåller den här vektorn inga objekt. Se till att du bara använder medlemmar i den här vektorn när den senaste
StageVideoAvailability
-händelsen anger att scenen är tillgänglig, annars kan du råka ut för körningsfel.
StageVideo-händelser
Ramverket för StageVideo-API:t tillhandahåller följande händelser:
-
StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY
-
Skickas när egenskapen
Stage.stageVideos
ändras. Egenskapen
StageVideoAvailabilityEvent.availability
anger antingen
AVAILABLE
eller
UNAVAILABLE
. Använd den här händelsen för att avgöra om egenskapen
stageVideos
innehåller några StageVideo-objekt, i stället för att kontrollera längden på
Stage.stageVideos
-vektorn direkt.
-
StageVideoEvent.RENDER_STATE
-
Skickas när ett NetStream- eller Camera-objekt har kopplats till ett StageVideo-objekt och håller på att spelas upp. Anger vilken typ av avkodning som används: maskinvara, programvara eller ej tillgängligt (inget visas). Händelsemålet innehåller egenskaperna
videoWidth
och
videoHeight
som utan risk kan användas för att ändra storlek på videovisningsrutan.
Viktigt!
Koordinater som hämtas från StageVideo-målobjektet använder Stage-koordinater eftersom de inte ingår i standardvisningslistan.
-
VideoEvent.RENDER_STATE
-
Skickas när ett Video-objekt används. Anger om programvaruavkodning eller maskinvaruaccelererad avkodning används. Om den här händelsen visar på maskinvaruaccelererad avkodning växlar du om möjligt till ett StageVideo-objekt. Video-händelsemålet innehåller egenskaperna
videoWidth
och
videoHeight
som utan risk kan användas för att ändra storlek på videovisningsrutan.
Arbetsflöde för att implementera funktionen StageVideo
Följ de här stegen om du vill implementera funktionen StageVideo:
-
Lyssna efter händelsen
StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY
om du vill veta när vektorn
Stage.stageVideos
har ändrats. Mer information finns i
Använda händelsen StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY
.
-
Om händelsen
StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY
rapporterar att scenvideo är tillgängligt använder du vektorobjektet
Stage.stageVideos
i händelsehanteraren för att få åtkomst till ett StageVideo-objekt.
-
Bifoga ett NetStream-objekt med
StageVideo.attachNetStream()
eller bifoga ett Camera-objekt med
StageVideo.attachCamera()
.
-
Spela upp videofilmen med
NetStream.play()
.
-
Lyssna efter händelsen
StageVideoEvent.RENDER_STATE
på StageVideo-objektet om du vill fastställa statusen för den video som spelas upp. Ett kvitto på den här händelsen anger även att bredd- och höjdegenskaperna för den videon har initierats eller ändrats. Mer information finns i
Använda händelserna StageVideoEvent.RENDER_STATE och VideoEvent.RENDER_STATE
.
-
Lyssna efter händelsen
VideoEvent.RENDER_STATE
på Video-objektet. Den här händelsen tillhandahåller samma status som
StageVideoEvent.RENDER_STATE
, så du kan använda den om du vill fastställa om GPU-acceleration är tillgänglig. Ett kvitto på den här händelsen anger även att bredd- och höjdegenskaperna för den videon har initierats eller ändrats. Mer information finns i
Använda händelserna StageVideoEvent.RENDER_STATE och VideoEvent.RENDER_STATE
.
Initiera StageVideo-händelseavlyssnare
Konfigurera StageVideoAvailabilityEvent- och VideoEvent-avlyssnare under programinitieringen. Du kan till exempel initiera dessa lyssnare i
flash.events.Event.ADDED_TO_STAGE
-händelsehanteraren. Den här händelsen garanterar att programmet syns på scenen:
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);
//...
}
Använda händelsen StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY
I
StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY
-hanteraren avgör du om du ska använda ett Video- eller ett StageVideo-objekt baserat på tillgängligheten för StageVideo. Om egenskapen
StageVideoAvailabilityEvent.availability
är inställd på
StageVideoAvailability.AVAILABLE
använder du StageVideo. I det här fallet kan du vara säker på att Stage.stageVideos-vektorn innehåller ett eller flera StageVideo-objekt. Hämta ett StageVideo-objekt från egenskapen
Stage.stageVideos
och bifoga NetStream-objektet till det. Eftersom StageVideo-objekt alltid visas i bakgrunden tar du bort eventuella Video-objekt (alltid i förgrunden). Du använder även den här händelsehanteraren för att lägga till en avlyssnare för
StageVideoEvent.RENDER_STATE
-händelsen.
Om egenskapen
StageVideoAvailabilityEvent.availability
är inställd på
StageVideoAvailability.UNAVAILABLE
använder du inte StageVideo och öppnar inte heller
Stage.stageVideos
-vektorn. Bifoga i så fall NetStream-objektet till ett Video-objekt. Lägg till slut till StageVideo- eller Video-objektet till scenen och anropa
NetStream.play()
.
Följande kod visar hur händelsen
StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY
ska hanteras:
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);
}
}
Viktigt!
Den första gången ett program öppnar vektorelementet vid Stage.stageVideos[0] anges standardrektangeln till 0,0,0,0, och för panorerings- och zoomegenskaperna används standardvärden. Återställ alltid de här värdena som du vill ha dem. Du kan använda egenskaperna
videoWidth
och
videoHeight
för händelsemålet
StageVideoEvent.RENDER_STATE
eller
VideoEvent.RENDER_STATE
för att beräkna videovisningsrutans dimensioner.
Hämta den fullständiga källkoden för det här exempelprogrammet på
Komma igång med scenvideo
.
Använda händelserna StageVideoEvent.RENDER_STATE och VideoEvent.RENDER_STATE
StageVideo- och Video-objekt skickar händelser som informerar program när återgivningsmiljön visas. Händelserna är
StageVideoEvent.RENDER_STATE
och
VideoEvent.RENDER_STATE
.
Ett StageVideo- eller Video-objekt skickar en återgivningstillståndshändelse när ett NetStream-objekt bifogas och börjar spelas upp. Dessutom skickas den här händelsen när återgivningsmiljön ändras, till exempel om videovisningsrutan får en ny storlek. Använd dessa aviseringar för att återställa visningsrutan till aktuella
videoHeight
- och
videoWidth
-värden för händelsemålobjektet.
Rapporterade återgivningstillstånd omfattar:
Återgivningstillstånden anger när maskinvaruaccelererad avkodning används, oavsett vilken klass som för närvarande spelar upp video. Kontrollera egenskapen
StageVideoEvent.status
om du vill ta reda på om den nödvändiga avkodningen är tillgänglig. Om egenskapen anges som "unavailable" kan StageVideo-objektet inte spela upp videon. Vid det här tillståndet krävs det att du omedelbart bifogar NetStream-objektet igen till ett Video-objekt. Andra tillstånd informerar programmet om aktuella återgivningsförhållanden.
I följande tabell beskrivs innebörden av alla värden för återgivningstillstånd för StageVideoEvent- och VideoEvent- objekt i Flash Player:
|
VideoStatus.ACCELERATED
|
VideoStatus.SOFTWARE
|
VideoStatus.UNAVAILABLE
|
StageVideoEvent
|
Både avkodning och presentation sker i maskinvaran. (Bästa prestanda.)
|
Presentation i maskinvara, avkodning i programvara. (Acceptabla prestanda.)
|
Inga GPU-resurser är tillgängliga för att hantera videon och inget visas.
Fall tillbaka på ett Video-objekt.
|
VideoEvent
|
Presentation i programvara, avkodning i maskinvara. (Acceptabla prestanda endast på modern, stationär dator. Försämrade helskärmsprestanda.)
|
Presentation i programvara, avkodning i programvara. (Sämst för prestanda. Försämrade helskärmsprestanda.)
|
(Ej tillämpligt)
|
Färgrymder
Scenvideo använder underliggande maskinvarufunktioner för att ge stöd åt färgrymder. SWF-innehåll kan tillhandahålla metadata som anger önskad färgrymd. Det är emellertid enhetens maskinvara för grafik som avgör om den färgrymden kan användas. Vissa enheter har stöd för flera färgrymder, andra inga alls. Om maskinvaran saknar stöd för den begärda färgrymden försöker Flash Player hitta den bästa matchningen bland de färgrymder som stöds.
Om du vill veta vilka färgrymder maskinvaran har stöd för använder du egenskapen
StageVideo.colorSpaces
. Den här egenskapen returnerar en lista över de färgrymder som stöds i en String-vektor:
var colorSpace:Vector.<String> = stageVideo.colorSpaces();
Om du vill veta vilken färgrymd den video som spelas upp använder kontrollerar du egenskapen
StageVideoEvent.colorSpace
. Kontrollera den här egenskapen i händelsehanteraren för händelsen
StageVideoEvent.RENDER_STATE
:
var currColorSpace:String;
//StageVideoEvent.RENDER_STATE event handler
private function stageVideoRenderState(event:Object):void
{
//...
currColorSpace = (event as StageVideoEvent).colorSpace;
//...
}
Om det inte går att hitta en ersättning för en färgrymd som inte stöds använder scenvideon standardfärgrymden BT.601. Videoströmmar med H.264-kodning använder till exempel oftast BT.709-färgrymden. Om enhetens maskinvara saknar stöd för BT.709 returnerar egenskapen
colorSpace
värdet
"BT601"
. Ett
StageVideoEvent.colorSpace
-värde på
"unknown"
anger att maskinvaran saknar funktioner för att fråga efter färgrymden.
Om den aktuella färgrymden inte kan användas av ditt program kan du välja att växla från ett StageVideo-objekt till ett Video-objekt. Klassen Video har stöd för alla färgrymder via programvarusammansättning.
|
|
|