Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > ActionScript 1,2 > Скриншот видео


Автор: Strell 18.2.2009, 23:21
Доброе время суток.

Написал некий Player, возникла необходимость в некоторых моментах заливать на сервер скриншоты видео.
Делал с использованием класса BitmapData
Код

        var obj:MovieClip = my_video; //Само Видео
        var newHeight:Number = 200;
        var newWidth:Number = 200;
        var mat:flash.geom.Matrix = new flash.geom.Matrix();
        mat.scale(newWidth/obj._width, newHeight/obj._height);
        var bmpData:flash.display.BitmapData = new flash.display.BitmapData(newWidth, newHeight, false, 0xFF0000);
        var temp:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
        mc._visible = true;
        bmpData.draw(obj, mat);
        temp.attachBitmap(bmpData, 1); //Прорисовываю для теста 


Проблема в том, что если пытаться сделать скриншот с видео, то получается одноцветный квадрат того цвета,
который был задан в конструкторе BitmapData - то есть bmpData.draw фактически вообще не срабатывает.

Но если вместо my_video передавать любой другой MovieClip, то все получается..

Не могу понять в чем проблема :(


Автор: Strell 22.2.2009, 18:03
Все, уже не надо. Сделал.

Проблема заключалась в том, что в 8м flash-е, из-за соображений безопасности запретили прорисовку с видео (чтобы не воравали).

Варианты решения:

      1. Переписать все под ActionScript 3, там это опять разрешили.

      2. Делать скриншоты на стороне сервера.

Выбрал 2-й  вариант, FLash + Ajax + mplayer (на стороне сервера) 

Автор: BMC 25.2.2009, 18:40
Хммм...интересно  smile  У меня для похожей ситуации код намного проще.

Код

    var screenData = new flash.display.BitmapData(all.video_mc._width, all.video_mc._height);
    screenData.draw(all.video_mc);

И всё прекрасно работает с AS2  smile  Остальные операции с фоткой лучше производить на сервере (PHP?).

Автор: Strell 27.2.2009, 01:44
Хм... и правда странно.. 

Код, который ранее у меня снимал скриншот, похож на твой.

Код

       /*....................*/
        var mat:flash.geom.Matrix = new flash.geom.Matrix();
        mat.scale(newWidth/obj._width, newHeight/obj._height);
        var bmpData:flash.display.BitmapData = new flash.display.BitmapData(newWidth, newHeight, false, 0xFF0000);
       /*....................*/
        bmpData.draw(obj, mat);
       /*....................*/


Где 
Код

          var mat:flash.geom.Matrix = new flash.geom.Matrix();

используется только для изменения размеров..

И все равно у меня не работало., получался прямоугольник цвета background(0xFF0000).

+ так как я в конечном итоге сделал, меня устраивает, та как работает быстрее(операции выполняются на стороне сервера, экономия трафика).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)