Захват кадра внешнего SWF и SecurityDomain - PullRequest
0 голосов
/ 22 марта 2012

Есть ли способ захвата кадра в виде растрового изображения SWF, загруженного с другим доменом безопасности, чем основное приложение?

Ответы [ 2 ]

0 голосов
/ 23 марта 2012

Краткий ответ: Нет. Однако есть обходной путь, если у вас есть доступ к какой-либо серверной технологии, такой как PHP, для развертывания вашего SWF.Исправление заключается в использовании PHP, чтобы прокси изображения для вас.Сценарий PHP загружает изображение с помощью cUrl, и yuor swf может загрузить их, поскольку они происходят из одного домена.

Вот пример простого прокси-скрипта.В производственной среде вы должны укрепить сценарий, чтобы предотвратить доступ к нему неавторизованных пользователей.

<?php

$post_data = $HTTP_RAW_POST_DATA;

$header[] = "Content-type: text/xml";
$header[] = "Content-length: ".strlen($post_data);

$ch = curl_init( $_GET['path'] ); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

if ( strlen($post_data)>0 ){
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
}

$response = curl_exec($ch);     
$response_headers = curl_getinfo($ch);     

if (curl_errno($ch)) {
    print curl_error($ch);
} else {
    print_r(curl_getinfo($ch));
    curl_close($ch);
    header( 'Content-type: ' . $response_headers['content-type']);
    print $response;
}


?>
0 голосов
/ 23 марта 2012

Использование функции BitmapData draw(IDrawable) является простым, если все совпадает SecurityDomain.

Использование этой техники возможно только в том случае, если SecurityDomain каждого загруженного элемента, который вы 'Вы пытаетесь выполнить рендеринг, чтобы принять домен кода, который делает запрос (вероятно, домен SWF).

Проверьте документы для BitmapData.draw (IDrawable) .Он говорит, что выдает SecurityError, когда:

Исходный объект и (в случае объекта Sprite или MovieClip) все его дочерние объекты не поступают из того же домена, что и вызывающая сторонаили не находятся в содержимом, которое доступно вызывающей стороне, вызвав метод Security.allowDomain ().Это ограничение не распространяется на содержимое AIR в изолированной программной среде безопасности приложения.

В результате этого вы используете стандарт Loader для загрузки содержимого из домена, который вы не контролируетевы не можете создавать «моментальные снимки» растровых изображений любого DisplayObjectContainer, который содержит это содержимое (если только это не разрешает доступ со всех доменов или вашего домена явно).Если вы do управляете доменами, вы сможете заставить его работать, используя crossdomain.xml (для содержимого, отличного от SWF) или Security.allowDomain() вызовы для содержимого SWF.Загруженный SWF должен сделать вызов allowDomain.

(Кроме того, если вы просто пытаетесь получить снимки, включая статические изображения, из других доменов, таких как JPG или GIF, вы можете загрузить данные изображения напрямуюи декодировать его в растровое изображение с помощью соответствующего декодера AS3 (вместо использования стандартного Loader), что позволяет делать его растровые снимки.)

...