Adsense Banner

VideostreamMaterial

Papervision3D - Il VideoStreamMaterial


logoPV3DSebbene sia possibile applicare il video come materiale manualmente utilizzando MovieMaterial, la classe VideoStreamMaterial lo fa automaticamente per voi.
La classe si chiama VideoStreamMaterial e si estende MovieMaterial. il costruttore prende quattro parametri:

Parameter  Data type Default value  Description 
1 video Video - Un'istanza video utilizzata come sorgente da cui prendere
le istantanee.
2 stream NetStream - Un'istanza NetStream utilizzata per controllare il video.
3 precise Boolean
false
Definisce la precisione del materiale.
4 transparent Boolean false Definisce se il materiale supporta la trasparenza.

Questa classe consente di visualizzare video in streaming o progressivo. È inoltre possibile utilizzare
l'output di una webcam come input per questa classe. Creiamo un esempio basato sul video proveniente dalla webcam. Questo esempio utilizza un paio di classi diverse.

import flash.events.Event;
import flash.media.Camera;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
import org.papervision3d.materials.VideoStreamMaterial;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.view.BasicView;

Il primo parametro per istanziare la classe VideoStreamMaterial è un oggetto video. Abbiamo bisogno di definire un oggetto video e collegarci una camera ad esso. Questo viene fatto esattamente come si farebbe normalmente collegando una camera a un oggetto video.

private var plane:Plane;private function init():void
{
  var video:Video = new Video();
  video.attachCamera(Camera.getCamera());

Se si utilizza una camera come ingresso video, e non si trasmette l'uscita della stessa ad un server di streaming, né un oggetto NetStream né un oggetto NetConnection sono necessari. Tuttavia, queste classi sono fondamentali quando si vuole riprodurre in streaming o un video progressivo. 
Per quanto riguarda questo esempio, creiamo un nuovo oggetto NetConnection che si collega con niente (null) e creiamo un nuovo oggetto NetStream. Bisogna connettersi con il nulla, poichè la classe NetStream necessita di una connessione in rete per essere istanziata. Il collegamento con il nulla è un piccolo trucco per contrassegnare una connessione di rete come collegata. Quando si desidera connettersi a un server di streaming, è necessario effettuare un vero collegamento.

var conn:NetConnection = new NetConnection();
conn.connect(null);
var stream:NetStream = new NetStream(conn);

La prossima cosa che dobbiamo fare è la creazione di un nuovo materiale dal video di ingresso e dal suo flusso. Sicccome un video è un'animazione e cambia costantemente, abbiamo bisogno di impostare la proprietà animata su true e tanto che ci siamo rendiamo attiva anche la proprietà doubleside visto che applicheremo il materiale su un piano in rotazione.

var material:VideoStreamMaterial = new VideoStreamMaterial (video, stream);
material.animated = true;
material.doubleSided = true;

Il nostro passo finale è quello di creare un piano. In questo caso, gli daremo una dimensione di 640 per 480, così apparirà sullo schermo con le proporzioni corrette.

  plane = new Plane(material,640,480,3,3);
  scene.addChild(plane);

Aggiungiamo la solita rotazione del piano giusto per dare la sensazione della tridimensionalità

plane.rotationY++;

Dopo la pubblicazione di questo codice, Flash per prima cosa vi chiede di concedere l'accesso alla vostra netcam.

Una volta autorizzato l'accesso, si dovrebbe vedere l'ingresso video sull'oggetto piano creato.

Problemi di violazione della sicurezza sandbox
Ci sono due situazioni in cui il riproduttore Flash genera un messaggio di violazione della sandbox:
• Streaming progressivo da un altro dominio
• Streaming attraverso un non-Flash Media Server 3
Quando la riproduzione di un file video progressivo proveniente da un altro dominio, diverso da quello in cui si trova il file SWF, ci sarà una violazione della sicurezza. Questo è un problema noto in Flash e non può essere risolto, a meno di copiare i file FLV nello stesso dominio.
Lo streaming di un video utilizzando un server di streaming al posto di un download progressivo porta comunque a problemi di violazione della sicurezza sandbox. In passato, c'è stato un hack workaround per ottenere questo al lavoro, che è implementato nella classe VideoStreamMaterial. Non fatevi confondere quindi, quando guardando i commenti all'interno della classe o nelle mailing list trovate messaggi su questo problema. L'unico modo per risolvere il problema è quello di utilizzare Flash Media Server 3 e impostazione Client.videoSampleAccess a public domain sul server.

Filippo Porcari
Author: Filippo PorcariWebsite: http://filippo.porcari.oranjuice.org/Email: Questo indirizzo email è protetto dagli spambots. E' necessario abilitare JavaScript per vederlo.
designer freelance
Sono un graphic designer e mi occupo di pubblicità. Da più di 10 anni dedico le mie energie alla realizzazioni d'immagine aziendale e comunicazione visiva con un'attenzione alle nuove tecnologie del web. Da qualche anno ho scoperto il software open source e mi sono dedicato alla sua introduzione nel mio workflow produttivo ottenendo ottimi risultati.