Re: screenshot на flash игри
Ух, днес открих начин... Тъп е, но върши работа с много, ама много криви писаници и идеята, че скрийншотовете ще се правят на windows машина.
За flv няма проблем- качвате си ffmpeg-dev, има php-ffmpeg в нета, дето работи с библиотеката и дава достъп до инфо, кадри и т.н. Не съм тествал 100%, но стъпките биха били с exec да се конвертира .flv до .avi, ако случайно не работи направо с .flv, и после да се действа от php. PECL е, та иска да не е на хостинг машина. .swf не работят с тоя начин.
Та... Ето и как става flv. Има проектче за четене на екран от IE през php. В phpclasses е първото, което излиза при търсене на screenshot. Теглите го. Слагате го на XP с WAMP примерно. Тук аз ползвам виртуална машина по Ubuntu. В администрацията на XPто давате Services и на Apache в log on позволявате "Allow this service to interact with desktop". Проектчето иска COM подръжка в php, но WAMP я има. Рестартирате Apache и може да правите screenshot от IE. Вече може да взимаме кадри от .SWF. Проблемът е, че повечето игри имат малко реклами, та... Ето един patch, който чака 30 секунди да се отиде на нормален екран:
В screenshot.class.php добавяме в класа горе
public $sleep=0;
Редактираме следната функция:
public function navigate( $url = 'about:blank' )
{
$url = ( $url ) ? $url : 'about:blank';
$this->IE->Navigate( ($url) ? $url : 'about:blank' );
$this->url = $url;
$time = time();
if ($this->sleep){
set_time_limit(100);
sleep($this->sleep);
}
while ( $this->IE->ReadyState != '4' and $time + 2 > time() )
{
$this->pump();
}
if ( $this->pump )
{
$this->pump( 1000 );
}
return true;
}
Тук мой е кодът за sleep.
Правим си shot.php, който ще генерира картинката.
<?php
/**
This first half is an example of just using the screenshot features, without instantizing the manipulation class
**/
require_once('screenshot.class.php');
class_exists('screenshot') or die('screenshot class does not exist.');
$screen = new screenshot(false, 768, 1024);
$screen->sleep= 30;
$screen->navigate('http://hot2.kefche.net/games/d67wtx.swf');
$screen->title('You can set custom titles too (and custom body if you want)');
$screen->position(0, 0);
$screen->screenshot();
$screen->output();
$screen->save('image.jpg');
$screen->quit();
unset($screen);
?>
Вече имаме нещо, което в cron може да се вика с опашка и да прави картинки. Лесно се прави wrapper да записва картинките в thumb папка на основния сървър. Заради забавянето няма как да не се вика това чудо на 2-3 минути поне.
Важното е, че поне е действащ начин.
Има и някакъв wrapper за Mozilla под Linux в phpclasses. Там пак ще трябва да се мисли изчакване. Не мога да го подкарам, защото нямам libxul под Ubuntuто.
Намерих и трети вариант, дето с някаква сложнотия с 5-6 python пакета прави конвертиране на .swf в avi и после може да се ползва ffmpeg, но там ubuntu запецна на инсталацията на пакетите.
http://dreamerwebdesign.blogspot.com за още трикове.