|
|
|||||
Регистрация: Jun 2009
Сообщений: 7
|
[Проблема] Скриншот с вебкамеры
Уважаемые флешеры, выручайте.
Уже больше недели не могу решить одну, может быть и довольно банальную для вас, проблему. Мне требуется, как вы можете видеть из названия топика, захватить кадр с вебкамеры посредством флеша и сохранить его на сервере (с помощью PHP скрипта). Гугл был изрыт вдоль и поперек на предмет материала который мог бы мне помочь в данной проблеме. Не без результатно конечно: Цитата:
Но не один из данных примеров не отражает полностью то что мне нужно. По этому у меня накопилось пара вопросов: 1. Возможно ли захватить кадр с обьекта Video? Или только с MovieClip 2. Нужно ли останавливать воспроизведение видео для этого? 3. Какую библиотеку лучше всего использовать для этого? JPEGEncode? P.S. Используются Adobe CS4 Pro и FMS 3.5 и естественно Apache 2.2 + PHP 5 c GD lib |
|
|||||
[+4 16.07.08]
Регистрация: Jul 2008
Адрес: Gamburg
Сообщений: 108
|
Реализация очень проста
1.рисуйте в битмап дату 2.не обезательно 3.JPEGEncode вот пример: public static function saveImageToServer(val:BitmapData):void{ if (val!=null){ var encoder : JPGEncoder = new JPGEncoder(100); var picture:ByteArray = encoder.encode(val); var urlRequest:URLRequest = new URLRequest(); urlRequest.url = "saveImageToServer.php"; urlRequest.contentType="application/octet-stream" urlRequest.method = URLRequestMethod.POST; urlRequest.data=picture var urlLoader:URLLoader = new URLLoader(); urlLoader.load(urlRequest) } }
|
|
|||||
Регистрация: Jun 2009
Сообщений: 7
|
Спасибо за ответ но к сожалению для меня вещи не на столько банальны, учитывая очень маленький опыт в работе с ActionScript.
Я создал saveImageToServer.as и добавил в него предоставленный вами код внутри package {} Естественно в проекте прописал связь с этим классом, но при попытке запустить приложение в логах получаю примерно следующее: "1012: Атрибут static может быть использован только внутри класса" Не могли бы указать как прописать данную функцию внутри класса? |
|
|||||
[+4 16.07.08]
Регистрация: Jul 2008
Адрес: Gamburg
Сообщений: 108
|
Mr.Hyde
//V_Utility.as package{ public class V_Utility{ public function V_Utility(){ } public static function saveImageToServer(val:BitmapData):void{ ...... } } } далее у вас есть главний клас приложения, например V_Main.as вот и все |
|
|||||
Регистрация: Jun 2009
Сообщений: 7
|
Данный пост переписывался раз 5 по причине запоздавших мыслей которые приходили в голову в самый последний момен. Слава богу что большенство довольно таки банальных вещей было отсеяно и остался только последний очень важный для меня аспект.
//V_Utility.as package{ import flash.display.BitmapData; import flash.utils.ByteArray; import flash.events.*; import flash.net.*; import com.adobe.images.JPGEncoder; public class V_Utility{ public function V_Utility(){ } public static function saveImageToServer(val:BitmapData):void{ if (val!=null){ var encoder : JPGEncoder = new JPGEncoder(100); var picture:ByteArray = encoder.encode(val); var urlRequest:URLRequest = new URLRequest(); urlRequest.url = "saveImageToServer.php"; urlRequest.contentType="application/octet-stream" urlRequest.method = URLRequestMethod.POST; urlRequest.data=picture var urlLoader:URLLoader = new URLLoader(); urlLoader.load(urlRequest) } } } } //V_Main.fla //-=-=-=-=-=-=-=-= IMPORTS =-=-=-=-=-=-=-=- import V_Utility; //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- //-=-=-=-=-=-=-=-= VARIABLES =-=-=-=-=-=-=-=- var myTextField:TextField; var cam:Camera; var vid:Video; var t:Timer = new Timer(2000); //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- //-=-=-=-=-=-=-=-= FUNCTIONS =-=-=-=-=-=-=-=- function onCameraStatus(evt):void { if (evt.code == "Camera.Muted") { trace ("Camera access has been denied"); } if (evt.code == "Camera.Unmuted") { trace ("Camera access has been granted"); } } function connectCamera():void { vid = new Video(); vid.width = cam.width; vid.height = cam.height; vid.attachCamera(cam); addChild(vid); t.start(); } function timerHandler(event:TimerEvent):void { myTextField.text = ""; myTextField.appendText("bandwidth: " + cam.bandwidth + "\n"); myTextField.appendText("currentFPS: " + Math.round(cam.currentFPS) + "\n"); myTextField.appendText("fps: " + cam.fps + "\n"); myTextField.appendText("keyFrameInterval: " + cam.keyFrameInterval + "\n"); } function saveImage():void { //V_Utility.saveImageToServer(); } //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- myTextField = new TextField(); myTextField.x = 150; myTextField.y = 300; myTextField.background = true; myTextField.selectable = false; myTextField.autoSize = TextFieldAutoSize.LEFT; cam = Camera.getCamera(); if (!cam) { Security.showSettings(SecurityPanel.CAMERA); }else{ cam.addEventListener(StatusEvent.STATUS, onCameraStatus); connectCamera(); } addChild(myTextField); t.addEventListener(TimerEvent.TIMER, timerHandler); btn_print.addEventListener(MouseEvent.CLICK, saveImage); |
|
|||||
[+4 16.07.08]
Регистрация: Jul 2008
Адрес: Gamburg
Сообщений: 108
|
Не советую писать код в кадре.
конверт в ьитмапу: Последний раз редактировалось Venya2007; 16.06.2009 в 16:29. |
|
|||||
Регистрация: Jun 2009
Сообщений: 7
|
Все отлично, swf компилируется без проблем, но при запуске подгружает процессор на 50-70% а в папку генерирует файл либо полностью белый либо полностью черный файл О.о
Последний раз редактировалось Mr.Hyde; 16.06.2009 в 18:13. |
|
|||||
[+4 16.07.08]
Регистрация: Jul 2008
Адрес: Gamburg
Сообщений: 108
|
Mr.Hyde ну, тут уже надо смотреть код. какая у вас версия пхп? когда и как вы сохраняете! попробуйте вывести битмапу которую вы сгенерили, на экран.
Добавлено через 46 секунд Только что специально протестировал код, все работает |
|
|||||
Регистрация: Jun 2009
Сообщений: 7
|
PHP Version 5.2.4
//V_Main.fla //-=-=-=-=-=-=-=-= IMPORTS =-=-=-=-=-=-=-=- import V_Utility; //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- //-=-=-=-=-=-=-=-= VARIABLES =-=-=-=-=-=-=-=- var myTextField:TextField; var cam:Camera; var vid:Video; var t:Timer = new Timer(2000); //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- //-=-=-=-=-=-=-=-= FUNCTIONS =-=-=-=-=-=-=-=- function onCameraStatus(evt):void { if (evt.code == "Camera.Muted") { trace ("Camera access has been denied"); } if (evt.code == "Camera.Unmuted") { trace ("Camera access has been granted"); } } function connectCamera():void { vid = new Video(); vid.width = cam.width; vid.height = cam.height; vid.attachCamera(cam); addChild(vid); t.start(); } function timerHandler(event:TimerEvent):void { myTextField.text = ""; myTextField.appendText("bandwidth: " + cam.bandwidth + "\n"); myTextField.appendText("currentFPS: " + Math.round(cam.currentFPS) + "\n"); myTextField.appendText("fps: " + cam.fps + "\n"); myTextField.appendText("keyFrameInterval: " + cam.keyFrameInterval + "\n"); } function saveImage(evt):void { var bData:BitmapData=new BitmapData(vid.width,vid.height,false,0); bData.draw(vid); V_Utility.saveImageToServer(bData); } //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- myTextField = new TextField(); myTextField.x = 150; myTextField.y = 300; myTextField.background = true; myTextField.selectable = false; myTextField.autoSize = TextFieldAutoSize.LEFT; cam = Camera.getCamera(); if (!cam) { Security.showSettings(SecurityPanel.CAMERA); }else{ cam.addEventListener(StatusEvent.STATUS, onCameraStatus); connectCamera(); } addChild(myTextField); t.addEventListener(TimerEvent.TIMER, timerHandler); btn_print.addEventListener(MouseEvent.CLICK, saveImage); //V_Utility.as package{ import flash.display.BitmapData; import flash.utils.ByteArray; import flash.events.*; import flash.net.*; import com.adobe.images.JPGEncoder; public class V_Utility{ public function V_Utility(){ } public static function saveImageToServer(val:BitmapData):void{ if (val!=null){ var encoder : JPGEncoder = new JPGEncoder(90); var picture:ByteArray = encoder.encode(val); var urlRequest:URLRequest = new URLRequest(); urlRequest.url = "saveImageToServer.php"; urlRequest.contentType="application/octet-stream" urlRequest.method = URLRequestMethod.POST; urlRequest.data=picture; var urlLoader:URLLoader = new URLLoader(); urlLoader.load(urlRequest) } } } }
|
|
|||||
[+4 16.07.08]
Регистрация: Jul 2008
Адрес: Gamburg
Сообщений: 108
|
Mr.Hyde проверил, код рабочий. Вы тестируете на денвере или на удаоенном серваке?
|
Часовой пояс GMT +4, время: 19:39. |
|
« Предыдущая тема | Следующая тема » |
|
|