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

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

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

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
По умолчанию OSMF как же сделать скриншот видео?

Привет друзья!
Замучился со своим вопросов... перерыл пол интернета, в том числе и этот форум.
Там и не могу понять, как же реализовать screenshot во Flash по технологии OSMF?

Стандартные методы дают только пустой белый битмап...
Код AS3:
var raw:BitmapData = new BitmapData(300, 450);
				raw.draw(videoStream.mediaPlayerSprite, new Matrix());
			var bit:Bitmap = new Bitmap(raw);
				bit.x = 30
			main._this.addChild(bit);
__________________
while(live()) { hope(); }

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
а если фоткать контейнер плеера?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

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

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
пробовал. Попробовал еще раз.
при
Код AS3:
                        var raw:BitmapData = new BitmapData(300, 450);
				raw.draw(videoStream.mediaPlayerSprite.mediaContainer, new Matrix());
			var bit:Bitmap = new Bitmap(raw);
				bit.x = 30
			main._this.addChild(bit);;
та же самая фигня - показывает просто белый прямоугольник

Добавлено через 43 секунды
может кто-нить знает, где раздобыть нормальную документацию на OSMF? а то стандартная адобовская вообще какая-то куцая совсем...

Добавлено через 48 минут
А ведь казалось бы - что может быть проще принтскрина?.. =\ абалдеть..
__________________
while(live()) { hope(); }

Старый 28.08.2014, 01:51
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 4  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Может там секьюритиеррор проскакивает?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 28.08.2014, 02:26
Nooob вне форума Посмотреть профиль Отправить личное сообщение для Nooob Найти все сообщения от Nooob
  № 5  
Ответить с цитированием
Nooob
 
Аватар для Nooob

Регистрация: Mar 2007
Сообщений: 319
Дело в том что по умолчанию OSMF рисует видео не в дисплей листе, а в слое stageVideo (если есть аппаратная возможность), так оно рисуется и работает значительно быстрее, но есть ряд ограничений "You cannot bitmap cache the video or use BitmapData to access it."
Чтобы отключить отрисовку в stageVideo нужно просто поставить флаг
Код AS3:
OSMFSettings.enableStageVideo = false;

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

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
УРАааа!
Огромное спасибо, Nooob!

Все заработало.
Значит так. Перед созданием MediaPlayerSprite пишем
Код AS3:
import org.osmf.utils.OSMFSettings;
OSMFSettings.enableStageVideo = false;
там, где делаем скрин -
Код AS3:
public function ScreenShot():void {
 
			main.TRACER('function makeScreen');
 
			var raw:BitmapData = new BitmapData(videoStream.mediaPlayerSprite.width, videoStream.mediaPlayerSprite.height);
				raw.draw(videoStream.mediaPlayerSprite, new Matrix());
			var bit:Bitmap = new Bitmap(raw);
			var brr:ByteArray = new JPGEncoder().encode(raw);
			var fil:FileReference = new FileReference();
				fil.save(brr, "image.jpg");
 
			}
__________________
while(live()) { hope(); }

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

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
На самом деле какой-то отстой....
Косяк в том, что скрин получается фигового качества. А если развернуть плеер на весь экран - то качество остается, буд-то оно маленькое. И неудивительно, ведь он фоткает саму флешку...

По сему надо как-то менять метод. Расскажите, кто может быть знает, есть ли какая-то возможность достать из потока напрямую кадр? Как добраться непосредственно до массива битов, подгружаемых в плеер? Тогда можно было бы делать стоп-кадр независимо от размера самого плеера - просто дергать из потока кадр в высоком разрешении... Есть у кого-нибудь быть может мысли, куда топать?
__________________
while(live()) { hope(); }

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

Регистрация: Mar 2007
Сообщений: 319
может потому что JPGEncoder? попробуй PNGEncoder

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

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
не, не помогает

Добавлено через 56 минут
вопрос больше в том - как вытащить кадр из видео потока?
__________________
while(live()) { hope(); }

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

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
С прошлой проблемы справился при помощи МЕГА-костыля

Код AS3:
//эта функция повешена на кнопке "сделать скрин" на панели плеера
public function clickScreen(e:MouseEvent=null):void {
                 //здесь добавляю мувик SkrinPanel, делающий маленький скрин и заслоняющий собой видео;
                 //в котором строка подтверждения "вы действительно хотите?" и кнопки yes/no;
                 skrinPanel = new SkrinPanel(actualPlayer().videoStream.mediaPlayerSprite.mediaContainer));
                 //теперь делаю видеопоток, с которого делается скрин, максимально возомжного для потока разрешения
                 //пользователь этого не видит, так как видео заслоняет статичная картинка, а видео маскируется
                 actualPlayer().videoStream.sizeToSkrin(true);
                 }
 
//эта функция вызывается по нажатию кнопки yes в skrinPanel 
public function ScreenShot():void {
                //в которой и происходит копирование с видео большого разрешения
                var raw:BitmapData = new BitmapData(videoStream.getmpWIDTH(), videoStream.getmpHEIGHT());
                     raw.draw(videoStream.mediaPlayerSprite.mediaContainer, new Matrix());
                var brr:ByteArray = new ByteArray();
                     brr = new PNGEncoder().encode(raw);
                filArr.push(new FileReference());
                var nameSTR:String = 'streamPlayer_screenshot_'+String(Math.floor(Math.random()*100000))+String(videoStream.hronometrash)+'.png';
                filArr[filArr.length-1].save(brr, nameSTR);
 
                resizePlayer();
               //теперь можно удалять заслонку и возвращать видео к исходному размеру
               videoStream.sizeToSkrin(false);
}
НО

теперь возникла другая проблема. Сейчас требуется расширить плеер, чтобы через него можно было воспроизводить HDS, в данном случае - поток с расширением .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.
	at flash.display::BitmapData/draw()
дравить пробовал уже всё, что можно. Ни в какую. Печально и то, что кое-где из англоязычных источников написано, что это вроде как вообще невозможно! Что представляется мне очень странным. Неужели это в действительности так?
__________________
while(live()) { hope(); }

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

Теги
osmf , screenshot
Опции темы
Опции просмотра

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

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


 


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


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