Вся правда о Видео во Flex. Часть 5. NetStream, обработка напильником.

October 21, 2007 – 5:53 pm

В этой части мы поругаемся на NetStream.

Грубо говоря NetStream – это основа всей работы с видео/аудио. На мой взгляд основа чего-либо должна быть идеальна, ну или хотя бы близка к идеалу. А тут нам подогнали реально сырое(? или просто глюченое) решение.
В процессе решения нам понадобится всего пара-тройка напильников

Напильник номер один

NetStream – как есть просто не приспособлен для работы с видео. Если попытаться использовать пример их хелпа, то мы после запуска видео сразу же ловим эксепшин:
[code lang="actionscript"]
Error #2044: Unhandled AsyncErrorEvent:. text=Error #2095: flash.net.NetStream was unable to invoke callback onMetaData. error=ReferenceError: Error #1069: Property onMetaData not found on flash.net.NetStream and there is no default value.
[/code]
Добрые индусы забыли добавить в NetStream метод onMetaData. Верне не один метод а всего два: onCuePoint, onMetaData, вобщем эти методы я подглядел в классе VideoPlayer, правда уже после того как я наловился эксепшинов ) еще там они объявляют метод onPlayStatus, но я не сильно старался понять зачем этот пустой метод нужен:).
И тут на выручку нам приходит напильник, просто наследуемся от NetStream и вставляем не хватающие методы, я просто стал диспатчить события с полученной инфой чтобы все выглядело однообразно:
[code lang="actionscript"]
class VideoNetStream extends NetStream
{
public function VideoNetStream(connection:NetConnection)
{
super(connection);
}

public function onMetaData(info:Object, ... rest):void
{
var evt : NetStatusEvent = new NetStatusEvent("metaData");
evt.info = info;
dispatchEvent(evt);
}

public function onCuePoint(info:Object, ... rest):void
{
var evt : NetStatusEvent = new NetStatusEvent("cuePoint");
evt.info = info;
dispatchEvent(evt);
}
}
[/code]

Напильник номер два

В данной ситуации я даже незнаю кого обвинять, или адоб или создателей firefox (далее фф). Вобщем в ФФ флеш плеер не соображает когда ему скормили неверный урл. вернее 50/50 иногда есть событие что поток не найден а иногда нет, вот например на такой урл [code]http://qweqweqweqweqw[/code] фф не будет ругаться и будет пытаться молча найти его всю свою жизнь, естественно уходы в раздумия на долго не радуют пользователя и он убивает фф :’(.
ИЕ работает как часики ) сразу же ругается на неверный урл.
Напильником номер два мы переопределяем метод play у NetStream и вставляем таймер который отвечает за таймаут соединения(если стрим в течении например минуты не отвечает то мы сам диспатчим событие об ошибке). Код я не буду приводить ибо его нужно чистить и приводить в порядок, а кому нужно тот сам напишет)

Грабли номер три

Если в ситуации описанной выше у ФФ еще делать close() (даже после таймера) и заново подсунуть неверный урл, то ФФ просто падает (play(badUrl) -> close() -> play(newBadUrl));
В данной ситуации нужно еще переопределить метод close() вставив проверку на то как жилось стриму до этого.

и закусочный напильник

Учитывая асинхронность работы NetStream при “нервном пользователе” не успевает сделать close(). На приход в себя, как показывает практика, достаточно 500-1000 мс.

Что я сделал собрав эти грабли с напильниками

У меня получился класс VideoNetStream, который сам справляется с критическими ситуациями, в моем случае он просто игнорирует вызовы всех методов до тех пор пока сервер или не отдаст ответ или пока сам стрим не поймет что он не дождался. я сделал флаг isBusy который показывает окружающему миру, что стрим еще думает.

Если есть какие-то еще “фичи” стрима, пишите, будем добавлять.
Если где-то написал не то говорите )

Продолжение серии может будет, а может и нет )

И немного десерта

читать и смотреть, сначало немного на русском, а потом и официальный сайт
с картинками

Bookmark and Share

Миру мир – войне не нужно!

October 20, 2007 – 8:12 pm

Простите за бред пьяного, но сколько усилий человечество тратит на войну, на эти конченые военные разработки, на эту жопу, которое одно государство гарантирует другому в случае чего, это ужас сколько в мире идиотов которые не могу жить спокойно уважая (даже на фиг то уважение – нейтрально) друг друга, сколько бабла вкладываться в разработку нового оружия и прочей человекоубийственной гадости, зачем?! – ради денег за ради денег! Сколько можно было сделать полезных дел, и вещей сколько жизней можно спасти. загляните в любые новости – “Иран способен выпустить 11 тысяч ракет и снарядов по военным базам врагов в первую минуту нападения на иранскую территорию” – Зачем?! потратим много денег за ради много убийства. лучше бы они это бабло подарили индусам которые делают флекс %). вообще ВСЕ СИТУАЦИИ МОЖНО РЕШИТЬ с миром, главное любить окружающих и чтобы они любили окружающий мир.

Вобщем главная идея этого бреда в том, что если вы попали в конфликтную ситуацию, то подумайте 3 раза как ее решить мирно, если не получается, то подумайте еще 3 раза и решите мирно.

з.ы. поспорить на работе это клёва ) главное чтобы консенсус организовался!

мега з.ы.
посмотрите на людей вокруг себя, даже не смотрите скажите “спасибо” продавцу, или спросите “вам помочь?” пожилому человеку с чемоданом, или просто улыбнитесь людями вокруг, и жить станет легче! или же всеравно, но кому-то будет приятно.

вобщем смотрите по сторонам – вы не пуп земли, но гдето рядом если вести себя хорошо!)

ну и в отвлечение от этой темы – “Что лучше: Singleton или использование статических членов класса?” от Garbage Collector

Bookmark and Share

IDEA-7!

October 18, 2007 – 6:36 am

Вышла IDEA-7 c поддержкой Flex. И вышла 15 числа, явно день был полный ништяков

Пока особых подробностей рассказать не могу, ибо только поставил и щупаю.

Пока нащупал стандартные возможности). Фичи и не фичи пытаються обсудить тут

Поругивается на свои неймспейсы в мхмл.

Вобщем все быстро побрасили работу и давате щупать что нам дали )

Bookmark and Share

AIR. Сюрпризы от File.browseForOpen

October 15, 2007 – 6:15 pm

Поставил флекс билдер 3 и решил пощупать AIR за самые интересные места, а именно за работу с файловой системой

Взял самый простой пример их хелпа по File метод browseForOpen

воткнул его в приложение

}
catch (error:Error)
{
trace(“Failed:”, error.message)
}
}

public function fileSelected(event:Event) : void
{
var stream : FileStream = new FileStream();
stream.open(File(event.target), FileMode.READ);
var fileData:String = stream.readUTFBytes(stream.bytesAvailable);
fileList.text = fileData;
}
]]>
и получил огромный болт – при нажатии на кнопку “Browse…” появляется окошко, в нем выбираешь файл но никакого события не происходит ни cancel ни select вообще ничего не происходит.

3 раза перечитал хелп, погуглил, нашел интересный блог от Benjamin Dobler – RichApps и там нашел описание мероприятия от адоба и его результатов (там есть весомый архив с различными примерами AIR приложений, в том числе и работы с файловой системой). Блог нужно читать всем внимательно 3 раза ибо интересно.

Так вот его пример работал, а мой нет разница был в том что моя переменная File был объявлена локально в функции и видимо на крысу по быстрому собралась мусорщиком %).

Правильный ответ в моей проблеме это объявить переменную как свойства класса и становиться замечательно!

}
catch (error:Error)
{
trace(“Failed:”, error.message)
}
}

public function fileSelected(event:Event) : void
{
var stream : FileStream = new FileStream();
stream.open(File(event.target), FileMode.READ);
var fileData:String = stream.readUTFBytes(stream.bytesAvailable);
fileList.text = fileData;
}
]]>

Bookmark and Share

День ништяков. FDT 3.0 – свершилось. Saffron UML Tool – где ты родимая!

October 15, 2007 – 8:27 am

Вышел релиз FDT 3.0 читать тут. Поделили продукт на 3 части, для маленьких, для средненньких и обещают для взрослых(с поддержкой mxml). Но что-то с ценами они намутили – для взрослыж 600-1 евро немного кусается, хотя если все что они заявили будте работать отлично я пожалуй скажу: “гудбай билдер”.

Я недавно щупал бетту FDT 3.0 была очень сырая и глючная, причем эти глюки лезли просто толпами, успели ли они поправить все это? вот вчем вопрос. Нужно побыстрее пощупать релиз может там все оки.

Вчера Рост писал о том что сегодня будет еще один ништяк под именем Saffron UML Tool. Я просто мечтаю запустить свои руки в это приложение, очень интересует – это всего лишь одна из красивых утилиток или же очень удобный инструмент.

А вообще нас жестоко … с редакторами, плюшки которые в остальных средах считаются необходимым минимумом для существования программера, нам выдют по одной и говорят, что мол мы придумали именно ту фичу которую вы хотели, посмотрите какие мы крутые.
Я долго думал каким же должен быть идеальный редактор, многое придумал ). Никто не хочет купить идею идеально редактора ? дорого отдам!

Bookmark and Share


]]> rss о RIA от 33 Коровы
Забадать RSS!
]]>
-->
~~~~~~