Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Базы данных и графика в них ! [D5, MSSQL, Oracle, ]


UnDISCOvery ©   (2002-01-10 13:46:00) 

Такая вот задача, вернее незадача. :) Есть видеопоток, который представляет из себя набор кадров (в формате bmp), плотность потока примерно 60 кадров в секунду. Нужно это из этого дела сделать, вроде как архив. Сейчас я сделал это в виде обычного файла на диске (через FileStream, куда пишутся подряд все кадры сжатые в jpeg). Но мой научрук совсем сдвинулся :) ... грит а давай сделай архив в виде таблицы БД, с возможностью чтения, поиска и навигации. А вот собственно и вопросы:
1. Какой алгоритм вывода графики будет наиболее быстрым, приминительно к формату видеопотока ?
2. Какую платформу БД лучше использовать ? Так как предстоит иметь дело с выборкой большого обьема BLOB полей.
3. Какие компоненты и каким образом использовать ?

Мысли пока такие: по таймеры считывать группу записей с блобами в кэш на клиенте (може быть храним. процедурой), а затем оттуда высасывать по кадру и выводить на канву, чувствую что без разделения на нити не обойтись :(.. не люблю я это.

ЗЫ. Выслушаю ЛЮБЫЕ ваши мысли по поводу сабжа !
Заранее фэнкс ! :)


UnDISCOvery   (2002-01-11 20:44:00) [1]

Всем отозвавшимся ! Спасибо, друзья ! Я тут ночкой погемороился и вот что получилось:
БД - MSSQL DE 7.0, доступ через ADO
Запись из видеопотока в таблицу БД
insert Cam1 (Time, Kadr)
values (:tm, :kr) - это в ADOCommand
ParamByName.Value:= Time;
ParamByName.LoadFromStream(MemoryStrm,ftGraphic)
Плотнее чем 5-6 к\с не получилось, правда и машина не супер (винт не скази, камень целерон :) ). НО в принципе довольно приемлемо. Изображение переодически подергивается когда начинаешь в базу скидывать, но это не часто, хотя и раздражает.

Чтение из базы.
ADOquery. select по времени от пользователя, затем First, SaveToStream, Jpeg.LoadFromStream, Canvas.StretchDraw(jpeg), Next
скорость чтение 17 к\с... все довольно плавно и даже перемотка получается :).

Мотивация по поводу БД звучала так: Ну так же удобнее управлять доступом и для сети все уже готово, или ты хочешь еще и сетевую версию делать ? :) Я сказал, что я уже не чего не хочу :))

А почему чтение из базы дольше ? По-моему основное время уходит на обращение к диску, а оно одинаково или я не прав ?

АААА !!! Вот еще что ! Только что вычитал что у SQLя есть специальные методы для работы с блобами: readtext, writetext. Они хранятся в виде набора страниц по 2Кб. А в поле БД только указатель на первую. Может это аргумент для прееода, чтобы он успокоился и не придумывал задач ? :)))

если есть что сказать еще пишите egen_postbox@rambler.ru


Praco   (2002-01-11 12:47:00) [2]

"А не проще хранить по-прежнему в файлах на диске, а в БД только пути к ним"
Кстати, читаться кадры будут гораздо быстрее, чем из базы. Если планируется показывать фильмы, то этот вариант оптимальный.


petr_v_a   (2002-01-11 12:02:00) [3]

У Oracle ( за отдельные деньги ) есть некая фигня под названием Video Information Retrivial Cartrige. Что это такое и как им пользоваться не знаю, но, судя по названию :), Вам стоит это посмотреть


Ura   (2002-01-11 11:56:00) [4]

Если твой научрук совсем такой умный предложи ему еще более продвинутую систему.
11 машин. Сеть 100МГб. Распределенная база.
1 машина делает обработку и рассылает кадры на другие машины, где они и ложаться в Бд. 1-ый кадр на первую 2-ой на вторую и т.д. а можно еще и запрашивать кто свободен сейчас.
Кол машин выбирается только для того, чтобы они успевали сохранить все твой кадры т.е. скоростью работы СУБД. ;-)


Desdechado   (2002-01-11 11:09:00) [5]

Использование СУБД должно быть оправдано. Чем это мотивирует препод? Если только для удобства навигации, то чем его не устраивает файловая система:
- имя файла - то, что в нем заснято,
- время создания, модификации, последнего доступа - пожалуйста,
- группировка - рассовать по папкам,
- поиск - по всему вышеуказанному (не будет же он, в самом деле, искать по содержимому двоичного файла).
Зачем тут СУБД? Только для использования современных технологий? Так можно мобилой гвозди забивать.
Подумай... Может, стоит просто удобный интерфейс сделать, а детали реализации пусть останутся тайной.


Mike_Goblin   (2002-01-11 09:47:00) [6]

А не проще хранить по-прежнему в файлах на диске, а в БД только пути к ним


Praco   (2002-01-10 15:50:00) [7]

Когда-то я это делал примерно так(D5, MSSQL 7.0)
DataSet.Edit;
//Field - блоб поле
(Field as TBlobField).LoadFromStream(stream);
или
(Field as TBlobField).LoadFromFile(file);
DataSet.Post;

Транзакции и обработку Exception по вкусу.

Я создавал отдельный поток для сохранения каждого кадра в MSSQL.

Можно и из другого приложения (по таймеру - почему бы и нет).Канва здесь не при чем.Читаешь кадр из файла - сохраняешь, читаешь следующий...


Наверх

Титульная страница Поиск, карта сайта Написать письмо