Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.04.2015, 16:31
Kash вне форума Посмотреть профиль Отправить личное сообщение для Kash Найти все сообщения от Kash
  № 1  
Ответить с цитированием
Kash

Регистрация: Apr 2015
Сообщений: 4
Question StrobeMediaPlayback получение снимка в видео

Добрый день. Сразу оговорюсь, с флешем я знаком пару дней и только в рамках задачи из сабж. Есть сборка StrobeMediaPlyback, которая была как-то кастомизирована автором одного из используемых нами продуктов.
Цитата:
не помню, но какая-то разница была.
Стандартная версия действительно отказывается отображать видеопоток. Есть необходимость получение снимка из этого плеера. Так как нет возможность править сам плеер, реши пойти по простому пути - написать для этих целей плагин. Возникла проблема: никак не удается получить этот злосчастный кадр, при попытке отрисовать объект VideoSurface в Bitmap вылетает:
Цитата:
Error #2123: Security sandbox violation: BitmapData.draw: "cannot access null". No policy files granted access
В сети конкретно по этой ошибке рекомендаций предостаточно, но только загвоздка в том, что все они сводятся к crossdomain.xml и выставлением checkPolicyFileфлага для NetStream'а. Так как в моем случае отворот-поворот получает не сам плеер, а его плагин авторизовать его подобным образом никакой возможности нет. Есть ли какие-то "обходные маневры", или может я вообще делаю что-то в корне неверно? Сейчас функция получения скриншота выглядит следующим образом:
Код AS3:
var videoSurface:VideoSurface = m_player.displayObject as VideoSurface;
var transformationMatrix:Matrix = videoSurface.transform.matrix.clone();
transformationMatrix.scale(videoSurface.videoWidth / videoSurface.width, videoSurface.videoHeight / videoSurface.height);
transformationMatrix.tx = 0;
transformationMatrix.ty = 0;
 
var bitmapData:BitmapData = new BitmapData(videoSurface.width, videoSurface.height, true, 0x000000);
bitmapData.draw(videoSurface, transformationMatrix);
здесь m_player - инстанс MediaPlayer, полученный при инициализации плагина. Судя по тому, что рисуемая поверх videoSurface кнопка (нет в приложенном сниппете) отображается как раз поверх видео, я пытаюсь отрисовать именно тот объект что мне нужен.

Заранее спасибо за ответы.

Старый 01.04.2015, 19:41
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 2  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Плагин — это загрузчик плеера? Откуда загружается плеер? Совпадает ли домен загрузки плеера с доменом плагина? Совпадают ли домены плеера и контента?
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 01.04.2015, 19:56
Kash вне форума Посмотреть профиль Отправить личное сообщение для Kash Найти все сообщения от Kash
  № 3  
Ответить с цитированием
Kash

Регистрация: Apr 2015
Сообщений: 4
Нет плагин это плагин. osmf и smpb поддерживают загрузку плагинов для добавления элементов управления, вставки рекламы, ватермарков, добавления источников воспроизведения (проигрывание видео из youtube к примеру) и т.д. Контент тянется с одного домена, а сам плеер и плагин с другого. В policy логе FlashPlayer'а видно что для smpb происходит загрузка crossdomain.xml и воспроизведение идет нормально. Но вот для плагина xml'ка не грузится даже если форсировать ее загрузку вручную через Security.loadPolicyFile("..."). Так же смущает факт того, что в тексте исключения вместо имени/адреса ресурса указан null. Есть подозрение что FlashPlayer не дает доступ к DisplayObject другого swf файла (плагин все ж отдельная swf'ка, хоть и грузится плеером).

Старый 01.04.2015, 20:24
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 4  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от Kash Посмотреть сообщение
Контент тянется с одного домена, а сам плеер и плагин с другого.
Спасибо. Именно это я и хотел узнать.

Цитата:
В policy логе FlashPlayer'а видно что для smpb происходит загрузка crossdomain.xml и воспроизведение идет нормально.
Безусловно, воспроизводится будет. Но скопировать контент ( BitmapData#draw() ) доменам, если они не упомянуты в списке crossdomain.xml будет проблематично. Загляните в него и расскажите что там.

Добавлено через 2 минуты
Цитата:
Сообщение от Kash Посмотреть сообщение
Но вот для плагина xml'ка не грузится даже если форсировать ее загрузку вручную через Security.loadPolicyFile("...").
Один раз уже загрузили, когда запустился сам плеер. Нет больше необходимости в загрузке.

Добавлено через 5 минут
Для более детального осмысления посетите, конечно, справку.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 01.04.2015, 20:36
Kash вне форума Посмотреть профиль Отправить личное сообщение для Kash Найти все сообщения от Kash
  № 5  
Ответить с цитированием
Kash

Регистрация: Apr 2015
Сообщений: 4
Все же провел "следственный эксперимент", который долго отодвигал по причине того, что не верил в его успех: закинул тестовое видео (flv'шку) в ту же папку, где лежали swf'ки. Да, draw действительно отработал без проблем.

Содержимое crossdomain.xml
Код:
<cross-domain-policy>
  <allow-access-from domain="*" to-ports="*"/>
  <site-control permitted-cross-domain-policies="all"/>
  <allow-http-request-headers-from domain="*" headers="*" />
</cross-domain-policy>
Полез читать доку по ссылке.

Старый 01.04.2015, 20:39
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Хочу вас предупредить. В доке, мягко говоря, ошибаются. Там нет ни слова про "копирование", там только про
Код:
URL policy files grant cross-domain permissions for reading data.
При этом картинки и видео можно загрузить и проиграть, но нельзя "скопировать", если нет разрешения.

Судя по policy, который вы предоставили, проблема не в этом.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 02.04.2015, 12:56
Kash вне форума Посмотреть профиль Отправить личное сообщение для Kash Найти все сообщения от Kash
  № 7  
Ответить с цитированием
Kash

Регистрация: Apr 2015
Сообщений: 4
Попробовал принудительно выставлять checkPolicy для NetStream'а как перед самим снятием скриншота, так и при добавлении трейта потока в плеер (по событию TRAIT_ADD). Пробовал отрывать NetStream от VideoSurface перед снятием скриншота (attachNetStream(null)). Снова пробовал форсировать загрузки policy файла в разные моменты времени (при инициализации плагина, при добавлении тейта потока, перед получением скриншота). Результат неизменен, единственное отличие было в текстовке сообщения об ошибке после отрыва от потока - null заменился на Unknown URL. На каком-то ресурсе предлагали еще дергать Security.allow[Insecure]Domain перед загрузкой политики, не смотря на видимую абсурдность, на всякий случай этот вариант тоже проверил. Больше идей пока не возникало.
И меня по-прежнему смущает, что Security.loadPolicy отказывается грузить политику. Судя по логу, при создании 2х копий плеера на странице, политика грузится дважды для одного и того же домена для одной и той же swf'ки, для моей же swf'ки грузить ее он отказывается наотрез.

Старый 02.04.2015, 20:22
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 8  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Я с восхищением слежу за вашим расследованием. Будьте так любезны, если все получится, рассказать подробности.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 07.04.2015, 23:09
ZergMaster вне форума Посмотреть профиль Отправить личное сообщение для ZergMaster Найти все сообщения от ZergMaster
  № 9  
Ответить с цитированием
ZergMaster
 
Аватар для ZergMaster

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
А у меня похожая проблема.
Сделал плеер на основе OSMF для камер наблюдения, который принимает любые потоки. И вот проблема - rtpm и воспроизводит отлично, и нормально снимает методом .draw скриншот с .mediaPlayerSprite.mediaContainer . А вот потоки f4m не хотят скриншотиться... выдают на .draw тот самый
Код:
SecurityError: Error #2123: Security sandbox violation: BitmapData.draw: file:///Z|/home/test1.ru/www/strimPlayer.swf cannot access null. No policy files granted access
__________________
while(live()) { hope(); }

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:03.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 01:03.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.