home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Templates / Flash / flashmo_101_3d_carousel / org / papervision3d / materials / VideoStreamMaterial.as < prev    next >
Text File  |  2007-07-18  |  7KB  |  195 lines

  1. /*
  2.  *  PAPER    ON   ERVIS  NPAPER ISION  PE  IS ON  PERVI IO  APER  SI  PA
  3.  *  AP  VI  ONPA  RV  IO PA     SI  PA ER  SI NP PE     ON AP  VI ION AP
  4.  *  PERVI  ON  PE VISIO  APER   IONPA  RV  IO PA  RVIS  NP PE  IS ONPAPE
  5.  *  ER     NPAPER IS     PE     ON  PE  ISIO  AP     IO PA ER  SI NP PER
  6.  *  RV     PA  RV SI     ERVISI NP  ER   IO   PE VISIO  AP  VISI  PA  RV3D
  7.  *  ______________________________________________________________________
  8.  *  papervision3d.org ┬ò blog.papervision3d.org ┬ò osflash.org/papervision3d
  9.  */
  10.  
  11. /*
  12.  * Copyright 2006 (c) Carlos Ulloa Matesanz, noventaynueve.com.
  13.  *
  14.  * Permission is hereby granted, free of charge, to any person
  15.  * obtaining a copy of this software and associated documentation
  16.  * files (the "Software"), to deal in the Software without
  17.  * restriction, including without limitation the rights to use,
  18.  * copy, modify, merge, publish, distribute, sublicense, and/or sell
  19.  * copies of the Software, and to permit persons to whom the
  20.  * Software is furnished to do so, subject to the following
  21.  * conditions:
  22.  *
  23.  * The above copyright notice and this permission notice shall be
  24.  * included in all copies or substantial portions of the Software.
  25.  *
  26.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  27.  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  28.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  29.  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  30.  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  31.  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  32.  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  33.  * OTHER DEALINGS IN THE SOFTWARE.
  34.  */
  35.  
  36.  /**
  37.  * @author Patrick Pietens
  38.  * @author John Grden
  39.  * @author Carlos Ulloa
  40.  * 
  41.  * @note Special thanks to Patrick Pietens for putting this together and flushing it out!
  42.  */ 
  43.  
  44. // __________________________________________________________________________ VIDEO MATERIAL
  45.  
  46. package org.papervision3d.materials
  47. {
  48.     import flash.display.BitmapData;
  49.     import flash.events.NetStatusEvent;
  50.     import flash.geom.Matrix;
  51.     import flash.media.Video;
  52.     import flash.net.NetStream;
  53.  
  54.     /*
  55.     * The VideoMaterial class creates a texture from an existing Video instance and is for use with a Video and NetStream objects with an RTMP stream.
  56.     * <p/>
  57.     * The texture can be animated and/or transparent.
  58.     * <p/>
  59.     * Materials collects data about how objects appear when rendered.
  60.     */
  61.     public class VideoStreamMaterial extends MovieMaterial
  62.     {        
  63.         // ______________________________________________________________________ PUBLIC
  64.     
  65.         /**
  66.          * The NetStream and Vdeo that are used as a texture.
  67.          */        
  68.         public var stream:NetStream;
  69.         public var video:Video;
  70.         
  71.         
  72.         // ______________________________________________________________________ NEW
  73.     
  74.         /**
  75.         * The MovieMaterial class creates a texture from an existing Video instance.
  76.         *
  77.         * @param    video            A video object that display the FLV file
  78.         * @param    stream            Stream that is used to play the FLV file
  79.         * @param    initObject        [optional] - An object that contains additional properties with which to populate the newly created material.
  80.         */
  81.         public function VideoStreamMaterial ( video:Video=null, stream:NetStream=null, initObject:Object=null )
  82.         {            
  83.             // store the values
  84.             this.stream = stream;
  85.             this.video = video;
  86.             
  87.             // init the material with a listener for the NS object 
  88.             initMaterial ( video, stream );
  89.                         
  90.             super ( video, initObject );
  91.         }
  92.     
  93.  
  94.         // ______________________________________________________________________ INITIALISE
  95.         
  96.         /**
  97.          * Executes when the VideoMaterial is instantiated
  98.          */
  99.         private function initMaterial ( video:Video, stream:NetStream ):void
  100.         {
  101.             stream.addEventListener ( NetStatusEvent.NET_STATUS, onStreamStatus );
  102.         }
  103.         
  104.  
  105.         // ______________________________________________________________________ CREATE BITMAP        
  106.         
  107.         /**
  108.          * Creates the bitmap that is used as a texture
  109.          *
  110.          * @param The asset that is used as a texture.
  111.          */
  112.         protected override function createBitmap( asset:* ):BitmapData
  113.         {
  114.             // Dispose of previous bitmap
  115.             if( this.bitmap ) this.bitmap.dispose();
  116.     
  117.             // Create new bitmap
  118.             this.bitmap = correctBitmap( new BitmapData( asset.width, asset.height, this.movieTransparent ), true );
  119.  
  120.             // Draw bitmap
  121.             this.updateBitmap();
  122.     
  123.             return this.bitmap;
  124.         }
  125.         
  126.     
  127.         // ______________________________________________________________________ UPDATE
  128.     
  129.         /**
  130.         * Updates Video Bitmap
  131.         *
  132.         * Draws the current Video frame onto bitmap.
  133.         */    
  134.         public override function updateBitmap ():void
  135.         {
  136.             // copies the scale properties of the video
  137.             var myMatrix:Matrix = new Matrix();
  138.             myMatrix.scale( this.video.scaleX, this.video.scaleY );
  139.  
  140.             // Fills the rectangle with a background color
  141.             this.bitmap.fillRect ( this.bitmap.rect, this.fillColor );
  142.  
  143.             // Due to security reasons the BitmapData cannot access RTMP content like a NetStream using a FMS server.
  144.             // The next three lines are a simple but effective workaround to get pass Flash its security sandbox.
  145.             this.video.attachNetStream ( null );
  146.             this.bitmap.draw( this.video, myMatrix, this.video.transform.colorTransform );
  147.             this.video.attachNetStream ( this.stream );
  148.         }
  149.         
  150.         
  151.         // ______________________________________________________________________ STREAM STATUS
  152.     
  153.         /**
  154.         * Executes when the status of the NetStream object changes
  155.         *
  156.         * @param Event that invoked the handler
  157.         */            
  158.         private function onStreamStatus ( event:NetStatusEvent ):void
  159.         {
  160.             switch ( event.info.code )
  161.             {
  162.                 case "NetStream.Play.Start":
  163.                     animated = true;
  164.                     break;
  165.                 case "NetStream.Unpause.Notify":
  166.                     animated = true;    
  167.                     break;
  168.                 case "NetStream.Play.Failed":
  169.                     animated = false;
  170.                     break;
  171.                 case "NetStream.Play.Stop":
  172.                     animated = false;
  173.                     break;
  174.                 case "NetStream.Play.StreamNotFound":
  175.                     animated = false;
  176.                     break;
  177.                 case "NetStream.Pause.Notify":
  178.                     animated = false;
  179.                     break;
  180.             }            
  181.         }    
  182.         
  183.         // ______________________________________________________________________ TO STRING
  184.     
  185.         /**
  186.         * Returns a string value representing the material properties in the specified VideoMaterial object.
  187.         *
  188.         * @return    A string.
  189.         */
  190.         public override function toString():String
  191.         {
  192.             return 'Texture:' + this.texture;
  193.         }        
  194.     }
  195. }