|
|
|||||
ну про алхимию было лишь предположение что какую то наиболее ресурсоемкую часть кода написать на си++, но правда ваша.
Добавлено через 8 минут что касается 10го плеера, так помоему мы должны писать как можно больше именно под десятку с целью того чтобы вынудить пользователей устанавливать его и ускорить интеграцию новой версии. Нам это только плюс. |
|
|||||
Регистрация: May 2007
Сообщений: 232
|
Кстати, меня очень интересует эта тема. Хотелось бы тоже реализовать что-то подобное.
Здесь можно найти байты с которых начинается и заканчивается каждая следующая фотка. http://ru.wikipedia.org/wiki/JPEG#cite_note-0 На практике применить пока не получилось. Буду писать, как продвигаются дела. Добавлено через 10 часов 30 минут Получилось прочитать mjpeg. Кому интересно расскажу завтра. А то уже не в силах сидеть за компом. |
|
|||||
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
очень интересно. ждем.
__________________
Отряд Котовскага |
|
|||||
Регистрация: May 2007
Сообщений: 232
|
В общем смысл в следующем. Формат MJPEG представляет собой последовательность JPEG картинок. Как верно указали выше, необходимо просто резать поток на части и обрабатывать их как фотки.
Википедия любезно предоставила материалы по спецификамии формата JPG. Все что нужно - это знать какими байтами начинается фотка и какими заканчивается. 0xFFD8 - Начало изображения. 0xFFD9 - Конец изображения. Все что осталось - написать прогу. Класс URLStream позволяет качать файл и иметь доступ к содержимому в процессе - это то, что нам нужно. Создаем экземпляр ByteArray, чтобы класть туда каждое новое изображение. Затем загружаем его в экземпляр Loader. Вот код который работает, но написан на скорую руку - я думаю можно сделать намного техничнее: package { import flash.display.*; import flash.events.ProgressEvent; import flash.net.*; import flash.utils.*; public class Tester extends Sprite { private var _stream:URLStream = new URLStream(); private var _loader:Loader = new Loader() private var _buffer:ByteArray; private var _write:Boolean = false; private var _markerDetection:Boolean = false; private var _request:URLRequest = new URLRequest("http://195.5.16.71/cgi-bin/mjpg/video.cgi?1235814902125"); public function Tester() { stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; addChild(_loader); _stream.load( _request ); _stream.addEventListener(ProgressEvent.PROGRESS, onProgress); } private function onProgress(event:ProgressEvent):void { var byte:int; // Если есть скачанные байты - обработать их while(_stream.bytesAvailable > 0) { byte = _stream.readUnsignedByte(); if(_write) _buffer.writeByte(byte); if(_markerDetection) { switch(byte) { case 0xD8: _write = true; _buffer = new ByteArray(); _buffer.writeByte(0xFF); _buffer.writeByte(0xD8); break; case 0xD9: _write = false; _buffer.writeByte(0xD9); _loader.loadBytes(_buffer); break; } } _markerDetection = (byte == 0xFF) ? true : false; } } } } http://www.codeproject.com/KB/audio-...select=2292455 Последний раз редактировалось Роман Вадимович; 28.02.2009 в 14:33. |
|
|||||
Регистрация: Nov 2005
Сообщений: 73
|
Использовал Ваш код, Роман Вадимович. Классно работает, вопрос только в том почему мелькает изображение при наведении на область видео мышки, что-то не понятно от чего это.
|
|
|||||
Регистрация: May 2007
Сообщений: 232
|
Этот код, как говорил, только тестовая версия. Мелькает по следующей причине.
Загрузка новых картинок производится в тот же контейнер. Смена происходит не мгновенно, поэтому мы замечаем белый экран. Чтобы этого не было - нужно усложнить программу. Возможнный выход: использовать не один контейнер Loader, а два. Грузить изображения попеременно и каждый раз менять их глубину относительно друг друга. |
|
|||||
Регистрация: Nov 2005
Сообщений: 73
|
Ясно, спасибо, испробую
|
|
|||||
Регистрация: Dec 2009
Сообщений: 7
|
Доброго времени, Роман Вадимович. Попробовал менять контейнеры-все равно мелькает при наведении мышкой в область экрана. А что там по поводу глубины относительно друг друга?
Добавлено через 13 минут нет, всё получилось))) |
|
|||||
вопросик про "менять глубину". У флэша нет масимальной глубины? т.Е. это число бесконечно?
|
|
|||||
Регистрация: Oct 2005
Адрес: Russia, Irkutsk
Сообщений: 742
|
Цитата:
The range of values represented by the int class is -2,147,483,648 (-2^31) to 2,147,483,647 (2^31-1)
__________________
smival.com |
Часовой пояс GMT +4, время: 02:40. |
|
« Предыдущая тема | Следующая тема » |
|
|