2010-06-04 4 views
1

У меня возникли проблемы, чтобы изменить мой обычай UIComponent что завернуть flash.media.Video объект (причина, я выбираю этот путь, потому что mx.control.VideoDisplay не поддерживает потоковое воспроизведение, которые доступны в flash.media.Video, который attachNetStream()). Как только я создам размер 320x240 Video и удалю его из своего родителя, я не могу заменить его другим, большим или меньшим.Resize flash.media.Video

Вот мой код (этот только захват камеры не NetStream).

package media 
{ 
    import flash.media.Camera; 
    import flash.media.Video; 

    import mx.controls.VideoDisplay; 
    import mx.core.UIComponent; 

    public class VideoUI extends UIComponent 
    { 
     private var video:Video; 

     public function VideoUI(width:int, height:int) 
     { 
      super(); 
      video = new Video(width, height); 
      var cam:Camera = Camera.getCamera(); 
      video.attachCamera(cam); 
      addChild(video); 
     } 
    } 
} 

Другая часть,

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> 
    <mx:Script> 
     <![CDATA[ 
      import media.VideoUI; 

      private function addVideoOutput():void 
      { 
       // initial video size 
       var video:VideoUI = new VideoUI(160,120); 
       HBoxVideo.addChild(video);    
      } 

      protected function resizeVideo(event:MouseEvent):void 
      { 
       var videoList:Array = HBoxVideo.getChildren(); 
       for (var i:int = 0; i < videoList.length; i++) 
       { 
        var video:VideoUI = videoList.pop(); 
        HBoxVideo.removeChild(video); 
        // new size that produce the previous size :(
        video = new VideoUI(320, 240); 
        HBoxVideo.addChild(video); 
       } 
      } 

     ]]> 
    </mx:Script> 
    <mx:Button click="addVideoOutput()" x="10" y="265" label="add"/> 
    <mx:HBox x="10" y="10" width="100%" id="HBoxVideo"> 
    </mx:HBox> 
    <mx:Button x="58" y="265" label="resize" click="resizeVideo(event)" id="resizeButton"/> 
</mx:Application> 

Большое спасибо.

ответ

0

По умолчанию новые экземпляры класса Video имеют высоту 320 пикселей и высоту 240 пикселей. Вам необходим доступ к вашему видео в класса VideoUI, так что вы можете изменить ширина и высота.

Как следует:

Изменить все вхождения вашего видео переменной в VideoUI.as к

_video 

и применять поглотитель.

Новый видео интерфейс класса

package media 
{ 
    import flash.media.Camera; 
    import flash.media.Video; 

    import mx.core.UIComponent; 

    public class VideoUI extends UIComponent 
    { 
     private var _video:Video; 

     public function VideoUI(width:int, height:int) 
     { 
      super(); 
      _video = new Video(width, height); 
      var cam:Camera = Camera.getCamera(); 
      _video.attachCamera(cam); 
      addChild(_video); 
     } 

     public function get video():Video{ 
      return _video; 
     } 
    } 
} 

Заменить в ваш главный MXML файл

video = new VideoUI(320, 240); 

с

video.video.width=320; 
video.video.height=240; 

Примечание: Вы должны переименовать VideoUI экземпляр до videoui или виды. Это немного запутанно. Вы также можете перенести это в свой класс VideoUI или создать метод. Выбор ваш.

+0

Вы правы, мне нужно получить доступ к видеоизображению вместо VideoUI. Мой плохой. –