【问题标题】:Get random (or first) frame from video using flex使用 flex 从视频中获取随机(或第一)帧
【发布时间】:2012-01-15 02:44:59
【问题描述】:

我正在开发一个用于录制视频并将其预览为 tilelist 的应用程序。有什么方法可以捕获视频帧以用作我列表中的缩略图?我正在使用 Flex 4.5。

【问题讨论】:

    标签: video actionscript flex4 thumbnails


    【解决方案1】:

    来自this answer

    var frameGrab:BitmapData = new BitmapData(clip.width, clip.height, false, 0);
    frameGrab.draw(clip); // the .draw() method will copy the frame from your video.
    var frame:Bitmap = new Bitmap(frameGrab);
    

    【讨论】:

      【解决方案2】:

      我正在寻找的是以下内容:

              private function capture(filename:String):void
              {   
                  var bitmapData:BitmapData = new BitmapData(videoDisplay.width, videoDisplay.height);            
                  bitmapData.draw(videoDisplay,new Matrix());
      
                  var bitmap : Bitmap = new Bitmap(bitmapData);
                  var jpg:JPEGEncoder = new JPEGEncoder();
                  var ba:ByteArray = jpg.encode(bitmapData);
                  var newImage:File = File.desktopDirectory.resolvePath("foldername/"+filename+".jpg");
      
                  fileStream = new FileStream();
                  fileStream.open(newImage, FileMode.UPDATE);
                  fileStream.writeBytes(ba);
                  fileStream.close();
      
      
              }
      

      这是当用户点击录制时调用的方法..所以我抓住一张照片作为拇指!我希望以上内容也能帮助其他寻找类似东西的人...... 非常感谢!

      【讨论】:

        【解决方案3】:

        还有另一种方法: 将事件监听器附加到视频流(即NetStream),如下所示:

        var vConnection:NetConnection = new NetConnection();
        vConnection.connect(null);
        var vStream:NetStream = new NetStream(vConnection);
        vStream.addEventListener(NetStatusEvent.NET_STATUS, onNetStatusChange);
        

        监听器看起来像这样:

        protected function onNetStatusChange(event:NetStatusEvent):void
        {
            switch(event.info.code)
            {
                case "NetStream.Play.Start": 
                {
                    vStream.seek(1); // seek to key frame
                    break;
                }
                case "NetStream.Video.DimensionChange":
                {
                    // after a dimension change we have a loaded frame
                    // do whatever you want here, but keep in mind 
                    // that the video needs to be on the display list 
                    // if you want to draw it   
                    break;
                }
                default: break;
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2022-06-21
          • 2010-11-12
          • 2014-09-30
          • 1970-01-01
          • 2022-01-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-30
          相关资源
          最近更新 更多